1、国家二级 C语言机试(操作题)模拟试卷 665及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:求 ss所指字符串数组中长度最短的字符串所在的行下标,作为函数值返回,并把其串长放在形参n所指的变量中。 ss所指字符串数组中共有 M个字符串,且串长小于 N。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或删行,也不得更改程 序的结构 ! 试题程序: #include stdio h #includ
2、e string h #define M5 #define N20 int fun(char(*ss)N, int*n) int i, k=0, len=N; *found* for(i=0; i 【 1】 ; i+) len=strlen(ssi); if(i=0) *n=len; *found* if(len【 2】 *n) *n=len; k=i; *found* return(【 3】 ); main() char ssMN=“shanghai“, “guangzhou“, “beijing“, “tianjing“, “chongqing“; int n, k, i; printf(
3、“ nThe original strings are: n“); for(i=0; i M; i+)puts(ss i); k=fun(ss, &n); printf(“ nThe length of shortest string is: d n“, n); printf(“ nThe shortest string is: s n“, ssk); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:求 k!(k 13),所求阶乘的值作为函数值返回。例如,若 k=10,则应
4、输出 3628800。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增 行或删行,也不得更改程序的结构 ! 试题程序: #include conio h #include stdio h long fun(int k) *found* if k 1 return(k*fun(k-1); return1; main() int k=10; printf(“ d!= ld n“, k, un(k); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,函数 fun的功能
5、是:将 s所指字符串中下标为偶数同时 ASCII值为奇数的字符删除, s所指串中剩余的字符形成的新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为 “ABCDEFG12345“,其中字符 C的 ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符 1的 ASCII码值为奇数,在数组中的下标为奇数,因此不应当删除,其他依此类推。最后 t所指的数组中的内容应是 “BDF1345“。 注意:部分源程序在文件 PROG1 C中。 请勿改动 main函数和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdio h #incl
6、ude string h void fun(char*s, cha rt) main() char s100, t100; void NONO(); printf(“ nPlease enter string s: “); Scanf(“ s“, s); fun(s, t); printf(“ nThe result is: s n“, t); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * char s100, t100; FILE*rf, *wf; int i; rf=fopen(“in dat“, “r“); wf=fopen(
7、“out dat“, “w“); for(i=0; i 10; i+) fscanf(rf, “ s“, s); fun(s, t); fprintf(wf, “ s n“, t); fclose(rf); fclose(wf); 国家二级 C语言机试 (操作题)模拟试卷 665答案与解析 一、程序填空题 1 【正确答案】 (1)M (2) (3)k 【试题解析】 填空 1:题目指出 ss所指字符串数组中共有 M个字符串,所以 for循环语句的循环条件是 i M。 填空 2:要求求长度最短的字符串, *n中存放的是已知字符串中长度最短的字符串的长度,将当前字符串长度与 *n比较,若小于 *n,
8、则将该长度值赋给 *n,因此if语句的条件表达式为 fen *n。 填空 3:将最短字符串的行下标作为函数值返回,变量 k存储行下标的值。 二、程序修改题 2 【正确答案】 if(k 1) 【试题解析】 语法错误, if条件表达式应写在小括号内。 三、程序设计题 3 【正确答案】 void fun(char*s, char t) int i, j=0; for(i=0; i strlen(s); i+) if(!(i 2)=0&(si 2) tj+=si; tj=0; 【试题解析】 本题是从一个字符串按要求生成另一个新的字符串。我们使用 for循环语句来解决这个问题。在赋值新的字符串之前,先对数组元素的下标和ASCII码的值进行判断 ,将满足要求的元素赋给新的字符串。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1