1、国家二级 C语言程序设计机试(程序设计题)模拟试卷 1及答案解析(总分:8.00,做题时间:90 分钟)一、程序设计题(总题数:4,分数:8.00)1.请编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 (分数:2.00)_2.编写函数 fun,其功能是:求出 11000之间能被 7或 11整除,但不能同时被 7和 1 1整除的所有整数,并将其放在 a所指的数组中,通过 n返回这些数的个数。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includestdiohvoid fun(int*a,int*n)mai
2、n()int aa1000,n,k;void NONO();fun(all,&n);for(k=0;kn;k+) if(k+1)10=0) printf(“n”); else prinff(“5d”,aak); NONO();void NONO()*c本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*int aa1000,n,k;FILE*fp;fp=fopen(“outdat”,“W”);fun(aa,n);for(k=0;kn;k+) if(k+1)10=0) fprinff(fp,“n”); else fprintf(fp,“5d”,aak); fclose(fp
3、);(分数:2.00)_3.请编写函数 fun,该函数的功能是:将 S所指字符串中 ASC码值为偶数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为“ABCDEFGl2345”,其中字符 B的ASC码值为偶数,字符 2的 ASC码值为偶数,都应当删除,其他依此类推。最后 t所指的数组中的内容应是”ACEG135”。 注意:请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序:#includestdioh#includestringh#includeconioh#includestdlibhvoid
4、fun(char * s,char t)void main() FILE*wf; char S100,t100; system(“CLS”); prinff(“nPlease enter string S:”); scanf(“s”,s); fun(s,t); printf(“nThe result is:sn”,t);* wf=fopen(“outdat”,”W”); fun(“ABCDEFGl2345”,t); fprinff(wf,“S”,t); fclose(wf);*(分数:2.00)_4.请编写函数 void fun(int x,int PP,int*n),它的功能是:求出能整除
5、x且不是偶数的各整数,并按从小到大的顺序放在 pp所指的数组中,这些除数的个数通过形参 n返回。 例如,若 x中的值为30,则有 4个数符合要求,它们是 1、3、5、15。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includeconioh#includestdioh#includestdlibhvoid fun(int X,int PP,int*n)void main() FILE*wf; int x,aa1000,n,i; system(“CLS”); printf(“nPlease enter an intege
6、r number:n”) ; scanf(“d”,&x); fun(x,aa,&n); for(i=0;in;i+) prinff(“d”,aai);prinff(“n”);* wf=fopen(“outdat”,“w”);fun(30,aa,n);for(i=0;in;i+) fprintf(wf,“d”,88i); fclose(wf);*(分数:2.00)_国家二级 C语言程序设计机试(程序设计题)模拟试卷 1答案解析(总分:8.00,做题时间:90 分钟)一、程序设计题(总题数:4,分数:8.00)1.请编写函数 fun,它的功能是计算下列级数和,和值由函数值返回。 (分数:2.00)
7、_正确答案:(正确答案:double fun(double x,int n) int i; double s=10,sl=10; for(i=1;i=n;i+) sl=sl,* i; *各项中的阶乘* s=s+pow(x,i)sl; *按公式求出* return s; )解析:2.编写函数 fun,其功能是:求出 11000之间能被 7或 11整除,但不能同时被 7和 1 1整除的所有整数,并将其放在 a所指的数组中,通过 n返回这些数的个数。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includestdiohvoid
8、 fun(int*a,int*n)main()int aa1000,n,k;void NONO();fun(all,&n);for(k=0;kn;k+) if(k+1)10=0) printf(“n”); else prinff(“5d”,aak); NONO();void NONO()*c本函数用于打开文件,输入测试数据,调用 fun函数,输出数据,关闭文件。*int aa1000,n,k;FILE*fp;fp=fopen(“outdat”,“W”);fun(aa,n);for(k=0;kn;k+) if(k+1)10=0) fprinff(fp,“n”); else fprintf(fp,
9、“5d”,aak); fclose(fp);(分数:2.00)_正确答案:(正确答案:void fun(int*a,int*n) int i,j=0; for(i=1;i=1000;i+) *求 1到 1000之内能被 7或 11整除,但不能同时被 7和 11整除的所有整数,并放入数组 a中* if(i7=011i11=0)&i77!=0) aj+=1; *n=j; )解析:解析:本题考查:if 语句,用来判断能被 7整除或者能被 11整除,但是又不能同时被 7和 11整除的数,在这里要充分理解“逻辑与”和“逻辑或”的区别;for 循环语句的循环变量用来控制取值范围。本题需要运用循环判断结构来
10、实现,其中循环语句比较容易,只要确定循环变量的范围即可。下面来看判断语句,题目要求找出能被 7或 11整除,但不能同时被 7和 11整除的所有整数。能同时被 7和 11整除的整数一定能被 77整除,且不能被 77整除的数不一定就是能被 7或 11整除的数所以可得出程序中的if()语句。注意:(i7=0 i11=0)两边必须要有小括号。3.请编写函数 fun,该函数的功能是:将 S所指字符串中 ASC码值为偶数的字符删除,串中剩余字符形成一个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为“ABCDEFGl2345”,其中字符 B的ASC码值为偶数,字符 2的 ASC码值为偶数,都应
11、当删除,其他依此类推。最后 t所指的数组中的内容应是”ACEG135”。 注意:请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入所编写的若干语句。 试题程序:#includestdioh#includestringh#includeconioh#includestdlibhvoid fun(char * s,char t)void main() FILE*wf; char S100,t100; system(“CLS”); prinff(“nPlease enter string S:”); scanf(“s”,s); fun(s,t); printf(“nThe
12、result is:sn”,t);* wf=fopen(“outdat”,”W”); fun(“ABCDEFGl2345”,t); fprinff(wf,“S”,t); fclose(wf);*(分数:2.00)_正确答案:(正确答案:void fun(char*s,char t) int i=0; for(;*s!=0;s+) *找出ASC值为奇数的字符依次存入数组 t中* if(* s2=1) ti+=*s; ti=0; *在字符串的末尾加上串结束符* )解析:解析:本题要求将 s所指字符串中 ASC码值为偶数的字符删除,因此本题要求采用一个 for循环来找出 ASC码值为奇数的字符依次存
13、入数组 t中,并使用 if条件句来判断 s所指字符串中 ASC码值是否为奇数。用0加在字符串的末尾来表示字符串的结束。要删除 ASC码值为偶数的字符,也就是要留下 ASC码值为奇数的字符。由于最终是要求出剩余字符(即 ASC码值为奇数)形成的新串,所以本题程序的算法是对原字符串从头到尾扫描,找出 ASC码值为奇数的字符并将其依次存入数组 t中。此外,还要注意数组 t的下标变化和下标的初值(初值必须为 0,即 i=0),ti+的作用是先使用 ti,然后再使 i自增 1。4.请编写函数 void fun(int x,int PP,int*n),它的功能是:求出能整除 x且不是偶数的各整数,并按从小
14、到大的顺序放在 pp所指的数组中,这些除数的个数通过形参 n返回。 例如,若 x中的值为30,则有 4个数符合要求,它们是 1、3、5、15。 注意:请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#includeconioh#includestdioh#includestdlibhvoid fun(int X,int PP,int*n)void main() FILE*wf; int x,aa1000,n,i; system(“CLS”); printf(“nPlease enter an integer number:n”) ;
15、scanf(“d”,&x); fun(x,aa,&n); for(i=0;in;i+) prinff(“d”,aai);prinff(“n”);* wf=fopen(“outdat”,“w”);fun(30,aa,n);for(i=0;in;i+) fprintf(wf,“d”,88i); fclose(wf);*(分数:2.00)_正确答案:(正确答案:void fun(int x,int pp,int*n) int i,j=0; for(i=1;i=x;i=i+2) *i 的初始值为 1,步长为 2,确保 i为奇数* if(xi=0) *将能整除 x的数存入数组 pp中* ppj+=i; *n=j;*传回满足条件的数的个数* )解析:解析:本题考查:偶数的判定方法;整除的实现。 本题题干信息是:能整除 x且不是偶数的所有整数。循环语句中变量 i从 1开始且每次增 2,所以 i始终是奇数。 整除的方法,在前面已经讲过多次,这里就不再赘述了。对于本题目要求的不是偶数的判定方法,即该数对 2求余不为 0。除以上方法外,还可以通过 for循环语句直接把偶数筛出去,确保参与操作的数均为奇数。