【真题1】 给定程序的功能是:从键盘输入若干行文件(每行不超过80 个字符), 写到文件myfile4.txt 中,用-1 作为字符串输入结束的标志。然后将文件的内容读 出显示在屏幕上。文件的读写分别由自定义函数ReadText 和WriteText 实现。 #include < stdio.h > #include < string.h > #include < stdlib.h > void WriteText(FILE *); void ReadText(FILE *); FILE *fp; main() { if((fp=fopen("myfile4.txt", "w"))==NULL) {printf("open fail!!\n"); exit(0);} WriteText(fp); fclose(fp); if((fp=fopen("myfile4.txt","r"))==NULL) {printf(" open fail!!\n"); exit(0);} ReadText(fp); fclose(fp); } /**********found**********/ void WriteText(FILE __【1】__ ) { char str[81]; printf("\nEnter string with -1 to end :\n"); gets(str); while(strcmp(str,"-1")!=0) { /**********found**********/ fputs( __【2】__ ,fw); fputs("\n",fw); gets(str); } } void ReadText(FILE *fr) { char str[81]; printf("\nRead file and output to screen :\n"); fgets(str, 81, fr); while(!feof(fr)) { /**********found**********/ printf("%s", ___【3】___); fgets(str,81,fr); } } (2011年2月) 解析: 本题考核点为:文件的读写函数等。 题中第一个空填"*fw":fw 是一个文件指针,从键盘上读入数据,输入其所指 向的文件中。 题中第二空填"str":fputs 函数向文件中写数据,其函数原型为:fputs(ch,fp) 其中ch 是要输出的字符,它可以是一个字符常量,也可以是一个字符变量。fp 是文件指针变量。 题中第三个空填"str":printf函数的一般格式为: printf(格式控制,输出表列) 1、"格式控制"是用双引号括起来的字符串,也称"转换控制字符串",它包括两 种信息: 格式说明:由"%"和格式字符组成,如%d,%f等。它的作用是将输出的数据 转换为指定的格式输出。格式说明总是由"%"字符开始的。普通字符,即需要 原样输出的字符。 2、"输出表列":是需要输出的一些数据,可以是表达式。 答案:【1】*fw 【2】str 【3】str 【真题2】 给定程序modi.c 中,函数fun 的功能是:将字符串tt 中的小写字母改 为对应的大写字母,其它字符不变。例如,若输入"Ab,cD",则输出"AB,CD"。 请 改正程序中的错误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h > #include < stdio.h > #include < string.h > char *fun(char tt[]) { int i; for(i=0;tt[i];i++) /************found************/ if(('a'<=tt[i]) || (tt[i]<='z')) /************found************/ tt[i]+=32; return(tt); } main() { int i; char tt[81]; clrscr(); printf("\nPlease enter a string:"); gets(tt); printf("\nThe result string is:\n%s", fun(tt)); } (2011年2月) 解析: 本题着重考察考生对C 语言中一些简单算法的掌握情况。 本题中的第一个错误:由题意可知,当字符串中的字符大于a且小于z 时(即 为小写字母时),将其替换成大写字母。在C语言中,&&表示逻辑与,||表示 逻辑或,所以程序中语句"if(('a'<=tt[i]) || (tt[i]<='z'))"应改为"if(('a'< =tt[i]) && (tt[i]< ='z'))"或相同作用的语句。 本题中的第二个错误:小写字母转换成大写字母,应将其ASCII值减去32,所 以程序中语句"tt[i]+=32;"应改为"tt[i]-=32;"或相同作用的语句。 【真题3】 请编写函数fun,函数的功能是:将s所指字符串中下标为奇数位置上的 大写字母转换为字母序列中的下一个小写字母;若该位置上是小写字母,则不转换; 若该位置上是大写字母Z,则仅转换成小写字母z。 例如,输入:ABCdXZZZZ,则 输出为:AcCdXzZz。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数 main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 #include < stdio.h > #define N 80 void fun(char *s) {……} main() { char s[N]; printf("Enter a string: "); scanf("%s",s); fun(s); printf("The result:%s",s); } (2011年2月) 解析: 本题的考核点是字符转换算法。 解题思路:将s 所指字符串中下标为奇 数位置上的大写字母转换为字母序列中的下一个小写字母,若该位置上是小写 字母,则不转换;若该位置上是大写字母Z,则仅转换成小写字母z。判断字符 为大写字母的方法是:判断字符的ASCII值是否大于A小于Z。判断下标为奇 数,用i%2 等于1来判断。 void fun(char *s) { int i=0; /*假如s[i]不为字符串结束符,则继续循环,否则退出循环*/ while (s[i]!='\0') /*假如s[i]为大写字母Z 且在字符串中下标为奇数的位置上,则转换成 小写字母z*/ { if ((s[i]=='Z') && (i%2==1)) s[i]='z'; /*假如s[i]为除大写字母Z 以外的字母,则直接转换成该字母的小写 字母状态的下一个字母*/ else if ((s[i]>='A' && s[i]<'Z') && (i%2==1)) s[i]=s[i]+33; i++; } } |