《二级C语言机试试题11演示教学.doc》由会员分享,可在线阅读,更多相关《二级C语言机试试题11演示教学.doc(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Good is good, but better carries it.精益求精,善益求善。二级C语言机试试题11-请补充fun函数,该函数的功能:按0到9统计一个字符串中的奇数数字字符各自出现的次数,结果保存在数组num中。注意:不能使用字符串库函数。例如,输入g1ters4543123564879fgfd,结果为1=2,3=2,5=2,7=1,9=1。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include#include#defineN500voidfun(char*t,intcount)inti,j;in
2、ta10;char*p=t;for(i=0;i=0&*p=9)_2_;p+;for(i=1,j=0;i10;i=i+2,j+)_3_;main()charsN;intcount10,i;printf(nPleaseenteracharstring:);gets(s);printf(nTheoriginalstringn);puts(s);fun(s,count);printf(nThecountberofletern);for(i=0;i5;i+)printf(n);printf(%d=%d,2*i+1,counti);printf(n);【答案】(1)*p(2)a*p-0+(3)countj
3、=ai下列给定程序中,函数fun的功能是从字符串s中删除所有小写字母c。请修改程序中的错误,使它能计算出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#includevoidfun(char*str)inti,j;for(i=j=0;stri!=0;i+)/*error*/if(stri!=c)strj=stri;/*error*/stri=0;main()charstr100;printf(Enterastringwithc:);gets(str);printf(Theoriginalstring:);puts(str);fun(str);printf(The
4、stringafterdeleted:);puts(str);printf(nn);【答案】(1)strj+=stri;(2)strj=0;M名学生的成绩已在主函数中放入一个带头节点的链表结构中,a指向链表的头节点。请编写函数fun,它的功能是求出平均分,由函数值返回。例如,若学生的成绩是69、85、91、72、64,则平均分应当是76.200。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#include#defineM5structlistdoubles;structlist*next;typedefs
5、tructlistSCORE;doublefun(SCORE*a)SCORE*creat(double*stu)SCORE*a,*p,*q;inti=0;a=p=(SCORE*)malloc(sizeof(SCORE);p-s=0;while(is=stui;i+;p-next=q;p=q;p-next=0;returna;outlist(SCORE*a)SCORE*p;p=a-next;printf(a);doprintf(-%4.1f,p-s);p=p-next;while(p!=0);printf(nn);main()doublestuM=69,85,91,72,64,ave;SCORE
6、*a;FILE*out;a=creat(stu);outlist(a);ave=fun(a);printf(ave=%6.3fn,ave);out=fopen(outfile.dat,w);fprintf(out,%6.3f,ave);fclose(out);【答案】doubleaver=0.0;/初始化平均值while(a!=NULL)/如果头指针不指向链表尾,就累加链表中成绩aver+=a-s;/累加成绩a=a-next;/指向下一个节点aver/=M;/求平均分returnaver;请补充fun函数,该函数的功能是逐个比较s1、s2两个字符串对应位置中的字符,把ASCII值小或相等的字符
7、依次存放到s数组中,形成一个新的字符串。例如,若s1中的字符串为aBCDeFgH,s2中的字符串为ABcd,则s中的字符串应为ABCD。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include#includevoidfun(char*a,char*b,char*s)inti=_1_;while(*a_2_*b)if(*a*b)si=*b;elsesi=*a;if(*a)a+;if(*b)b+;i+;main()chars110=aBCDeFgH,s210=ABcd,s80=0;fun(s1,s2,s);print
8、f(Thestrings1:);puts(s1);printf(Thestrings2:);puts(s2);printf(Theresults:);puts(s);【答案】(1)0(2)|下列给定程序中,函数fun的功能是根据整型参数n,计算如下公式的值:例如,若n=4,则应输出0.600000。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include#include/*error*/fun(intn)doublex=1;inti;/*error*/for(i=2;in;i+)x=1.0/(1+x);returnx;main()i
9、ntn;printf(nPleaseentern:);scanf(%d,&n);printf(x%d=%lfn,n,fun(n);【答案】(1)doublefun(intn)(2)for(i=2;i=n;i+)请编写函数fun,其功能是计算并输出给定10个数的方差:例如,给定的10个数为76.0、65.0、72.0、85.0、57.0、67.0、45.0、92.0、44.0、58.0,则输出为F=14.982990。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#includedoublefun(doubl
10、ey10)main()doublef,y10=76.0,65.0,72.0,85.0,57.0,67.0,45.0,92.0,44.0,58.0;inti;FILE*out;printf(nTheoriginaldatais:n);for(i=0;i10;i+)printf(%6.1f,yi);printf(nn);f=fun(y);printf(f=%fnn,f);out=fopen(outfile.dat,w);fprintf(out,%f,f);fclose(out);【答案】inti,j;doublef=0.0,f1=0.0;/初始化变量for(i=0;i10;i+)/求公式中y的值f
11、1+=yi;f1/=10;for(j=0;js2。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include#include#defineN80char*fun(char*s1,char*s2)char*t1=s1,*t2=s2;while(*t1&*t2)if(_1_)return;t1+;t2+;if(*t1=*t2)return=;if(*t1=_3_)return;main()chars1N,s2N;printf(Pleaseinputs1:n);gets(s1);printf(Pleaseinputs2:
12、n);gets(s2);printf(Theresultisn);printf(s1%ss2,fun(s1,s2);【答案】(1)*t1*t2(3)0下列给定的程序中,函数fun的功能是应用递归算法求某数b的平方根。求平方根的迭代公式如下:例如,2的平方根值为1.414214。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include#include/*error*/fun(doubleb,doublex0)doublex1,y;x1=(x0+b/x0)/2.0;/*error*/if(abs(x1-x0)=1e-6)y=fun(b,
13、x1);elsey=x1;returny;main()doublen;printf(Entern:);scanf(%lf,&n);printf(Thesquarerootof%lfis%lfn,n,fun(n,1.0);【答案】(1)doublefun(doubleb,doublex0)(2)if(fabs(x1-x0)=1e-6)程序定义了MM的二维数组,并在主函数中自动赋值。请编写函数fun(intM,intn),该函数的功能是使数组左下半三角元素中的值乘以n。例如,若n的值为0,matrix数组中的值为:,则返回主程序后,matrix数组中的值应为:请勿改动主函数main与其他函数中的任
14、何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#include#include#defineM3voidfun(intmatrixM,intn)main()intmatrixMM,n,i,j;FILE*out;printf(Thearrayn);for(i=0;iM;i+)for(j=0;jM;j+)matrixij=rand()%10;printf(%4d,matrixij);printf(n);n=rand()%4;printf(n=%4dn,n);fun(matrix,n);printf(THERESULTn);for(i=0;iM;i+
15、)for(j=0;jM;j+)printf(%4d,matrixij);printf(n);out=fopen(outfile.dat,w);for(i=0;iM;i+)for(j=0;jM;j+)matrixij=i*j+1;fun(matrix,9);for(i=0;iM;i+)for(j=0;jM;j+)fprintf(out,%4d,matrixij);fprintf(out,n);fclose(out);【答案】inti,j;for(i=0;iM;i+)for(j=0;j=i;j+)matrixij=matrixij*n;请补充fun函数,该函数的功能是寻找两个整数之间的所有素数(包
16、括这两个整数),把结果保存在数组a中,函数返回素数的个数。例如,输入3和18,则输出为357111317。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include#include#defineN500intfun(intn,intm,intaN)inti,j,k=0,flag;for(j=n;j=m;j+)_1_;for(i=2;ij;i+)if(_2_)flag=0;break;if(_3_)ak+=j;returnk;main()intn=0,m=0,i,k;intaN;printf(Inputnn);sca
17、nf(%d,&n);printf(Inputmn);scanf(%d,&m);for(i=0;im-n;i+)ai=0;k=fun(n,m,a);for(i=0;ik;i+)printf(%4d,ai);【答案】(1)flag=1(2)j%i=0(3)flag=1下列给定程序中函数fun的功能是:传入一个整数n,计算如下公式的值:例如,若输入5,则应输出-0.283333。请修改函数fun中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include#includedoublefun(intn)doubl
18、es=1.0;inti;/*error*/for(i=2;i=n;i+)s=1.0-1/i;/*error*/_填空_main()intn;printf(nPleaseenter1integernumbers:n);scanf(%d,&n);printf(nnTheresultis%lfn,fun(n);【答案】(1)s=s-1.0/i;/s-=1.0/i;/s-=(double)1/i(2)returns;请编写函数fun,其功能是将两个两位数的正整数a、b合并成一个整数放在c中。合并的方式:将a的十位和个位依次放在c的百位和个位上,b的十位和个位依次放在c的千位和十位上。例如,当a=45,
19、b=12,调用该函数后,c=1425。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#includevoidfun(inta,intb,long*c)main()inta,b;longc;FILE*out;printf(Inputa,b:);scanf(%d%d,&a,&b);fun(a,b,&c);printf(Theresultis:%ldn,c);out=fopen(outfile.dat,w);for(a=0;a10;a+)fun(a+28,a+82,&c);fprintf(out,%ldn,c);
20、fclose(out);【答案】*c=(b/10)*1000+(a/10)*100+(b%10)*10+a%10;请补充fun函数,该函数的功能是计算并输出下列多项式的值:例如,若主函数从键盘给n输入50后,则输出为S=1.960784。请勿改动主函数main与其他函数中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include_1_fun(intn)inti,j;doublesum=0.0,temp;for(i=1;i=n;i+)temp=0.0;for(j=1;j=i;j+)temp+=_2_;sum+=1.0/temp;returnsum;m
21、ain()intn;doubles;printf(Pleaseinputn:);scanf(%d,&n);s=fun(n);printf(Theresultis:%fnn,s);【答案】(1)double(2)j下列给定程序中函数fun的功能:输出N行N列正方阵,然后求两条对角线上各元素之和,返回此和数。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include#include#defineN5/*error*/intfun(intn,inta)inti,j,sum=0;printf(nThe%dx%dmatrix:n,N,N);fo
22、r(i=0;in;i+)/*error*/for(j=0;jn;j+)printf(%4f,aij);printf(n);for(i=0;in;i+)sum+=aii+ain-i-1;if(n%2!=0)sum-=an/2n/2;return(sum);main()intxNN=1,2,3,4,5,2,3,4,5,1,3,4,5,1,2,4,5,1,2,3,5,4,3,2,1;printf(nThesumofallelementson2diagnalis%d.,fun(N,x);【答案】(1)intfun(intn,intaN)(2)printf(%4d,aij);请编写一个函数fun,它的功
23、能是计算n门课程的平均分,计算结果作为函数值返回。例如,若有5门课程的成绩是88、92、80、61.5、55;则函数的值为75.30。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#includefloatfun(float*b,intm)main()floats10=88,92,80,61.5,55,aver;FILE*out;aver=fun(s,5);printf(nAveragesis:%5.2fn,aver);out=fopen(outfile.dat,w);fprintf(out,%5.2f,aver);fcl
24、ose(out);【答案】floatave=0.0;inti;for(i=0;im;i+)ave+=bi;ave/=m;returnave;请补充main函数,该函数的功能是计算每个学生科目的平均分,并把结果保存在数组a中。例如,当scoreNM=89,78,90,71,61,78.5,84,83,65,63,88,91.5,89,93,95,72.5,65,56,75,77时,四个学生的平均分为:77.874.791.369.1。仅在横线上填写所需的若干表达式或语句,请勿改动函数中的其他任何内容。注意:部分源程序给出如下。#include#defineN4#defineM5main()int
25、i,j;staticfloatscoreNM=89,78,90,71,61,78.5,84,83,65,63,88,91.5,89,93,95,72.5,65,56,75,77;floataN;for(i=0;iN;i+)_1_;for(i=0;iN;i+)for(j=0;jM;j+)_2_;ai/=M;for(i=0;iN;i+)printf(nStudent%dtaverage=%5.1f,i+1,ai);【答案】(1)ai=0(2)ai+=scoreij;下列给定程序中函数fun的功能:先将在字符串str中的字符按正序存放到s串中,然后把str中的字符按逆序连接到s串的后面。例如,当st
26、r中的字符串为asd时,则s中的字符串应为asddsa。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include#include#includevoidfun(char*str,char*s)inti,s1;s1=strlen(str);/*error*/for(i=0;i=s1;i+)si=stri;for(i=0;is1;i+)ss1+i=strs1-i-1;/*error*/ss1=0;main()charstr100,s100;printf(nPleaseenterstring:);scanf(%s,str);fun(str
27、,s);printf(Theresultis:%sn,s);【答案】(1)for(i=0;is1;i+)(2)s2*s1=0;请编写函数fun,其功能是将两个两位数的正整数x、y合并成一个整数放在z中。合并的方式是将x的十位和个位依次放在z的个位和百位上,y的十位和个位数依次在z的千位和十位上。例如,当x=12,y=34,调用该函数后,z=3241。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#includevoidfun(intx,inty,long*z)main()intx,y;longz;FILE*
28、out;printf(Inputx,y:);scanf(%d%d,&x,&y);fun(x,y,&z);printf(Theresultis:%ldn,z);out=fopen(outfile.dat,w);for(x=0;x10;x+)fun(x+77,x+66,&z);fprintf(out,%ldn,z);fclose(out);【答案】*z=(y/10)*1000+(x%10)*100+(y%10)*10+x/10;已知学生的记录由学号和学习成绩组成,N名学生的数据已存入student结构体中,给定程序的功能是找出成绩最高的学生记录,通过形参返回主函数。请勿改动主函数main与其他函数
29、中的任何内容,仅在fun函数的横线上填写所需的若干表达式或语句。注意:部分源程序给出如下。#include#include#defineN10typedefstructscharnum10;ints;student;fun(studentSTU,student*s)_1_a;inti;a=STU0;for(i=1;ia.s)_2_=STUi;*s=_3_;main()studentSTUN=01,81,02,89,03,66,04,87,05,77,06,90,07,79,08,61,09,80,10,71,m;inti;printf(Theoriginaldatan);for(i=0;iN;
30、i+)printf(No=%sMark=%dn,STUi.num,STUi.s);fun(STU,&m);printf(Thehighst:%s,%dn,m.num,m.s);【答案】(1)student(2)a(3)a下列给定程序中,函数fun的功能是计算整数m的阶乘。请修改程序中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#includedoublefun(intm)doubleresult=1.0;/*error*/while(m1&m100)result*=-m;/*error*/_填空_main
31、()intm;printf(Enteraninteger100:);scanf(%d,&m);printf(nn%d!=%1gnn,m,fun(m);【答案】(1)result*=m-;(2)returnresult;请编写函数fun,其功能是将两个丙位数的正整数x、y合并成一个整数放在z中。合并的方式:将x的十位和个位依次放在z的千位和十位上,y的十位和个位依次放在z的个位和百位上。例如,当x=12,y=34,调用该函数后,z=1423。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#includevoi
32、dfun(intx,inty,long*z)main()intx,y;longz;FILE*out;printf(Inputx,y:);scanf(%d%d,&x,&y);fun(x,y,&z);printf(Theresultis:%ldn,z);out=fopen(outfile.dat,w);for(x=0;x10;x+)fun(x+44,x+55,&z);fprintf(out,%ldn,z);fclose(out);【答案】*z=(x/10)*1000+(x%10)*10+(y%10)*100+y/10;请补充main函数,该函数的功能是输出一个NN矩阵,要求周边元素赋值0,非周边元
33、素赋值1。仅在横线上填写所需的若干表达式或语句,请勿改动函数中的其他任何内容。注意:部分源程序给出如下。#include#defineN10main()intaNN;inti,j,n;printf(Pleaseinputn:n);scanf(%d,&n);for(i=0;in;i+)for(j=0;jn;j+)if(i=0|i=n-1|j=0|j=n-1)_1_;else_2_;printf(Theresultis:n);for(i=0;in;i+)printf(n);for(j=0;jn;j+)printf(%4d,aij);【答案】(1)aij=0(2)aij=1下列给定的程序中,函数fu
34、n的功能是交换主函数中两个变量的值。例如,若变量x中的值为1,y中的值为2,则程序运行后x中的值为2,y中的值为1。请修改程序中的错误,得出正确的结果。注意:不要改动main函数,不能增行或删行,也不能更改程序的结构。#include/*error*/voidfun(inta,intb)intt;/*error*/t=a;a=b;b=t;main()intx,y;x=1;y=2;fun(&x,&y);printf(theresultis%d,%dn,x,y);【答案】(1)voidfun(int*a,int*b)(2)t=*a;*a=*b;*b=t;学生的记录由学号和成绩组成,M名学生的数据已
35、在主函数中放入结构体数组stu中,请编写函数fun,它的功能是把小于等于平均分的学生数据放在l所指的数组中,大于等于平均分的学生人数通过形参n传回,平均分通过函数值返回。请勿改动主函数main与其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。注意:部分源程序给出如下。#include#defineM10typedefstructcharnum10;doubles;SCORE;doublefun(SCORE*c,SCORE*l,int*n)main()SCOREstuM=03,76,02,69,04,85,01,91,07,72,08,64,06,87,09,60,11,79
36、,12,73;SCORElowM,t;FILE*out;inti,j,n;doubleave;ave=fun(stu,low,&n);printf(The%dstudentdatawhichislowerthan%7.3f:n,n,ave);for(i=0;in;i+)printf(%s%4.1fn,lowi.num,lowi.s);printf(n);out=fopen(outfile.dat,w);fprintf(out,%dn%7.3fn,n,ave);for(i=0;in-1;i+)for(j=i+1;jn;j+)if(lowi.slowj.s)t=lowi;lowi=lowj;low
37、j=t;for(i=0;in;i+)fprintf(out,%4.1fn,lowi.s);fclose(out);doublefun(intm)main()intm;doublef;FILE*out;printf(nInputm:);scanf(%d,&m);f=fun(m);printf(nnf=%fnn,f);out=fopen(outfile.dat,w);for(m=0;m10;m+)fprintf(out,%fn,fun(m+20);fclose(out);【答案】doubleaver=0.0;/放平均分的变量设置初始化inti,j=0;for(i=0;iM;i+)/求总和aver+=ci.s;aver/=M;/求平均分for(i=0;iM;i+)/循环判断每一个成绩与平均分的关系if(ci.s=aver)/如果成绩小于等于平均分*(l+j)=ci;/将小于等于平均分的成绩存入lj+;*n=j;/将小于平均分的个数j赋值给nreturnaver;/返回平均分-