1、国家二级 C语言机试(操作题)模拟试卷 636及答案与解析 一、程序填空题 1 使用 VC+2010打开考生文件夹下 blank1中的解决方案。此解决方案的项目中包含一个源程序文件 blank1 c。在此程序中,函数 fun的功能是:判断形参 s所指字符串是否是 ”回文 ”(Palindrome),若是,函数返回值为 1;不是,函数返回值为0。 ”回文 ”是正读和反读都一样的字符串 (不区分大小写字母 )。 例如, LEVEL和 Leve1是 “回文 “,而 LEVLEV不是 ”回文 ”。 请在程序的下画线处填入正确的内容并把下画线删除,使 程序得出正确的结果。 注意:部分源程序在文件 BLA
2、NK1 C中。 不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdio h #include string h #include ctype h int; fun(char*s) char*lp, *rp; *found* lp=【 1】 ; rp=s+strlen(s)-1; while(toupper(*lp)=toupper (*rp)&(lp rp) *found* lp+; rp【 2】 ; ) *found* if(lp rp)【 3】 ; else return1; main() char s81; printf(“Enter a string: “)
3、; scanf(“ s“, s); if(fun(s) printf(“ n “ s “is a Palindrome n n“, s); else printf(“ n “ s “isnt a Palindrome n n“, s); 二、程序修改题 2 使用 VC+2010打开考生文件夹下 modi1中的解决方案。此解决方案的项目中包含一个源程序文件 modi1 c。在此程序中,函数 fun的功能是:先将 s所指字符串中的字符按逆序存放到 t所指字符串中,然后把 s所指串中的字符按正序连接到 t所指串之后。 例如,当 s所指的字符串为 “ABCDE”时, t所指的字符串应为 “EDCBAA
4、BCDE”。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main函数,不得增行或删行,也不得更改程序的结构 ! 试题程序: #include stdlib h #include conio h #include stdio h #include string h void fun(char*s, char*t) *found* int i; s1=strlen(s); for(i=0, i s1; i+) *found* ti=ss1-i; for(i=0; i =s1; i+) ts1+i=si; t2*s1= 0; void main() char s100, t100;
5、 system(“CLS“); printf(“ n Please enter string s: “); scanf(“ s“, s); fun(s, t); printf(“The result is: s n“, t); 三、程序设计题 3 使用 VC+2010打开考生文件夹下 prog1中的解决方案。此解决方案的项目中包含一个源程序文件 prog1 c。在此程序中,请编写函数 fun,其功能是将形参 s所指字符串放人形参 a所指的字符数组中,使 a中存放同样的字符串。说明:不得使用系统提供的字符串函数。 注意:部分源程序存在 PROG1 C中,请勿改动主函数 main和其他函数中的任何
6、内容,仅在函数 fun指定的部位填入所编写的若干语句。 试题程序: #include stdio h #define N20 void NONO(); void fun(char*a, char*s) main() char s1N, *s2=“abcdefghijk“; fun(s1, s2); printf(“ s n“, s1); printf(“ s n“, s2); NONO(); void NONO() *本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 * FILE*fp, *wf; int i; char s1256, s2256; fp=fopen(“in dat
7、“, “r“); wf=fopen(“out dat“, “w“); for(i=0; i 10; i+) fgets(s2, 255, fp); fun(s1, s2); fprintf(wf, “ s“, s1); fclose(fp); fclose(wf); 国家二级 C语言机试(操作题)模拟试卷 636答案与解析 一、程序填空题 1 【正确答案】 (1)s (2)- (3)return0 【试题解析】 填空 1:根据函数体 fun中,对变量 lp和叩的使用可知, lp应指向形参 s的起始地址, rp指向 s的结尾地址,所以应填 s。 填空 2: rp是指向字符串的尾指针,当 每做一次
8、循环 rp向前移动一个位置,所以应填: -。 填空 3:当 lp和 rp相等时,表示字符串是回文并返回 1,否则就返回 0,所以应填 return0。 二、程序修改题 2 【正确答案】 (1)int i, s1; (2)ti=ss1-i-1; 【试题解析】 (1)变量 s1没有定义。 (2)该循环实现将 s串中的字符逆序存入 t串中, ti对应 s串中的 ss1-i-1。 三、程序设计题 3 【正确答案】 void fun(char*a, char*s) while(*s!: 0) *a=*s; a+; s+; *a= 0; 【试题解析】 要将 s所指的字符串存入 a所指的字符串中,程序要求不能使用系统提供的字符串函数,本题可以使用循环语句,依次取出 a所指字符串中的元素,将其存入 s所指的字符串中,最后为 s所指的字符串添加结束标识 0。