1、国家二级 C语言机试(操作题)模拟试卷 663及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:在形参 s所指字符串中的每个数字字符之后插入一个 *号。例如,形参 s所指的字符串为“def35adh3kjsdf7”,执行后结果为 “def3*5*adh3*kjsdt7*”。 请在程序的下画线处填入正确的内容并将下画线删除,使程序得出正确的结果。 注意:部分源程序给出如下。 不得增行或 删行,也不得更改程序的结构 ! 试题程序: #include stdio
2、h void fun(char*s) int i, j, n; for(i=0; si!= 0; i+) *found* if(si =0【 1】 si =9) n=0; *found* while(si+1+n!=【 2】 ) n+; for(j=i+n+1; j i; j-) *found* Sj+1=【 3】 ; Sj+1=*; i=i+1; main() char s60=“def35adh3kjsdf7“; printf(“ nThe original string is: s n“, s); fun(s); printf(“ nThe result is: s n“, s); 二、
3、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是求矩阵 (二维数组 )aNN中每行的最小值,结果存放到数组 b中。假如:若 则结果应为 1, 5, 9, 13,请改正函数 fun中指定部位的错误,使它能得出正确的结果。注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构。试题程序: #inclucte stdio h #define N4void fun(int aN, int b)int i, j;for(i=0; i N; i+) *found* bi=a00;
4、*found* for(j=1; j N-1; j+) *found*if(bi aij)bi=aij; main()int aNN=1, 4, 3, 2, 8, 6, 5, 7,11, 10, 12, 9, 13, 16, 14, 15, bN; int i; fun(a, b); for(i=0; i N;i+)printf(“ d, “, bi); printf(“ n“); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,编写函数 fun,其功能是:将所有大于1小于整数 m的非素数存入
5、xx所指数组中,非素数的个数通过 k返回。 例如,若输入 17,则应输出: 4 6 8 9 10 12 14 15 16。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容, 仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: #include stdlib h #include conio h #include stdio h void fun(int m, int*k, int xx) void main() int m, n, zz100; system(“CLS“); printf(“ nPlease enter an integer number
6、between10and100: “); Scanf(“ d“, &n); fun(n, &m, zz); printf(“ n nThere are d non-prime numbers less than d: “, m, n); for(n=0; n m; n+) printf(“ n 4d“, zzn); 国家二级 C语言机试(操作题)模拟试卷 663答案与解析 一、程序填空题 1 【正确答案】 (1)& (2)0或 0 (3)sj或 *(s+j) 【试题解析】 填空 1: if语句中的条件是判断是否为数字字符,数字字符的条件是大于等于 “0”,同时小于等于 “9”,因此需要使用逻辑
7、与 “&”来连接。 填空 2: while语句判断是否到达字符串的结尾,因此填入 0(字符串结束标识 0)。 填空 3: for语句使数字后的字符全都向后移一个单位,因此要使 sj+1=sj;。 二、程序修改题 2 【正确答案】 (1)bi=ai0; (2)for(j=1; j N; j+) (3)if(bi aij) 【试题解析】 数组 b存放每行的最小值,针对二维数组使用二层循环,在第一层循环的开始将每行的第 1个数赋给数组 b相应的元素,在第二层循环中,数组 b中的元素依次与本行中的每个元素进行比较,找到一行中的最小值存入数组 b。 (1)bi存放二级数组 a每一行中第 1个元素值,表示
8、为 ai0。 (2)每行元素的第 1个值要和这一行中的每个元素 进行比较,条件 j N可使 aij取到最后元素,而条件 j N-1使 aij最终取得倒数第 2个元素。 (3)因为是找最小值,所以当 bi大于其后的数值时说明它不是最小,要把比较中较大的值赋给它。 三、程序设计题 3 【正确答案】 void fun(int m, int*k, int xx) int i, j, n=0; for(i=4; i m; i+) *找出大于 1小于整数 m的非素数 * for(j=2; j i; j+) if(i j=0)break; if(j i)xxn+=i; *k=n; *返回非素数的个数 * 【试题解析】 题目要求将 1 m之间的非素数存入数组中,应使用循环判断结构。循环语句用来遍历 1 m之间的每个数,判断语句用来判断该数是否为素数,若不是素数,则将其存入数组中。本题是考查一个数是否为素数的简单延伸,只要掌握了判断素数的方法,问题便能顺利解决。 判定一个数是否为素数,即判断该数是否除了能被 1和它本身整除外,不能被任何数整除。 代码实现如下: for(j=2; j i; j+) if(i j=0) *如果余数为 0,证明 i不是素数 * 此语句需要熟 记,很多判断素数的题目可通过此法解决。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1