1、国家二级 C语言机试(操作题)模拟试卷 304及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将形参指针所指结构体数组中的三个元素按 num成员进行升序排列。 请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh typedef struct int num; char name10; PERSON; *found* void fun(PERSON 【1】 *found* 【2】 te
2、mp; if(std0numstd1num) temp=std0; std0=std1; std1=temp; if(std0numstd2num) temp=sta0;std0=std2; std2=temp;) if(std1numstd2hum) temp=std1; std1=std2; std2=temp; main() PERSON std=(5,“Zhanghu“,2,“WangLi“,6,“LinMin“); int i; *found* fun 【3】 ; printf(“The result is“:); for(i=0;i3;i+) printf(“d,s“,stdinu
3、m,stdiname); (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序的功能是:读入一个整数 k(2k10000),输出它的所有质因子(即所有为素数的因子)。例如,若输入整数 2310,则应输出:2,3,5,7,11。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行。也不得更改程序的结构!试题程序:#inclucleconioh#includestdioh*found* IsPrime(int n); int i,m; m=1; for(i=2;in;i+)*found* if!(ni) m=0; break; retu
4、rn(m);main() int j,k; printf(“nplease enter an integer number between 2 and 10000:“); Scanf(“d“,&k); printf(“nnThe prime factor(s)of d is(are):“,k); for(j=2;jk;j+) if(!(kj)(IsPrirne(j) printf(“4d,“,j); printf(“n“);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数 void fun(int m,int k,int Xx),该函数的功能是:将大于整数 m
5、且紧靠 m的 k个素数存入所指的数组中。例如,若输入 17,5,则应输出 19、23、29、31、37。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includestdioh#includestdlibhvoid fun(int m,int k,int xx)void main() FILE*wf; int m,n,zz1000; system(“CLS“); printf(“nPlease enter two integer:“); scanf(“dd“,m,
6、n); fun(m,n,z z); for(m=0;mn;m+) printf(“d“,zzm); printf(“n“);* wf=fopen(“outdat“,“w“); fun(17,5,z z); for(m=0 ;m5;m+) fprintf(wf,“d“,zzm);fclose(wf);*(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 304答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是:将形参指针所指结构体数组中的三个元素按 num成员进行升序排列。 请在程序的下画线处填入正确的内容并把
7、下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh typedef struct int num; char name10; PERSON; *found* void fun(PERSON 【1】 *found* 【2】 temp; if(std0numstd1num) temp=std0; std0=std1; std1=temp; if(std0numstd2num) temp=sta0;std0=std2; std2=temp;) if(std1numstd2hum) temp=std1; st
8、d1=std2; std2=temp; main() PERSON std=(5,“Zhanghu“,2,“WangLi“,6,“LinMin“); int i; *found* fun 【3】 ; printf(“The result is“:); for(i=0;i3;i+) printf(“d,s“,stdinum,stdiname); (分数:2.00)_正确答案:(正确答案:(1)std (2)PERSON (3)std)解析:解析:本题考查:数据类型的定义;数组元素的操作;函数参数的传递。 要使用函数对整个数组进行操作时,应使用数组名作为函数的实参。当使用数组名作实参时,函数传递的
9、实际上是数组的首地址,而并非数组本身,此时形参除了可以定义为指针变量外,还可以定义为数组,并且数组可以不指定大小,但无论用哪种形式,程序在编译时都将其作为一个指针变量处理。 填空 1:定义形参变量引用数组 std,此时形参可以定义为指针变量,也可以定义为数组。由下文可知,程序是通过数组下标对数组元素进行操作的,因此形参应使用数组形式,而非指针形式。 填空 2:程序使用变量 temp交换结构体数组元素的值,因而 temp应定义为 PERSON型。 填空 3:程序通过函数 fun对数组 std进行操作,因此函数的实参应为std。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序的功能是:
10、读入一个整数 k(2k10000),输出它的所有质因子(即所有为素数的因子)。例如,若输入整数 2310,则应输出:2,3,5,7,11。请改正程序中的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行。也不得更改程序的结构!试题程序:#inclucleconioh#includestdioh*found* IsPrime(int n); int i,m; m=1; for(i=2;in;i+)*found* if!(ni) m=0; break; return(m);main() int j,k; printf(“nplease enter an integer num
11、ber between 2 and 10000:“); Scanf(“d“,&k); printf(“nnThe prime factor(s)of d is(are):“,k); for(j=2;jk;j+) if(!(kj)(IsPrirne(j) printf(“4d,“,j); printf(“n“);(分数:2.00)_正确答案:(正确答案:(1)IsPrime(int n) (2)if(!(ni)解析:解析:(1)函数定义格式错误,函数定义时后面不能加“;”,所以应该去掉分号。 (2)根据题意可知,if 条件语句判断 n是否可以整除 i,如果不能整除则为质因子,所以 if!(ni)
12、应改为 if(!(ni)。三、程序设计题(总题数:1,分数:2.00)3.请编写一个函数 void fun(int m,int k,int Xx),该函数的功能是:将大于整数 m且紧靠 m的 k个素数存入所指的数组中。例如,若输入 17,5,则应输出 19、23、29、31、37。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:#includeconioh#includestdioh#includestdlibhvoid fun(int m,int k,int xx)void main() FI
13、LE*wf; int m,n,zz1000; system(“CLS“); printf(“nPlease enter two integer:“); scanf(“dd“,m,n); fun(m,n,z z); for(m=0;mn;m+) printf(“d“,zzm); printf(“n“);* wf=fopen(“outdat“,“w“); fun(17,5,z z); for(m=0 ;m5;m+) fprintf(wf,“d“,zzm);fclose(wf);*(分数:2.00)_正确答案:(正确答案:void fun(int m,int k,int xx) int i,j,n; for(i=m+1,n=0;nk;i+)*找大于 m的素数,循环 k次,即找出紧靠 m的 k个素数* for(j=2;ji;j+)*判断一个数是否为素数,如果不是,跳出此循环,判断下一个数* if(ij=0)break; if(j=i)*如果是素数,放入数组 xx中* xxn+=i; )解析:解析:本题主要考查素数的判定方法,如果一个数不能被除了 1和其自身以外的数整除,则这个数为素数。本程序使用循环语句控制需要判断的数,在循环体中判断该数是否为素数,若是则存入数组 xx中。