1、国家二级 C语言机试(操作题)模拟试卷 319及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:将形参 s所指字符串中的所有数字字符顺序前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如, s所指字符串为: asdl23fgh543df,处理后新字符串为: 123543ausdfghdf。请在程序的下画线处填入正确的内容并把下画线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 c中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #include stdlib
2、h #include ctype h char*fun(char*s) int i, j, k, n; char*P, *t; n=strlen(S)+1; t=(char*)malloc(n*sizeof(char); P=(char*)malloc(n*sizeof(char); j=0; k=0; for(i=0; i n; i+) if(isdigit(si) *found* P【 1】 =si; j+; else tk=si; k+; ) *found* for(i=0; i 【 2】 ; i+) Pj+i=ti; Pj+k=0; *found* return 【 3】 ; main
3、() char s80; printf(“Please input: “); scanf(“ s“, s); printf(“ nThe result is: s n“, fun(s); 二、程序修改题 2 下列给定程序中函数 fun的功能是:将长整型数中各位上为奇数的数依次取出,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为 87653142时, t中的数为 7531。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include stdio h
4、 #include conio h void fun(long s, long*t) int d; long s1=1; *found* t=0; while(s 0) d=s 10; *found* if(d 2=0) *t=d*s1+*t; s1*=10; s =10; void main() long s, t; system(“CLS“); printf(“ nPlease enter s: “); scanf(“ ld“, s); fun(s, t), printf (“The result is: id n“, t); 三、程序设计题 3 编写函数 int fun(int lim,
5、 int aaMAX),其功能是求出小于或等于 lim的所有素数并放在 aa数组中,并返回所求出的素数的个数。 注意:部分源程序在文件 PROG1 C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include conio h 2 #include stdio h 3 #include stdlib h 4 #define MAX 100 5 int fun(int lim, int aaMAX) 6 7 8 9 void main() 10 11 FILE*wf; 12 int limit, i, sum; 13 i
6、nt aaMAX; 14 system(“CLS“); 15 printf(“输入一个整数: “); 16 scanf(“ d“, limit); 17 sum=fun(limit, aa); 18 for(i=0; i sum; i+) 19 20 if(i 10=0 i!=0) *每行输出 10个数 * 21 printf(“ n“); 22 printf(” 5d”, aai); 23 24 * 25 wf=fopen(“out dat“, “W“); 26 sum=fun(15, aa); 27 for(i=0; i sum; i+) 28 29 if(i 10=0&i!=0) *每行
7、输出 10个数 * 30 fprintf(wf, “ n“); 31 fprintf(wf, “ 5d“, aai); 32 33 fclose(wf); 34 * 35 国家二级 C语言机试(操作 题)模拟试卷 319答案与解析 一、程序填空题 1 【正确答案】 (1)j (2)k (3)p或 (p) 【试题解析】 填空 1:函数中申请了两个内存空间,其中 p存放数字字符串, t存放非数字字符串,根据条件可知, p依次存放数字字符串,其位置由 j来控制,所以应填 j。 填空 2:利用 for循环再把 t中的内容依次追加到 p中,其中 t的长度为 k,所以应填 k。 填空 3:处理之后的字符串
8、存放到 p中,最后返回 p的首地址即可,所以应填 p。 二、程序修改题 2 【正确答案】 (1)*t=0; (2)if(d 2!=0)或 if(d 2=1) 【试题解析】 本题考查:指针型变量作为函数参数; if语句条件表达式,结合奇偶数的表示方法来确定该表达式内容。 (1)由函数定义可知,变量 t是指针变量,所以对 t进行赋初值 0是不对的。因为 t指向的是存放新数的变量,所以此处应给新数赋初值 0,即木 t=0; (2)变量 d表示数 s各位上的数,此处的 if条件应为判断 d是否为奇数。 三、程序设计题 3 【正确答案】 int fun(int lim, int aaMAX) int i, j, k=0 ; for(i=2; i =lim; i+) *求出小于或等于 lim的全部素数 * for(j=2; j i; j+) if(i j=0)break ; if(j =i) aak+=i; *将求出的素数放入数组 aa中 * return k; *返回所求出的素数的个数 * 【试题解析】 本程序如果一个数是合数,那么它的最小质因数肯定小于等于他的平方根。使用 for循环语句查找小于 lim的所有数,使用内嵌的循环判断语句判断该数是否为素数。在做这道题时 ,需要重点掌握素数的判定方法: for(j=2; j sqrt(i); j+) if(i j=0)reak;
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1