1、国家二级 C语言机试(操作题)模拟试卷 228及答案与解析 一、程序填空题 1 给定程序中,函数 fun的功能是:判断形参 s所指字符串是否是 回文(Palindrome),若是,函数返回值为 1;不是,函数返回值为 0。 回文 是正读和反读都一样的字符串 (不区分大小写字母 )。 例如, LEVEL和 Level是 回文 ,而 LEVLEV不是 回文 。 请在程序的下画线处填入正确的内容并把下域线删除,使程序得出正确的结果。 注意:部分源程序在文件 BLANK1 C中。 不 得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #1nclucle stdio h 2 #include st
2、ring h 3 #include ctype h 4 int fun(char*s) 5 char*1p, *rp; 6 *found* 7 1p=【 1】 ; 8 rp=S+strlen(s)-1; 9 while(toupper(*1p)=toupper(*rp) (1p【 2】 ; 12 *found* 13 if(1p【 3】 ; 14 else return 1: 15 16 main() 17 char s81; 18 printf(Enter a string: ); 18 scanf( s, s); 19 if(fun(s) 18 printf( n s is a Pa1-i
3、ndrome n n, s); 20 else 18 printf( n S isnt a Palinctrome n n, s); 21 二、程序修改题 2 下列给定程序中,函数 fun的功能是:根据整型参数 m,计算如下公式的值。例如,若 m=2000,则应输出0 000160。 请改正程序中的错误,使它能得出正确的结果。 注意:部分源程序在文件 MODI1 C中,不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: 1 #include stdlib h 2 #include conio h 3 #include stdio h 4 *found* 5 fun(i
4、nt m)6 double y=0 , d; 4 int i; 8 *found* 9 for(i=100, i 三、程序设计题 3 请编写函数 fun,其功能是:将 M行 N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。 例如,若二维数组中的数据为 W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSHWSH。 注意:部分源程序给出如下。 请勿改动主函数 main和其他函数中的任何内容,仅在函数 fun的花括号中填入你编写的若干语句。 试题程序: 1 #include stdio h 2 #define M 3 3 #define N 4 4
5、void fun(char(*s)N, char*b) 5 6 7 8 void main() 9 10 char a100, wMN=W, W, W, W, , S, S, S, S, H,H, H, H; 11 int i, j; 12 printf(The matrix: n); 13 for(i=0; iM; i+) 14 15 for(j=0; jN; j+) 16 printf( 3c, wij); 17 printf( n); 18 19 fun(w, a); 20 printf(The A string: n); 21 puts(a); 22 printf( n n); 23
6、国家二级 C语言机试(操作题)模拟试卷 228答案与解析 一、程序填空题 1 【正确答案】 (1)s (2)- (3)return 0 【试题解析】 填空 1:根据函数体 fun中,对变量 lp和 rp的使用可知, lp应指向形参 s的起始地址, rp指向 s的结尾地址,所以应填 s。 填空 2: rp是指向字符串的尾指针,当每做一次循环 rp向前移动一个位置,所以应填: -。 填空 3:当 lp和 rp相等时,表示字符串是回文并返回 1,否则就返回 0,所以应填 return 0。 二、程序修改题 2 【正确答案】 (1)double fun(int m) (2)for(i=100: i=m
7、: i+=100) 【试题解析】 (1)题目要求在函数 fun中求级数前 m项和,可用循环语句,每次计算级数中的一项,然后累加。第一处错 误在于定义 fun(int m), 扣函数的返回值 y可知此处应该定义为 double fun(int m)。 (2)for(i=100, i=m, i+=100)中是一个简单的语法错误。 for循环语句的形式为for(表达式 1;表达式 2;表达式 3),其表达式之间应以 ; 相隔。 三、程序设计题 3 【正确答案】 1 void fun(char(*s)N, char*b) 2 3 int i, j, k=0; 4 for(i=0; iN; i+) *按列的顺序依次放到一个字 符串中 * 5 for(j=0; jM ; j+) 6 bk+=sji; 7 bk= 0; 8 【试题解析】 看到程序后,很容易便能想到用循环嵌套的方法,本题中按列的顺序依次放到一个字符串中,所以列标变化慢,行标变化快。 注意:第 1个循环条件为 iN(即列 );第 2个循环条件为 jM(即行 ),因为在循环的嵌套中越在内层,循环变化就越快。
copyright@ 2008-2019 麦多课文库(www.mydoc123.com)网站版权所有
备案/许可证编号:苏ICP备17064731号-1