1、国家二级( C语言)机试模拟试卷 180及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参 n中,各位上为偶数的数取出,并按原来从高位到低位相反的顺序组成一个新的数,并作为函数值返回。 例如。输入一个整数: 27638496,函数返回值为: 64862。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKI C中。 不得增行或删行,也不得更改程序的结构 ! #include unsigned long fun(unsigned long n) unsigned long x=0; int t;
2、 while(n) t=n 10; *found* if(t 2= 【 1】 ) *found* x= 【 2】 +t; *found* n= 【 3】; return x; main() unsigned long n= 1 ; while(n99999999| n double fun (int x) /*found*/ int sum=0.0; int c=0, i=0; while (xi != 0) if (xi 0) sum += xi; c+; i+; /*found*/ sum=c; return sum; main() int x1000; int i=0; printf(“
3、nPlease enter some data (end with 0): “); do scanf(“%d“, while (xi+ != 0); printf(“%fn“, fun (x); 三、程序设计题( 40分) 3 编写函数 fun,函数的功能是:从 s所指的字符串中删除给定的字符。同一字母的大、小写按不同字符处理。 若程序执行时输入字符串为: turbo c andborlaM c+ 从键盘上输入字符: n,则输出后变为: turbo c ad borlad C+ 如果输入的字符在字符串中不存在,则字符串照原样输出。 注意:部分源程序在文件 PROGl C中。 请勿改动主函数 m
4、ain和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 #include #include void fun(char s,char c) si=0; NONO() /* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; char s81, ch, w ; int len ; rf = fopen(“in.dat“,“r“); wf = fopen(“out.dat“,“w“); fgets(s, 80, rf); fscanf(rf, “%c“, len = strlen(s) - 1 ; w = sl
5、en ; if(w = n | w = 0x1a) slen = 0 ; fun(s, ch); fprintf(wf, “%s“, s); fclose(rf); fclose(wf); main() static char str=“turbo c and borland c+“; char ch; printf(“原始字符串 :%sn“, str); printf(“输入一个字符 :“); scanf(“%c“, fun(str,ch); printf(“str=%sn“,str); NONO(); 国家二级( C语言)机试模拟试卷 180答案与解析 一、程序填空题( 30分) 1 【正
6、确答案】 (1)0 (2)10*x (3)n 10 【试题解析 】 第一空: “if(t 2=【 1】 )“是判断 t是否是偶数, t是偶数的时候t 2等于 0,故第一空处应填 “0“。 第二空:假设第一次得到的偶数是 t=2,那么 x=2第二次得到的偶数是 t=4,那么 x=2*10+4;第三次得到的 t=6,那么 x=24*10+6。由此可知, x每次是在前面一次的基础上乘以 l0然后加上 t,故第二处应填 “10*x“。 第三空:在 while循环内逐个判断 n的每一位, n lO得到个位数, n 10之后n缩小 10倍,下次 n 10得到十位数,依此类推可求得 n的每一位数字,故第三空
7、处应将 n缩小 10倍,准备下次求整除 10的余数,即第三空处应为 “n 10“。 二、程序修改题( 30分) 2 【正确答案】 double sum=0.0; sum/=c; 【试题解析】 ( 1) fun函数的返回值是 double型,返回值 sum的定义类型原题定义为 int型,与 fun的定义类型不符,所以将 “int sum=0.0;”改为 “double sum=0.0;”。 ( 2)第二个标识下的 “sum=c;”语句中的 “”符号是非法符号,这里应该是除号。所以,第二个标识下 “sum=c;”应该 改为 “sum/=c;”。 三、程序设计题( 40分) 3 【正确答案】 char *p=s; int i=0; while(*p) if(*p !=c)si+=*p; p+; 【试题解析】 进入 fun函数,根据前面的分析: ( 1)首先,设置一个指针变量指向字符串的头位置,并使用循环,依次查找字符串中的指定字符。 ( 2)若找到指定字符,则将后面位置的第一个非指定字符移到当前位置,并将其后的字符也依次前移。 ( 3)最后将处理的字符串输出。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1