1、国家二级( C语言)机试模拟试卷 273及答案与解析 一、程序填空题( 30分) 1 给定程序中,函数 fun的功能是:将形参 s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 例如,形参 s所指的字符串为: abs5defl26jkm8,程序执行后的输出结果为:22。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANKl C中。 不得增行或删行,也不得更改程序的结构 ! #include #include #include int fun(char *s) int sum=0; while(*s
2、) /*found/*/ if(isdigit(*s)sum+=s【 1】; /*found*/ 【 2】; *found* return 【 3】; main() char s81; int n; printf(“ nEnter a string: n n“); gets(s); n=fun(s), printf(“ nThe result is: d n n“, n); 二、程序修改题( 30分) 2 给定程序 MODll C中函数 fun的功能是:将长整型数 s中每一位上为偶数的数依次取出,构成一个新数放在 t中。高位仍在高位,低位仍在低位。 例如,当 s中的数为: 87653142时,
3、 t中的数为: 8642。 请改正程序中的错误, 使它能得出正确的结果。 注意;不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! #include void fun(10ng s, long*t) int d; long si=i; *t=0; while(s0) (d=s 10; *found* if(d 2=0) (*t=d*s1+*t; s1*=10; *found* s =10 ; main() (long s, t; printf(“ nPlease enter s: “); scanf(“ id“, &s); fun(s, &t); printf(“The resu
4、lt is: Id n“, t); 三、程序设计题( 40分) 3 编写函数 fun,其功能是:根据以下公式求 p的值,结果由函数值带回。 m与 n为两个正整数且要求 mn。 例如: m=12, n=8时,运行结果为495 000000。 注意:部分源程序在文件 PROGl C文件中。 请勿 改动主函数main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。#includefloat fun(int m, int n)main() *主函数 * void NONO(); pzintf(“p= f n“, fun(12, 8); NONO(); VOid NONO() *
5、本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i, m, n ; float s; fp=fopen(“in dat“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 国家二级( C语言)机试模拟试卷 273答案与解析 一、程序填空题( 30分) 1 【正确答案】 (1)48或 /0 (2)s+ (3)sum 【试题解析】 第一空: “if(isdigit(*s)sum+=*s【 1】; “如果 *s是数字字符的话,sum累加其对应的数字的和,第一空处是将 *s转化为对应的数字,由审题分析可知,第一
6、空为 “0“或 “48“, 0的 ASC 码值为 48。 第二空: “while(*s)“循环的终止条件 是达到 s字符串的结束,因此在循环体内 s应该不断往字符串尾移动,故第二空处应为 “s+“。 第三空: “return 【 3】: “是返回累加和 sum,故第蔓空处为 “sum“。 二、程序修改题( 30分) 2 【正确答案】 (1)if(d 2=0) (2)s =10; 【试题解析】 (1)第一个标识是判断 d是否是偶数,即比较 d 2是否等于 0,在C语言中, “一 “表示的是 “等于 “,而 “=“是赋值,因此第一个标识下 “if(d 2=0)“应改为 “if(d 2=0)“。 (
7、2)第二个标 识下的 “s =10; “是对 a的截取,这里的 “ “本意应该是除号,但这个在 c语言中是不可识别的,所以第二个标识下 “s =10; “应该改为 “s =10;“。 三、程序设计题( 40分) 3 【正确答案】 float result, temp=1 0; int i; for(i=1; i=m; i+) temp=temp*i; 求 m! result=temp; result=m! for(temp=1 0, i=l; i=n; i+) temp=temp*i; 求 n! result=result temp; 求 m! n! for(temp=1 0, i=1; i=m n; i+) temp=temp*i; 求 (m n)! result=result temp; 求 m! 【试题解析】 进入 fun函数,根据前面的分析: 首先,计算 m!的值,先定义一个放阶乘值的变量 temp,初值为 1 0,通过循环的方法,用累乘器 “temp=temp*i; “实现 n!。同理可以求得 n!、 (m-n)!。 其中, result用来存放计算结果。 最后,根据题意,函数 fun的 函数体以 return语句结束。