1、国家二级 C语言机试(操作题)模拟试卷 436及答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 根据形参 i的值返回某个函数的值。当调用正确时,程序输出: x1=5000000,x2=3000000,x1*x1+x1*x2=400000000 注意:部分源程序在文件 BLANKl C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio h double f1 (double x) return x * x; double f2 (double x, double y) ret
2、urn x*y; /*found*/ 【1】 fun (int i, double x, double y) return 【2】 (x) ; else /*found*/ return 【3】 (x, y) ; main () double x1=5, x2 =3, r: r = fun (1, x1, x2); r + = fun (2, x1, x2); printf (“/nxl = f, x2 = f, x1 * x1+x1 *x2 = f/n/n“,xl, x2, r) ; (分数:2.00)_二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:比
3、较两个字符串,将长的字符串的首地址作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODIl,C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include conioh #include stdio h /*found*/ double fun (char* s,char *t) int s1 =0,t1 =0; char * ss, * tt; ss=s; tt = t; while ( *ss ) while ( *tt) t1+; if (t1 s1) return t;else return s;void ma
4、in () char a80,b80 ; printf (“/nEnter a string : “); gets (a); printf ( “ / nEnter a string a一 gets (b) ; printf “/nThe longer is : /n (分数:2.00)_三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:移动字符串中的内容,移动的规则是把第 1一 m个字符,平移到字符串的最后,把第 m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为“ABCDEFGHIJK“,m 的值为 3,移动后,字符串中的内容应该是“DEFGHUK
5、ABC“。 注意:部分源程序在文件 PROG1C 中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include stdioh #include stringh #define N 80void fun (char*w,int m) void main () FILE *wf; char a N = “ ABCDEFGHIJK“, bN = “ABCDEFGHIJK“; int m; printf (“The origina string :/n“) ; puts (a) ; printf (“/n/nEnter m: “) ;
6、 fun (a,m) ; printf ( “ / nThe string aftermoving :/n“) ; puts (a) ; printf (“/n/n“) ;/*found*/ wf = fopen (“outdat“, “w“) ; fun (b,3) ; fprintf (wf,“s“,b) ; fclose (wf) ;/*found*/(分数:2.00)_国家二级 C语言机试(操作题)模拟试卷 436答案解析(总分:6.00,做题时间:90 分钟)一、程序填空题(总题数:1,分数:2.00)1.给定程序中,函数 fun的功能是: 根据形参 i的值返回某个函数的值。当调用正
7、确时,程序输出: x1=5000000,x2=3000000,x1*x1+x1*x2=400000000 注意:部分源程序在文件 BLANKl C 中。 不得增行或删行,也不得更改程序的结构! 试题程序: #include stdio h double f1 (double x) return x * x; double f2 (double x, double y) return x*y; /*found*/ 【1】 fun (int i, double x, double y) return 【2】 (x) ; else /*found*/ return 【3】 (x, y) ; main
8、 () double x1=5, x2 =3, r: r = fun (1, x1, x2); r + = fun (2, x1, x2); printf (“/nxl = f, x2 = f, x1 * x1+x1 *x2 = f/n/n“,xl, x2, r) ; (分数:2.00)_正确答案:(正确答案:(1)double (2)f1 (3)f2)解析:解析:填空 1:本空函数 fun的返回值,根据 return可知,不论返回的是 n还是 f2,它们的返回值均为 double型的,故此空应该填写 double。 填空 2:因为函数 fun的功能是根据形参 i的值返回某个函数的值,当 i等
9、于 1时,应该返回的是 f1。 填空 3:如果不满足 if的话,应该返回的是 f2。二、程序修改题(总题数:1,分数:2.00)2.下列给定程序中,函数 fun的功能是:比较两个字符串,将长的字符串的首地址作为函数值返回。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODIl,C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构! 试题程序: #include conioh #include stdio h /*found*/ double fun (char* s,char *t) int s1 =0,t1 =0; char * ss, * tt; s
10、s=s; tt = t; while ( *ss ) while ( *tt) t1+; if (t1 s1) return t;else return s;void main () char a80,b80 ; printf (“/nEnter a string : “); gets (a); printf ( “ / nEnter a string a一 gets (b) ; printf “/nThe longer is : /n (分数:2.00)_正确答案:(正确答案:(1)char*fun(char*s,char*t) (2)ss+; (3)tt+;)解析:解析:(1)在主函数的输
11、出语句中,函数 fun是以字符串格式输出的,所以定义函数时应为char*fun(char *s,char *t) (2)和(3)这里是地址加 1,而不是内容加 1,所以改为 ss+和 tt+。三、程序设计题(总题数:1,分数:2.00)3.请编写函数 fun,其功能是:移动字符串中的内容,移动的规则是把第 1一 m个字符,平移到字符串的最后,把第 m+1到最后的字符移到字符串的前部。 例如,字符串中原有的内容为“ABCDEFGHIJK“,m 的值为 3,移动后,字符串中的内容应该是“DEFGHUKABC“。 注意:部分源程序在文件 PROG1C 中。 请勿改动 main函数和其他函数中的任何内
12、容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序:#include stdioh #include stringh #define N 80void fun (char*w,int m) void main () FILE *wf; char a N = “ ABCDEFGHIJK“, bN = “ABCDEFGHIJK“; int m; printf (“The origina string :/n“) ; puts (a) ; printf (“/n/nEnter m: “) ; fun (a,m) ; printf ( “ / nThe string aftermoving
13、 :/n“) ; puts (a) ; printf (“/n/n“) ;/*found*/ wf = fopen (“outdat“, “w“) ; fun (b,3) ; fprintf (wf,“s“,b) ; fclose (wf) ;/*found*/(分数:2.00)_正确答案:(正确答案:void fun(char*w,int m) int i,j; char t; for(i=1;i =m;i+)/*进行于 m次的循环左移*/ t=w0; for(j=1;wj!=/0;j+) /*从第 2个字符开始以后的每个字符都依次前移一个字符/ wj 一 1=wj; wj 一 1 =t;/*将第 1个字符放到最后一个字符中*/ )解析:解析:本题应采用“循环左移”的算法,多层循环用于控制移动的字符的个数,即需进行多少次循环,内嵌循环的作用是将从第 2个字符以后的每个字符依次前移一个位置,最后将第 1个字符放到最后一个字符中。