国家二级C语言机试.pdf
《国家二级C语言机试.pdf》由会员分享,可在线阅读,更多相关《国家二级C语言机试.pdf(241页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第 01套:给定程序中,函数fun的功能是:在形参s 所指字符串中的每个数字字符之后插入一个*号。例如,形参s 所指的字符串为:def35adh3kjsdf7执行结果为:def3*5*adh3*kjsdf7*。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include void fun(char*s)int i,j,n;for(i=0;si!=0;i+)/*fo u n d*Iif(si=0 _1 sii;j)/*f o u n d*Isj+l=3Sj+1=*;i=
2、i+l;main()char s80=b a3a54cd23a;printf(unThe original string is:%sn,s);fun(s);printf(nThe result is:%sn,s);?解题思路:第一处:判断是数字,应该使用 与,所以应填:&。第二处:判断字符串是否是字符串结束符,所以应填:0。第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应填:sjo给定程序MODI1.C中函数fun的功能是:根据整型形参m,计算如卜公式的值。111 1y=1+-+-+-+-2*2 3*3 4*4 m*m例如,若 m 中的值为:5,则应输出:1.46
3、3611。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include doub le fun(int m)doub le y=1.0;int i;for(i=2;i m;i+)!5 K 1*f o|*|*1 1*/y+=1/(i*i);return(y);?main()int n=5;printf(nThe result is%lfn,fun(n);解题思路:第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2;i=m;i+)。第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,
4、因此应改为 y+=l./(i*i)请编写函数fu n,函数的功能是:实现B=A+A,即把矩阵A 加上A 的转置,存放在矩阵B 中。计算结果在m ain函数中输出。例如,输入下面的矩阵:其转置矩阵为:1 2 3 1 4 74 5 6 2 5 87 8 9 3 6 9程序输出:2 6 106 10 1410 14 18注意:部分源程序在文件PR0G1.C中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include void fun(int a33,int b 33)main()/*主程序*/int a33=1,2,3,4,5,6,7,
5、8,9,t33;int i,j;fun(a,t);for(i=0;i 3;i+)for(j=0;j 3;j+)printf(%7d,tij);printf(n);NONO();?解题思路:本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。参考答案:void fun(int a33,int b 33)int c33;int i,j;for(i=0;i 3;i+)for(j=0;j 3;j+)cij=aji;/*矩阵的转置*/b ij=aiU+cij;?第 02套:给定程序中,函数fun的功能是:找 出
6、 100999之 间(含 100和 999)所有整数中各位上数字之和为x(x 为一正整数)的整数,然后输出;符合条件的整数个数作为函数值返回。例如,当 x 值 为 5 时,100999之间各位上数字之和为5 的整数有:104、113、122、131、140、203、212、221、230、302、311、320、401、410、500 共有15个。当 x 值 为 27时,各位数字之和为27的整数是:999o只 有 1 个。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.CK不得增行或删行,也不得更改程序的结构!给定源程序:#i
7、nclude fun(int x)int nz si,s2,s3,t;n=0;t=100;/*fo und*!while(t=_1_)/*f u n d*Isl=t%10;s2=(_2_)%10;s3=t/100;/*f o und*!if(sl+s2+s3=_3_)printf(%d,t);n+;t+;return n;?main()int x=-l;while(x0):);scanf(%d,&x);printf(nThe result is:%dn,fun(x);?解题思路:第一处:使用while循环找出100999之间所有整数,所以应填:999。第二处:s 2是求十位数字,所以应填:t/
8、10。第三处:各位数字之和为X,所以应填:X。给定程序MODI1.C中函数fu n的功能是:从低位开始取出长整型变量s中偶数位上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当 s 中的数为:7654321时,t 中的数为:642。请改正程序中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include I f/void fun(long s,long t)long sl=10;s/=10;*t=s%10;/*f o u n d*/while(s 0,所以应改为:while(s0)学生的记录由学号和成绩组成,N
9、 名学生的数据已在主函数中放入结构体数组s 中,请编写函数fu n,它的功能是:按分数的高低排列学生的记录,高分在前。注意:部分源程序在文件PR0G1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#define N 16typedef struct char num10;int s;STREC;int fun(STREC a)main()STREC SN=GA005,85,GA003,76/GA002,69,GA004,85,TAB TAB GA001,91,GA007,72,GA008,64,GA006,8
10、7,TAB TAB GA015,85,GA013,91,GA012,64,GA014,91,TAB TAB GA011,66,GA017,64,GA018,64,GA016,72);int i;FILE*out;fun(s);printf(The data after sorted:n);for(i=0;iN;i+)if(%4=0)printf(n);printf(%s%4d,si.num,si.s);printf(n);out=fopen(c:testout.dat,w);for(i=0;iN;i+)if(j)%4=0&i)fprintf(out,n);fprintf(out,%4d,si.
11、s);?fprintf(out,n);fclose(out);?解题思路:本题是按结构体中成绩s 进行降序排列,其结果仍存入当前结构体中。参考答案:#include#define N 16typedef struct char num10;int s;STREC;int fun(STREC a)STREC tmp;int i,j;for(i=0;i N;i+)for(j=i+1;j N;j+)if(ai.s aj.s)tmp=ai;ai=aj;aj=tmp;)第 03套:给定程序中,函数fun的功能是:找 出 100至 x(x999)之间各位上的数字之和 为 15的所有整数,然后输出:符合条件
12、的整数个数作为函数值返回。例如,当 n 值 为 500时,各位数字之和为15的整数有:159、168、177、186、195、249、258、267、276、285、294、339、348、357、366、375、384、393、429、438、447、456、465、474、483、492。共有 26 个。请在程序的卜划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include fun(int x)int n,si,s2,s3,t;n=1t=100;/*f u n d*Iwhi
13、le(t999|x0)printf(Please input(0 x=999):);scanf(%d,&x);printf(nThe result is:%dn,fun(x);解题思路:第一处:符合条件的整数个数n,必须进行初始化,所以应填:0。第二处:找出X4999,所以应填:X。第三处:循环控制变量t 每循环一次t 要 加 1,所以应填:t+。给定程序M O D U.C中函数fu n的功能是:先将s所指字符串中的字符按逆序存放到t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。例如:当s所指的字符串为:ABCDE时,则t所指的字符串应为:EDCBAABCDE。请改正程序中的
14、错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include void fun(char*s,char*t)/*f o u n d*int i;si=strlen(s);for(i=0;isl;i+)/*fo u n d*/ti=ssl-i;for(i=0;isl;i+)TAB tsl+i=si;t2*sl=0;main()char s100,t100;printf(nPlease enter string s:);scanf(%s,s);fun(s,t);printf(The result is:%sn,t);解
15、题思路:第一处:变量si没有定义。第二处:在C语言中,字符串开始位置从0开始的,所以应改为:ti=ssl-i-l;o函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的十位和个位数依次放在变量c的千位和十位上。例如,当a=45,b=12。调用该函数后,c=1425o注意:部分源程序存在文件PR0G1.C中。数据文件IN.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include void fun(int a,int
16、b,long*c)main()/*主函数*/int a,b;long c;printf(Input a,b:);scanf(%d%d,&a,&b);fun(a,b,&c);printf(The result is:%ldn,c);NONO();解题思路:本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。取 a 十位数字的方法:a/10取 a 个位数字的方法:a%10参考答案:void fun(int a,int b,long*c)*c=(b/10)*1000+(a/10)*100+(b%10)*10+(a%10);?第 04套:函数fun的功能是:从三个形参a,b,c 中
17、找出中间的那个数,作为函数值返回。例如,当 a=3,b=5,c=4时,中数为4。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.CK不得增行或删行,也不得更改程序的结构!给定源程序:#include int fun(int a,int b,int c)int t;t=(ab)?(b c?b :(ac?c:_1_):(ac)?_2_:(b c)?c:3);return t;)main()int al=3,a2=5,a3=4,r;r=fun(alz a2,a3);printf(nThe middle numb er is:%dn,
18、r);)解题思路:第一处:给三个数进行比较大小,所以应填:a。第二处:给三个数进行比较大小,所以应填:a。第三处:给三个数进行比较大小,所以应填:b.给定程序M0DI1.C中函数fun的功能是:首先将大写字母转换为对应小写字母;若小写字母为au,则将其转换为其后的第5 个字母;若小写字母为vz,使其值减21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母f;若形参是字母W,则转换为小写字母b。请改正函数fun中指定部位的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include char f
19、un(char c)if(c=A&c=a&c=v&c=z)c=c-21;return c;)main()char c lzc2;printf(nEnter a letter(A-Z):);cl=getchar();if(isupper(cl)c2=fun(cl);printf(HnnThe letter%c change to%cVn,cl,c2);else printf(nEnter(A-Z)!nH);?解题思路:第一处:变量c 错写成大写C 了。第二处:要求转换为其后的第5 个字母,所以应改为:c=c+5;。请编写函数fu n,其功能是:计算并输出例如,在主函数中从键盘给n 输 入 20后
20、,输出为:s=534.188884。注意:要 求 n 的值大于1 但不大于100,部分源程序在文件PR0G1.C中。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。给定源程序:#include#include doub le fun(int n)main()int n;doub le s;printf(nnlnput n:);scanf(%d,&n);s=fun(n);printf(nns=%fnn,s);NONO();解题思路:本题是根据公式计算多项式的值。注意变量的取值范围。参考答案:doub le fun(int n)int i;doub le
21、 fac=l.O;doub le sum=1.0;for(i=2;i=n;i+)fac+=sqrt(i);sum+=fac;?return sum;?第 05套:给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的卜划线处填入正确的内容并把卜 一划线删除,使程序得出正确的结果。注意:源程序存放在考生文件夹下的BLANK1.C中。不得增行或删行,也不得更改程序的结构!给定源程序:#include#include#define N 5typede
22、f struct int num;char name10;char tel10;STYPE;void check();/*f u n d*Iint fun(_ 1_*std)_ 2_*fp;int i;if(fp=fopen(myfile5.dat,wb)=NULL)return(O);printf(nOutput data to file!n);for(i=0;iN;i+)/*f o und*!fwrite(&stdi,sizeof(STYPE),1,_ 3_);fclose(fp);return(1);?main()STYPEs10=l,aaaaa,111111,l,b b b b b,2
23、22222,l,ccccc,333333,l,ddddd,444444,l,eeeee,555555;int k;k=fun(s);if(k=l)printf(Succeed!);check();elseprintf(Fail!);void check()FILE*fp;int i;STYPE s10;if(fp=fopen(myfile5.dat,rb)=NULL)printf(Fail!n);exit(O);printf(nRead file and output to screen:n);printf(n num name teln);for(i=0;iN;i+)fread(&si,si
24、zeof(STYPE),1,fp);printf(%6d%s%sn,si.num,si.name,si.tel);fclose(fp);?解题思路:本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。第一处:结构定义自变量,因此应填写STYPE。第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp已经给出,这样,此处只能填写FILE。每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以只能填写文件流变量fp。给定程序M0DI1.C中函数fun的功能是:先将在字符串s 中的字
25、符按正序存放到 t 串中,然后把s 中的字符按逆序连接到t 串的后面。例 如:当 s 中的字符串为:ABCDE时,则 t 中的字符串应为:ABCDEEDCBA。请改正程序中的错误,使它能得出正确的结果。注意:不要改动m ain函数,不得增行或删行,也不得更改程序的结构!给定源程序:#include#include void fun(char*s,char*t)int iz si;si=strlen(s);*f o u n d*/for(i=0;i=sl;i+)ti=si;for(i=0;isl;i+)TAB tsl+i=ssl-i-l;!f/tsl=0;main()char s100,t100
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 国家 二级 语言
限制150内