1、二级 C 语言-384 及答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:把形参 s 所指字符串中最右边的 n 个字符复制到形参 t 所指字符数组中,形成一个新串。若 s 所指字符串的长度小于 n,则将整个字符串复制到形参 t 所指字符数组中。 例如,形参 s 所指的字符串为:abcdefgh,n 的值为 5,程序执行后 t 所指字符数组中的字符串应为:defgh。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #incl
2、udestdio.h #includestring.h #define N 80 void fun(char*s,int n,char*t) int len,i,j=0; len=strlen(s); /*found*/ if(n=len)strcpy( 1); else /*found*/ for(i=len-n;i=len-1;i+) tj+= 2; /*found*/ tj= 3; main() (char sN,tN;int n; printf(“Enter a string:“); gets(s); printf(“Enter n:“); scanf(“%d“, fun(s,n,t)
3、; printf(“The string t:“); puts(t); (分数:30.00)二、程序修改题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:找出一个大于给定整数 m 且紧随 m 的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includeconio.h #includestdio.h int fun(int m) int i,k; for(i=m+1;i+) for(k=2;ki;k+) /*found*/
4、if(i%k!=0) break; /*found*/ if(ki) return(i); void main() int n; system(“CLS“); printf(“/nPlease enter n:“); scanf(“%d“, printf(“%d/n“,fun(n); (分数:30.00)三、程序设计题(总题数:1,分数:40.00)3.请编写函数 void fun(int x,int pp,int*n),它的功能是:求出能整除 x 且不是偶数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。 例如,若 x 中的值为 30,则有 4 个数符
5、合要求,它们是 1、3、5、15。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序: #includeconio.h #includestdio.h #includestdlib.h void fun(int x,int pp,int*n) void main() FILE*wf; int x,aa1000,n,i; system(“CLS“)j printf(“/nPlease enter an integer number:/n“); scanf(“%d“, fun(x,aa, for(i=0;in;i+) printf(
6、“%d“,aai); printf(“/n“); /*found*/ wf=fopen(“out.dat“,“w“); fun(30,aa, for(i=0;in;i+) fprintf(wf,“%d“,aai); fclose(wf); /*found*/ (分数:40.00)_二级 C 语言-384 答案解析(总分:100.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:30.00)1.给定程序中,函数 fun 的功能是:把形参 s 所指字符串中最右边的 n 个字符复制到形参 t 所指字符数组中,形成一个新串。若 s 所指字符串的长度小于 n,则将整个字符串复制到形参 t 所
7、指字符数组中。 例如,形参 s 所指的字符串为:abcdefgh,n 的值为 5,程序执行后 t 所指字符数组中的字符串应为:defgh。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:不得增行或删行,也不得更改程序的结构! 试题程序: #includestdio.h #includestring.h #define N 80 void fun(char*s,int n,char*t) int len,i,j=0; len=strlen(s); /*found*/ if(n=len)strcpy( 1); else /*found*/ for(i=len-n;i
8、=len-1;i+) tj+= 2; /*found*/ tj= 3; main() (char sN,tN;int n; printf(“Enter a string:“); gets(s); printf(“Enter n:“); scanf(“%d“, fun(s,n,t); printf(“The string t:“); puts(t); (分数:30.00)解析:(1)t,s (2)si (3)0 或“/0“ 解析 填空 1:当给定的长度 n 大于该字符串 s 的长度,那么把该字符串直接拷贝到 t 就可以了,所以应填t,s。 填空 2:使用 for 循环语句,把最右边 n 个字符依
9、次添加到 t 中,所以应填 si。 填空 3:字符串操作结束,需要给 t 加一个字符串结束符,所以应填 0 或“/0“。二、程序修改题(总题数:1,分数:30.00)2.下列给定程序中,函数 fun 的功能是:找出一个大于给定整数 m 且紧随 m 的素数,并作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 试题程序: #includestdlib.h #includeconio.h #includestdio.h int fun(int m) int i,k; for(i=m+1;i+) for(k=2;ki;
10、k+) /*found*/ if(i%k!=0) break; /*found*/ if(ki) return(i); void main() int n; system(“CLS“); printf(“/nPlease enter n:“); scanf(“%d“, printf(“%d/n“,fun(n); (分数:30.00)解析:(1)if(i%k=0) (2)if(k=i) 解析 (1)判断当前数是否为素数,若存在一个数(除 1 和其自身)能整除当前数,则跳出本次循环,所以 if 条件应为 i%k=0。 (2)如果 i 是素数,则循环结束时 k=i,将该值返回。三、程序设计题(总题数
11、:1,分数:40.00)3.请编写函数 void fun(int x,int pp,int*n),它的功能是:求出能整除 x 且不是偶数的各整数,并按从小到大的顺序放在 pp 所指的数组中,这些除数的个数通过形参 n 返回。 例如,若 x 中的值为 30,则有 4 个数符合要求,它们是 1、3、5、15。 注意:请勿改动主函数 main 和其他函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。试题程序: #includeconio.h #includestdio.h #includestdlib.h void fun(int x,int pp,int*n) void main
12、() FILE*wf; int x,aa1000,n,i; system(“CLS“)j printf(“/nPlease enter an integer number:/n“); scanf(“%d“, fun(x,aa, for(i=0;in;i+) printf(“%d“,aai); printf(“/n“); /*found*/ wf=fopen(“out.dat“,“w“); fun(30,aa, for(i=0;in;i+) fprintf(wf,“%d“,aai); fclose(wf); /*found*/ (分数:40.00)_正确答案:()解析:void fun(int
13、x,int pp,int*n) int i,j=0; for(i=1;i=x;i=i+2)/*i 的初始值为 1,步长为 2,确保 i 为奇数*/ if(x%i=0)/*将能整除 x 的数存入数组 pp 中*/ ppj+=i; *n=j;/*传回满足条件的数的个数*/ 解析 本题考查:偶数的判定方法;整除的实现。 本题题干信息是:能整除 x 且不是偶数的所有整数。循环语句中变量 i 从 1 开始且每次增 2,所以 i 始终是奇数。 整除的方法,已经讲过多次,这里就不再赘述了。对于本题目要求的不是偶数的判定方法,即该数对 2 求余不为 0。除本题描述的方法外,还可以通过 for 循环语句直接把偶数筛出去,确保参与操作的数均为奇数。