1、国家二级 C语言机试(操作题)模拟试卷 267及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最小值放在元素 a0中,接着把 a所指数组中的最大值放在 a1元素中;再把 a所指数组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在 a3,依此类推。 例如,若 a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;则按规则移动后,数据排列为:1,9,2,8,3,7,4,6,5。形参 n中存放 a所指数组中数据的个数。 规定 fun函数中的 max存放当前所找的最大值
2、,px 存放当前所找最大值的下标。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #define N 9 void fun(int a,int n) int i,j,max,min,px,pn,; for(i=0;in1;i+=2) *found* max=min= 【1】 ; px=pn=i; for(j=i+1;jn;j+) *found* if(max 【2】 ) max=aj;px=j;) *found* if(min 【3】 ) min=aj;pn=
3、j; if(pn!=i) t=ai;ai=rain;apn=t; if(px=i)px=pn; if(px!=i+1) t=ai+1,ai+1=max; apx=t;) void main() ( int bN=9,1,4,2,3,6,5,8,7),i; printf(“nThe original data:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); fun(b,N); printf(“nThe data aftermoving:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); (分数
4、:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中函数 fun的功能是:在字符串的最前端加入 n个*号,形成新串,并且覆盖原串。字符串的长度最长允许为 79。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件NODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdioh#includestringhvoid fun(char s,int n) char a80,*p; int i;*found* s=p; for(i=0;in;i+)ai=*; do ai=*p; i+; *found* while
5、(*P+) ai=0; strcpy(s,a);main() int n;char s80; printf(“nEnter a string:“); gets(s); printf(“nThe string“s“n“,s); printf(“nEnter n(number of*):“); scanf(“d“,n); fun(s,n); printf(“nThe string after insert:“s“n“,s);(分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.编写个函数,其功能是:从传入的 num个字符中找出最长的一个字符串,并通过形参指针 max传回该串地址(用*
6、作为结束输入的标识)。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:1 #includeconioh2 #includestdioh3 #includestringh4 #includestdlibh5 char*fun(char(*a)81,int num,char * max)6 78 9 void main()10 11 FILE*wf;12 char ss1081,*ps=NULL;13 char s381=“abcd“,“deg“,“diegns“),*P=NULL;14 int i
7、=0,n;15 system(“CLS“);16 printf(“输入若干个字符串:“);17 gets(ssi);18 puts(ssi);19 while(!strcmp(ssi,“*“)=0)*用 4个星号作为结束输入的标志*20 21 i+;22 gets(SSi);23 puts(SSi);24 25 n=i;26 ps=fun(ss,n,ps);27 printf(“nmax=sn“,ps);28 *29 wf=fopen(“outdat“,“w“);30 P=fun(s,3,p);31 fprintf(wf,“s“,P);32 fclose(wf);33 *34 (分数:2.00
8、)_国家二级 C语言机试(操作题)模拟试卷 267答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.下列给定程序中,函数 fun的功能是:把形参 a所指数组中的最小值放在元素 a0中,接着把 a所指数组中的最大值放在 a1元素中;再把 a所指数组元素中的次小值放在 a2中,把 a所指数组元素中的次大值放在 a3,依此类推。 例如,若 a所指数组中的数据最初排列为:9,1,4,2,3,6,5,8,7;则按规则移动后,数据排列为:1,9,2,8,3,7,4,6,5。形参 n中存放 a所指数组中数据的个数。 规定 fun函数中的 max存放当前所找的最大
9、值,px 存放当前所找最大值的下标。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程序的结构! 试题程序: #includestdioh #define N 9 void fun(int a,int n) int i,j,max,min,px,pn,; for(i=0;in1;i+=2) *found* max=min= 【1】 ; px=pn=i; for(j=i+1;jn;j+) *found* if(max 【2】 ) max=aj;px=j;) *found* if(min 【3】 ) min=aj;pn
10、=j; if(pn!=i) t=ai;ai=rain;apn=t; if(px=i)px=pn; if(px!=i+1) t=ai+1,ai+1=max; apx=t;) void main() ( int bN=9,1,4,2,3,6,5,8,7),i; printf(“nThe original data:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); fun(b,N); printf(“nThe data aftermoving:n“); for(i=0;iN;i+) printf(“4 d“,bi); printf(“n“); (分
11、数:2.00)_正确答案:(正确答案:(1)ai (2)aj (3)aj)解析:解析:本题考查:数组的引用;if 语句条件表达式,如果表达式的值为真,则执行下面的语句,如果该值为假,则不执行下面的语句。 填空 1:for 循环语句循环体中将数组元素 ai赋值给变量 max和变量 min。 填空 2:通过一次 for循环,找到数组中的最大值,if 语句的条件表达式是 maxaj。 填空 3:同理,此处 if语句的条件表达式是 minaj。 求最大值或者最小值的题目,一般都是先假设一个元素最大或最小,然后通过 if条件语句将该元素和其他元素进行比较操作来完成。二、程序修改题(总题数:1,分数:2.
12、00)2.下列给定程序中函数 fun的功能是:在字符串的最前端加入 n个*号,形成新串,并且覆盖原串。字符串的长度最长允许为 79。请改正程序中的错误,使它能得出正确的结果。注意:部分源程序在文件NODI1C 中,不要改动 main函数,不得增行或删行,也不得更改程序的结构!试题程序:#includestdioh#includestringhvoid fun(char s,int n) char a80,*p; int i;*found* s=p; for(i=0;in;i+)ai=*; do ai=*p; i+; *found* while(*P+) ai=0; strcpy(s,a);ma
13、in() int n;char s80; printf(“nEnter a string:“); gets(s); printf(“nThe string“s“n“,s); printf(“nEnter n(number of*):“); scanf(“d“,n); fun(s,n); printf(“nThe string after insert:“s“n“,s);(分数:2.00)_正确答案:(正确答案:(1)p=s; (2)while(*p+);)解析:解析:(1)指针 p应指向 s,所以应改为 p=s;。 (2)循环等待,当 while循环执行一次,临时变量p应该指向字符串的下一位置
14、,所以应改为 while(*p+);。三、程序设计题(总题数:1,分数:2.00)3.编写个函数,其功能是:从传入的 num个字符中找出最长的一个字符串,并通过形参指针 max传回该串地址(用*作为结束输入的标识)。注意:部分源程序在文件 PROG1C 中。请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。试题程序:1 #includeconioh2 #includestdioh3 #includestringh4 #includestdlibh5 char*fun(char(*a)81,int num,char * max)6 78 9 void
15、 main()10 11 FILE*wf;12 char ss1081,*ps=NULL;13 char s381=“abcd“,“deg“,“diegns“),*P=NULL;14 int i=0,n;15 system(“CLS“);16 printf(“输入若干个字符串:“);17 gets(ssi);18 puts(ssi);19 while(!strcmp(ssi,“*“)=0)*用 4个星号作为结束输入的标志*20 21 i+;22 gets(SSi);23 puts(SSi);24 25 n=i;26 ps=fun(ss,n,ps);27 printf(“nmax=sn“,ps)
16、;28 *29 wf=fopen(“outdat“,“w“);30 P=fun(s,3,p);31 fprintf(wf,“s“,P);32 fclose(wf);33 *34 (分数:2.00)_正确答案:(正确答案:char *fun(char(*a)81,int num, char *max) int i=0; max=a0; for(i=0;inum;i+) *找出最长的一个字符串* if(strlen(max) strlen(ai) max=ai; return max;*传回最长字符串的地址* )解析:解析:首先应该明白 ss是一个指向一维数组的指针变量,max 是指向指针的变量,所以引用变量时要注意加上*。本程序使用循环语句遍历字符串数组,使用条件语句判断该字符串是否最长。