c语言冲刺复习资料上机填空题上机2Word下载.docx
- 文档编号:22932170
- 上传时间:2023-02-06
- 格式:DOCX
- 页数:51
- 大小:717.10KB
c语言冲刺复习资料上机填空题上机2Word下载.docx
《c语言冲刺复习资料上机填空题上机2Word下载.docx》由会员分享,可在线阅读,更多相关《c语言冲刺复习资料上机填空题上机2Word下载.docx(51页珍藏版)》请在冰豆网上搜索。
i++)//通过一次循环来实现将数组逆置。
n/2,循环的位置,只需要循环到数组的中间位置,就可以完成逆置了。
{
t=a[i];
a[i]=a[n-1-i];
//将前面的数组与后面的数组进行对换。
当i=0的时候,表示是第一个数组元素,所以要和最后一个数组元素互换,所以是a[n-1-i]
a[n-1-i]=t;
//将前面的数组元素放到后面去。
直接将上面的代码抄下来就可以了
}
****************************第三题目*******************************
分析:
intfun(STU*std,STU*k,intyear)
{inti,n=0;
N;
i++)
if(std[i].year==year)由于要比较的是相同的年数,所以要将每次循环的结构体中的year都要比较一次,当我们指定的参数year和我们结构体中某个元素的year相同的时候,就执行下面的“把这个结构体数据保存到数组k中”
k[n++]=std[i];
要注意,n++,之后那么下次新得到的数据就放到了后面,例如,第一个放到了k[0],由于进行了n++,那么下次符合条件的新的结构体就放到了k[1]中了。
这里注意:
进行的是结构体的整体复制,所以是填写std[i]这个结构体的名称。
return(n);
}根据题目的要求,是要求返回符合条件的结构的数目,很多人会写成n-1,这个地方应该是填写n。
带入法则:
假定有一个符合题目的要求,那么我们知道就执行一次k[n++]=std[i].由于k的初始值是0,所以这个地方是进行n++之后变成了1,返回的就是n,现在为1。
不是能n-1得到的0。
****************************第四题目*******************************
#defineM5
#defineN20
intfun(char(*ss)[N],int*n)
{inti,k=0,len=N;
for(i=0;
M;
i++)题目要求:
求字符串数组中长度最短的字符数串所在的行下标,所以这里循环的时候,一定是循环字符串的个数,也就是字符数组中表示存放字符个数的数组的行的个数(上课时强调的重点)。
这个地方明显就是M,表示的是五行,作五次的循环判断,每次将字符串最短的给保存下来。
{len=strlen(ss[i]);
if(i==0)*n=len;
//第一个字符串判断时要,初始化len,
if(len<
*n)注意:
*n是已经保存了前面判断出来的最短的字符串中字符的个数,len的数值是现在判断的这个字符串的字符个数。
如果现在len的数值比前面所有字符串中最短的字符串(*n存放)还要短,那么就要把len的数值代替*n中去,因为*n是表示最短的字符串的个数。
{*n=len;
k=i;
题目要求返回的是最短字符串的行下标,也就是这里要保存的是循环的中的i,它表示正在判断第几个字符串的长度。
这里保存的就是最短字符串的行下标。
return(i;
);
所以这里根据题目意思是返回i,它表示最短字符串的行下标。
****************************第五题目*******************************
typedefstruct
{intnum;
charname[9];
charsex;
struct{intyear,month,day;
}birthday;
floatscore[3];
}STU;
//一个结构体的定义
voidshow(STUtt)注意:
这里是被调用函数的行参的考察,我们学习的主要是传地址和传数值名称两种,这个地方是传名称,看到下面打印的时候使用的是tt.num,很明显行参的名称是tt,并且是传递的是参数的名称,如果传递的是地址,下面的引用应该是tt->
num.或(*tt).num.
{inti;
printf("
\n%d%s%c%d-%d-%d"
tt.num,tt.name,tt.sex,
tt.birthday.year,tt.birthday.month,tt.birthday.day);
3;
%5.1f"
tt.score[i]);
根据观察我们可以发现该结构体成员中有个浮点型的score[3]的成员,这个地方是通过循环依次把这三个成绩数出来,所以填写的是tt.score[i],(上课时强调如何使用过)。
\n"
main()
{STUstd={1,"
Zhanghua"
'
M'
1961,10,8,76.5,78.0,82.0};
\nAstudentdata:
show(std);
这里填写的是调用函数,这个地方是实参,我们呢可以看到上面定义了一个结构体变量,std,所以这个地方就是填写std。
(toosimply)
****************************第六题目*******************************
voidfun(SLIST*p)
{SLIST*t,*s;
t=p->
next;
s=p;
两个指针,t和s,我们要注意,s是在t前面的一个指针,—>
st
while(t->
next!
=NULL)当t没有到末尾的时候(我要大家背了这句话)。
{s=t;
t=t->
这里也是我上课要大家背的,表示将指针往后挪一个位置。
填写的是next。
%d"
t->
data);
将这个数据输出,我们知道数据域是data,所以这个地方要填写的是t->
data.
s->
next=NULL;
free(t);
}—>
由于这个地方要求把最后一个节点给释放掉,所以这个地方是把t给释放掉。
画个图,题目就很简单了。
****************************第七题目*******************************
voidfun(char*s)
{inti,j,n;
s[i]!
='
\0'
;
if(s[i]>
0'
&
&
s[i]<
9'
)判断一个字符是否为数字要用到逻辑与&
,这个是我上课时候强调的重点。
这里我们要记住用这个方法判断字符是否为数字,请大家记住。
{n=0;
while(s[i+1+n]!
=‘\0’)n++;
这个地方要注意:
这里是要填写到后面的字符不是为0的化,我们就将n进行自加,也就是说,到s[i]后面的某个位置当他不是为空,我们要把他往后挪。
这里的n是得到要挪位的个数。
for(j=i+n+1;
j>
j--)
s[j+1]=s[j];
把前一位的s[j]往后挪一位,因为增加了一位字符*,所以要往后面挪一个位置。
使得空出的位置我们写上字符*。
s[j+1]='
*'
i=i+1;
跳过*这个字符的位置。
****************************第八题目*******************************
#include<
stdio.h>
#defineN4
voidfun(int(*)t[N],intn)从主函数可知道,传递的实参是一个二维的数组名,所以我们应该在接收的时候用树上规定的三种格式即可,这个地方一定要注意N是在前面已经预定义为了4,所以要用到我们这里的方法。
其它写法见树上说的。
要记住二维数组名是一个行指针,不是列指针!
{inti,s;
i<
i++)这里要知道,N是表示的一共有几行,所以这个地方实际上就是要循环N行来进行处理。
每一行都要处理对角的元素。
{s=t[i][i];
保存对角的元素
t[i][i]=t[i][n-i-1];
t[i][n-1-i]=s;
这个地方的填空,很简单,上课的时候我要求大家一定把两个数字进行互换给背下来,在这地方根据这个方法就可以知道填写的一定是s。
(技巧解题目)
}}
****************************第九题目*******************************
#defineN9
intfun(inta[],intn)函数的行参是一个数组,可以看成一个指针
{inti,j;
j=0;
n;
if(a[i]%2==0){判断一个数字是否为偶数,上课我们强调了是考试的重点,这里要求判断数组每个数,所以根据循环我们知道填写的应该为a[i]%2。
请大家记住:
判断一个数字是偶数,是a[i]%2==0。
对2整除等于0的数字一定是偶数。
aj]=a[i];
j++;
要求当这个数组是偶数的时候,我们就要保存好,所以在这个地方,我们要填上的是a[j].注意到这个地方,我们的j是从0开始的,每次填写一个后,我们的j++一次,这样是便于存放下一个偶数。
returnj;
这里返回的是偶数的个数,所以我们填写的是j,这个地方不是j+1或者是j-1,我们可以通过代入法进行验算。
由于上面每次存放一个偶数都要进行一次j++,所以,即使后面没有偶数了,我们也进行了j++,所以就直接就是填写j。
(上机常考题目)如果是只有一个偶数,那么我们就知道也要执行一次j+,j从0变成了1,正好是返回一个。
****************************第十题目*****************************
intfun(inta[],intn)
if(a[i]%2==1)这个题目非常的简单,和前面一个题目很类似。
首先判断一个数字是否为奇数,那么很快我们就知道判断一个数字是否为奇数是,a[i]%2==1就是奇数了。
a[j]=a[i];
如果是奇数就要把他给存放起来,这个地方j是初始化为0,每次存放一个奇数,我们就要将j进行一次自加,便于存放下一个奇数。
j就是我们要返回的奇数的个数,由于,每次存放一个奇数后,我们都会进行j++,所以在返回的时候就不用返回j+1了。
****************************第十一题目****************************
voidfun(char*s,int*t)
{inti,n;
n=0;
s[i]!
=NULL;
i++)循环的时候,第二个是判断的条件,这个地方要判断字符是否已经到字符串的末尾了,所以我们可以看到这个地方我们函数的第一个行参是char*s,这个地方指针可以当作数组使用,所以这个地方可以填写的是s[i]活着是*(s+i)
s[i]<
='
)n++;
判断一个字符是否为数字,是要求大家一定牢牢记住的,这个地方不再多讲。
return*t=n;
这个return后面填写的语句是比较有特色的,是一个赋值语句,题目要求把字符窜中数字的个数放到指针参数t中,所以应该填写这个答案,由于调用函数第二个传递的是地址,所以我们接收的时候采用的是指针t。
****************************第十二题目****************************
string.h>
#defineN8
{charnum[10];
intyear,month,day;
STUfun(STU*std,char*num)返回的类型应该是结构体类型,这个地方是常考的题型,类似于返回int类型等,只是把结构体类型看成一个类型!
STUa={"
9999,99,99};
if(strcmp(std[i].num,num)==0)要判断每个结构体元素的的num是否与我们指定的num相同。
要注意我们传递过来的是结构体的数字,所以每个元素都要判断。
return(std[i]);
由于该函数要返回的是一个结构体变量,所以要把这个符合要求的结构体元素返回,所以这个地方要返回的是结构体名称。
returna;
****************************第十三题目****************************
(文件的考察)
voidWriteText(FILE*fw)这个地方是填写的是文件指针,这个填空题目很单一话,只要求大家认真的记住这个文件指针。
{charstr[81];
\nEnterstringwith-1toend:
gets(str);
while(strcmp(str,"
-1"
)!
=0){
fputs(str,fw);
fputs("
fw);
把输入的内容写道了文件当中。
这个也是要求大家记住的。
看网上课堂详细讲了这几个文件的函数处理的方法。
voidReadText(FILE*fr)
\nReadfileandoutputtoscreen:
fgets(str,81,fr);
while(!
feof(fr)){
%s"
str);
这个是文件的读出处理,这个也是要求大家自己背的,在网上课堂中,文件中动的内容已经讲的很清楚了。
****************************第十四题目****************************
voidfun(int(*t)[N],intm)
{inti,j;
i++)这空很简单,我们上课的时候强调过一定要记住for循环的三个部分,这个地方,就是要记住将i进行自加,那么由于是每行都处理,所以这个地方是自加1。
{for(j=N-1-m;
=0;
j--)这个循环是表示右移多少个位置。
t[i][j+m]=t[i][j];
可以通过代入法进行解题目,实际的意义是把前面的元素放到后面来进行保存,前面的元素后面会将其覆盖为0,后面的元素则是被前面的元素覆盖了。
for(j=0;
m;
j++)移动了m项,要将这些全部变成零。
t[i][j]=0;
****************************第十五题目****************************
math.h>
doublefun(doublex,intn)
{doublef,t;
inti;
f=1;
初始化是我们考试的时候的重点,我们这个题目可以看到第一个地方是初始化为1的。
由于要相加的第一项是1,所以填写的是1。
如果要加的第一项目是2则要填写2。
注意看清楚题目。
t=-1;
for(i=1;
t*=(-1)*x/i;
每次要循环加上一个数值,这个地方要注意,题目是要求一正一负,所以在这个地方是填写-1,那么累积相加的时候,一项为正,一项为负。
f+=t;
每次循环的时候,要把当前项目给加进来,这个地方的t表示的是当前项。
用f来保存每次累加的和。
returnf;
****************************第十六题目****************************
voidfun(inta[],intn)
{inti,t,p;
p=(n%2==0)?
n/2:
n/2+1;
这个是条件语句。
首先大家一定要弄懂这个语
是真前假后。
为真是取表达式2的数值,假取表达式3的数值。
这个地方按题目要求是,当为偶数的时候是为n/2,当为奇数的时候要变成n/2+1,这种题目,大家往往应该用代入法进行测试即可得到答案。
a[i]=a[p+i];
要进行互换的两个元素,a[i]表示是从第一个元素开始处理a[p+i]表示从中间的元素开始处理。
将这两个数值进行交换。
a[i]=t;
上课的时候,强调了大家一定要记住互换的两个数的方法。
这个地方请大家记住。
****************************第十七题目****************************
voidfun(PERSON*std)由于传递时候是结构体的数组名称,所以这个地方要接收的时候,就一定要用结构体指针,从后面的代码可以观察到结构体的指针是用std[i]来进行处理的,虽然出现的形式是数组,但是可以看成是指针。
这里填写的时候就要用到*std指针。
{
PERSONtemp;
进行交换的数值,使用的结构体变量,所以这个地方要用结构体变量名。
if(std[0].num>
std[1].num)
{temp=std[0];
std[0]=std[1];
std[1]=temp;
std[2].num)
std[0]=std[
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 冲刺 复习资料 上机 填空