1、国家二级 C语言机试(操作题)模拟试卷 194及答案与解析 一、程序填空题 1 函数 fun的功能是:计算 若x=2 5,函数值为: 1 917915。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 !#inolude#inoludedouble fun(double x)double f, t; int n; f=1 0+x; *found* t=_1_; n=1; do n+; *found* t *=(一 1 0)*x _2_; f+=t; *found* while(
2、_3_=1e一 6); return f; main()double x, y; x=2 5; y=fun(x); printf(“ nThe result is: n“); printf(“x=一 12 6f y=一 12 6f n“, x, y); 二、程序修改 题 2 给定程序 MODIl C中函数 fun的功能是:计算正整数 nUN的各位上的数字之积。 例如,若输入: 252,则输出应该是: 20。若输入: 202,则输出应该是: 0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #inClude long fun
3、(long num) *found* long k; do k*=num 1 0; *found* num =10; while(num); return(k); main() long n ; printf(“ nPlease enter a number: “); scanf(“ ld“, n); printf(“ n id n“, fun(n); 三、程序设计题 3 荫数 fun的功能是:将 s所指字符串中除了下标为偶数、同时 ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一 个新串放在 t所指的数组中。 例如,若 s所指字符串中的内容为: “ABCDEFGl2345
4、6“,其中字符 A的 ASCII码值为奇数,因此应当删除;其中字符 B的 ASCII码值为偶数,仇在数组中的下标为奇数,因此也应当删除:而字符 2的 ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其他依此类推。最后 t所指的数组中的内容应是:“246“。 注意:部分源程序存在文件 PROGl C中。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的化括号中填入你编写的若干语句。 #include #include void fun(char *s, char t) main() char s100, t100; void NONO(); printf(“ n
5、Please enter string S: “); s canf(“ 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(“out dat“, “w“); for(i=0; i10; i+) fscanf(rf, “ s“, s); fun(s, t); fprintf(wf, “
6、s n“, t); fclose(rf); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 194答案与解析 一、程序填空题 1 【正确答案】 (1)x (2)n (3)fabs(t) 【试题解析】 第一空: “f=1 0+x: ”f的初始化为级数的前两项之和, do while循环从第三项 x2 2开始计算,第一空处是给 t赋初值, t表示级数项, “n+;t*=(一 1 0)*x _2_; ”即第一次进入 do循环之后 n的值为 2,故 t的初值应该为 x,第一空处应为 “x”。 第二空:由审题分析可知,后一项乘以 (一 1)*x除以n,故第二空处应为 “n”。 第三空:循
7、环的终止条件是 (xn n!)的绝对值小于 le-6,即只要 (x0 n!)大于等于 le-6, do循环就执行,故第三处应为 “fabs(t)”, fabs函数的功能是求绝对值。 二、程序修改题 2 【正确答案】 (1)long k=1; (2)num =10; 【试题解析】 (1)第一个错误标识下的 k是函数的返回值,子函数 fun中在执行“k*=hum 10; ”之前,只进行了定义,却没有赋初值,编译时会警告变量在使用之前没有初始化 k。 k代表了各个位上的数字之积,其初值应为 1。因此,第 一个标识下的 “long k; ”改为 “long k=1; ”。 (2)第二个标识下的符号 “
8、 ”是非法字符,根据题意,这里应该是进行除法运算,所以 “num =10; ”应该改为 “num =10; ”。 三、程序设计题 3 【正确答案】 int i, j=0; for(i=0; istrlen(s); i+=2) if(si 2=0)tj+=si; tj= 0; 【试题解析】 (1)判断一个字符串中的某一字符下标 i是否为偶数,可用 “i2=0”来判断;也可以从 下标 0开始,每次增 2。判断字符中的 ASCII码值是否为偶数,则可用 “si 2=0”来判定。 (2)对串 s中下标为偶数的字符进行考查,满足 ASCII码值是偶数条件的字符就顺序放在新串 s中,甭则就不存放。 (3)所有字符处理完后,记得在新串 s的末尾加上结束符 “ 0”。