1、国家二级 C语言程序设计机试(程序设计题)模拟试卷 2及答案解析(总分:8.00,做题时间:90 分钟)一、程序设计题(总题数:4,分数:8.00)1.请编函数 fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用 strlen函数求字符串的长度。例如,在键盘输入字符串 2345210,函数返回长整型数 2345210。 注意:请勿改动主函数main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序:#ineludestdioh#includestringhvoid NONO();long fun(char*s)main()char 810;l
2、ong r;printf(“请输入一个长度不超过 9个字符的数字字符串:”);gets(s);r=fun(s);prinff(“r=ldn”,r);NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*FILE*fp,*wf;int i;long r;char s10,*P;fp=fopen(“indat”,”r”);wf=fopen(“outdat”,“W”);for(i=0;i10;i+) fgets(s,10,fp); P=strchr(s,n); if(P)*P=0; r=fun(s); fprinff(wf,“Idn”,r);fclose
3、(fp);felose(wf);(分数:2.00)_2.假定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:除了尾部的*号之外,将字符中的其他*号全部删除。形参 P已指向字符串中最后的一个字母。在编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为*A*BC*DEF*G*,删除后,字符串中的内容应当是ABCDEFG* 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#ncludestdiohvoid fun(char*a,char*P)main() char S81,*t; void NONO()
4、; printf(“Enter a string:n”); gets(S); t=S; while(*t)t+; t 一一; while(*t=*)t一一; fun(s,t); prinff(“The string after deleted:n”); puts(s); NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。* FILE*in,* out; int i;char S81,*t; in=fopen(“indat”,“r”); out=fopen(“outdat”,“w”); for(i=0;i10;i+) fscanf(in,“s”,S
5、); t=s: while(* t)t+; t 一一: while(*t=*)t 一一; fun(s,t); fprinLf(out,“sn”,s); fclose(in); felose(out);(分数:2.00)_3.编写函数 void fun(char*tt,int PP),统计在 tt所指的字符串中a到z26 个小写字母各自出现的次数,并依次放在 pp所指的数组中。 例如,当输入字符串“abcdefgabcdeabc”后,程序的输出结果应该是: 3 3 3 2 2 11 0000000000000000000 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花
6、括号中填入你编写的若干语句。 试题程序:#ineludestdioh#includestringhvoid fun(char*tt,int PP)main()char aa1000;int bb26,k;void NONO();prinff(“nPlease enter a char string:”);8c 肌 f(“s”,aa);fun(aa,bb);for(k=0;k26;k+) prinff(“d”,bbk);prinff(“n”);NONO();void NONO()*本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。* char aa1000; int bb2
7、6,k,i; FILE*rf,*wf; rf=fopen(“indat”,“r”); wf=fopen(“outdat”。“W”); flor(i=0;i10;i+) fscanf(rf,“s”,aa); fun(aa,bb);for(k=0;k26;k+) fprinff(wf,“d”,bbk); fprinff(wf,“n”); felose(rf); fclose(wf);(分数:2.00)_4.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),该函数的功能是:将数组左下半三角元素中的值全部置 0。例如 a数组中的值为: 1 9 7 2 3 8 4
8、 5 6 则返回主程序后 a数组中的值应为: 0 9 7 0 0 8 0 0 0 注意:请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includestdioh#includestdlib.hdefine N 5void fun(int aN)void main()FILE*wf; int aNN,i,j; int bNN=t 1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4; system(“CLS”); prinff(“*The array*n”); f
9、or(i=0;iN;i+)*产生一个随机的 5*5矩阵* for(j=0;jN;j+) aij=rand()10; printf(“4d”,aij); prinff(“n”); fun(a); printf(“THE RESULTn”); for(i=0;iN;i+) for(j=0;jN;j+) printf(“4d”,aij); prinff(“n”); *wf=fopen(“outdat”,“w”);fun(b);for(i=0;iN;i+) for(j=0;jN;j+) fprinff(wf,”4d”,bij); fprintf(wf,“n”); felose(wf);*(分数:2.0
10、0)_国家二级 C语言程序设计机试(程序设计题)模拟试卷 2答案解析(总分:8.00,做题时间:90 分钟)一、程序设计题(总题数:4,分数:8.00)1.请编函数 fun,其功能是将一个数字字符串转换成与其面值相同的长整型整数。可调用 strlen函数求字符串的长度。例如,在键盘输入字符串 2345210,函数返回长整型数 2345210。 注意:请勿改动主函数main和其他函数中的任何内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序:#ineludestdioh#includestringhvoid NONO();long fun(char*s)main()char 810
11、;long r;printf(“请输入一个长度不超过 9个字符的数字字符串:”);gets(s);r=fun(s);prinff(“r=ldn”,r);NONO();void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。*FILE*fp,*wf;int i;long r;char s10,*P;fp=fopen(“indat”,”r”);wf=fopen(“outdat”,“W”);for(i=0;i10;i+) fgets(s,10,fp); P=strchr(s,n); if(P)*P=0; r=fun(s); fprinff(wf,“Idn”,r);fclo
12、se(fp);felose(wf);(分数:2.00)_正确答案:(正确答案:long fun(char*s) int i,sum=0,len; len=strlen(s); for(i=0;i解析:解析:要把一个数字字符转为相应的数字,只要用它的 ASC码减去 48即可。要把数字字符串转为相应的数字,则要从左到右依次取出字符转为相应数字,乘 10再加上下一位数字。2.假定输入的字符串中只包含字母和*号。请编写函数 fun,其功能是:除了尾部的*号之外,将字符中的其他*号全部删除。形参 P已指向字符串中最后的一个字母。在编写函数时,不得使用 C语言提供的字符串函数。 例如,字符串中的内容为*A
13、*BC*DEF*G*,删除后,字符串中的内容应当是ABCDEFG* 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#ncludestdiohvoid fun(char*a,char*P)main() char S81,*t; void NONO(); printf(“Enter a string:n”); gets(S); t=S; while(*t)t+; t 一一; while(*t=*)t一一; fun(s,t); prinff(“The string after deleted:n”); puts(s); NONO()
14、;void NONO()*本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。* FILE*in,* out; int i;char S81,*t; in=fopen(“indat”,“r”); out=fopen(“outdat”,“w”); for(i=0;i10;i+) fscanf(in,“s”,S); t=s: while(* t)t+; t 一一: while(*t=*)t 一一; fun(s,t); fprinLf(out,“sn”,s); fclose(in); felose(out);(分数:2.00)_正确答案:(正确答案:void fun(char*a,char*
15、p) char * t=a; for(;t=p;t+) if(*t!=*) *(a+)=*t; for(;*t!=0;t+) *(a+)=*t; * a=0; *在字符串最后加上字符串结束标识* )解析:解析:本题考查:删除字符串中非尾部*号,删除的主要思想就是把不删除的字符保留起来。本题用两个循环语句来实现。第 1个循环的作用是将指针 p所指字母以前所有非*号的字符保留下来,即删除指针 p以前所有的*号。第 2个循环的作用是将指针 p以后的所有*号保留下来。最后在新串的结尾加上结束符。3.编写函数 void fun(char*tt,int PP),统计在 tt所指的字符串中a到z26 个小写
16、字母各自出现的次数,并依次放在 pp所指的数组中。 例如,当输入字符串“abcdefgabcdeabc”后,程序的输出结果应该是: 3 3 3 2 2 11 0000000000000000000 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#ineludestdioh#includestringhvoid fun(char*tt,int PP)main()char aa1000;int bb26,k;void NONO();prinff(“nPlease enter a char string:”);8c 肌 f(“s”,
17、aa);fun(aa,bb);for(k=0;k26;k+) prinff(“d”,bbk);prinff(“n”);NONO();void NONO()*本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。* char aa1000; int bb26,k,i; FILE*rf,*wf; rf=fopen(“indat”,“r”); wf=fopen(“outdat”。“W”); flor(i=0;i10;i+) fscanf(rf,“s”,aa); fun(aa,bb);for(k=0;k26;k+) fprinff(wf,“d”,bbk); fprinff(wf,“n
18、”); felose(rf); fclose(wf);(分数:2.00)_正确答案:(正确答案:void fun(char*tt,int pp) int i: for(i=0;i26;i+) ppi=0;宰初始化 pp数组各元素为 0* flor(;* tt!=0;tt+) if(*tt=a&*tt=z) pp*tt 一a+; )解析:解析:本题考查:for 循环语句,注意循环变量取值范围以及循环体语句作用;数组元素初始化和赋值操作;if 语句条件表达式,需注意条件表达式的逻辑运算;字符串结束标识0。 要求统计在 tt所指字符串中 az共 26个小写母各自出现的次数,并依次放在 pp所指数组中
19、。首先使用 for循环语句初始化 pp数组中分别用来统计 26个字母的个数,再使用循环判断语句对 tt所指字符串中的字符进行逐一比较操作,同时存入相对应的 pp数组中。4.下列程序定义了 NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN),该函数的功能是:将数组左下半三角元素中的值全部置 0。例如 a数组中的值为: 1 9 7 2 3 8 4 5 6 则返回主程序后 a数组中的值应为: 0 9 7 0 0 8 0 0 0 注意:请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includ
20、estdioh#includestdlib.hdefine N 5void fun(int aN)void main()FILE*wf; int aNN,i,j; int bNN=t 1,9,7,2,4,2,3,8,1,2,4,5,6,7,5,4,0,6,8,0,2,7,1,6,4; system(“CLS”); prinff(“*The array*n”); for(i=0;iN;i+)*产生一个随机的 5*5矩阵* for(j=0;jN;j+) aij=rand()10; printf(“4d”,aij); prinff(“n”); fun(a); printf(“THE RESULTn”
21、); for(i=0;iN;i+) for(j=0;jN;j+) printf(“4d”,aij); prinff(“n”); *wf=fopen(“outdat”,“w”);fun(b);for(i=0;iN;i+) for(j=0;jN;j+) fprinff(wf,”4d”,bij); fprintf(wf,“n”); felose(wf);*(分数:2.00)_正确答案:(正确答案:void fun(int aN) int i,j; for(i=0;iN;i+) for(j=0;j=i;j+) aij=0;*将数组左下半三角元素中的值全部置 0,* )解析:解析:本题考查:for 循环语句,使用嵌套循环语句遍历二维数组的各个元素;二维数组元素的引用。对于 NN二维数组,如何表示其左下半三角元素,可以通过以下语句实现: for(i=0;i=i;j+) 外层循环用来控制矩阵的行下标,内层循环控制矩阵的列下标。注意列下标的取值范围,因为要表示下三角元素,所以 j的范围是 0i。