【真题1】 请补充函数fun(),该函数的功能是:把一个整数转换成字符串,并倒序 保存在字符数组str 中。例如:当n=13572468 时,str=“86427531”。 注意: 部分源程序给出如下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数 fun 的横线上填入所编写的若干表达式或语句。 试题程序: #include< stdio.h > #include< conio.h > #define N 80 char str[N]; void fun(long int n) { int i=0; while(【1】) { str[i]=【2】; n/=10; i++; } 【3】; } main() { long int n=13572468; clrscr(); printf("*** the origial data ***\n"); printf("n=%ld",n); fun(n); printf("\n%s",str); } (2011年2月) 解析: 填空1:while循环的执行条件是n >0,当n 等于0 时,说明已经将 整数的各位数字都转换为数字字符并存入字符串中了。填空2:n对10 求余, 得到整数n的个位数字,在加上字符′0′的ASCII码,得到对应的数字字符,并 存入字符串str 中。填空3:将整数转换为字符串并倒序存放入字符数组str 中 后,还要在str 最后加上字符串结束标记符′\0′。 答案:【1】n >0 【2】n%10+'0' 【3】str[i]= ′\0′ 【真题2】 给定程序modi.c 中,函数fun 的功能是:将s 所指字符串的正序和反 序进行连接,形成一个新串放在t 所指的数组中。 例如,当s 所指字符串为: "ABCD"时,则t 所指字符串中的内容应为:"ABCDDCBA"。 请改正程序中的错 误,使它能得出正确结果。 注意:不要改动main 函数, #include < conio.h > #include < stdio.h > #include < string.h > /************found************/ void fun(char s,char t) { int i,d; d=strlen(s); for(i=0;i< d;i++) t[i]=s[i]; for(i=0;i< d;i++) t[d+i]=s[d-1-i]; /************found************/ t[2*d-1]='\0'; } main() { char s[100],t[100]; clrscr(); printf("\nPlease enter string S:");scanf("%s",s); fun(s,t); printf("\nThe result is:%s\n",t); } (2011年2月) 解析: 本题着重考察考生对C 语言中指针及一维数组的用法与基本概念。 C 语言中,指针变量的定义:void fun (char *s, char *t),一维数组的定 义:fun(char s[], char t[])。源程序中的"void fun (char s, char t)"是定义 的简单变量s、t,按照程序的需要,这里应该定义为指针变量或一维数组,所 以应改为"void fun (char *s, char *t)"或"fun(char s[], char t[])"或相同 作用的语句。 按照题意的要求,字符串的结束符'\0'应放在2 倍字符串长度的位置上,所以源 程序"t[2*d-1] = '\0';"应改为"t[2*d] = '\0';"或相同作用的语句。 【真题3】 请编一个函数char * EXUL(char tt[]),它的功能是:将字符串tt 中的 大写字母都改为对应的小写字母,其它字符不变并返回修改后的字符串。 例如,若 输入字符串:"Ab, cD",则输出结果为:"ab, cd"。 注意:此程序存贮在prog.c 中。 请勿改动主程序main、函数WriteData 和函数compute 中的任何内容,仅 在函数EXUL 的花括号中填入你编写的若干语句。 #include < conio.h > #include < stdio.h > #include < string.h > char* EXUL( char tt[] ) {……} main() { int i; char tt[81]; clrscr(); printf("\nPlease enter a string: "); gets( tt ); printf( "\nThe result string is:%s\n", EXUL( tt ) ); compute(); } /* 以下部分与考生答题无关, 考生不必阅读, 但不得进行任何修改 */ WriteData(char tt[]) { FILE *fp; fp = fopen("dat82.dat", "w") ; fprintf(fp, "%s", tt); fclose(fp); } compute() { int i; char tt[81]; FILE *fp; fp=fopen("c9670803.in","r"); fgets( tt, 80, fp ); fclose(fp); EXUL(tt); WriteData(tt); } (2011年2月) 解析: 本题的考核点是C语言中的指针、循环语句以及条件判断语句的使用。 提示思路:使用for 循环从头到尾扫描字符串tt,如果某一个字符为大写字母, 则把它改成小写。 char* EXUL( char tt[] ) {for(;*tt;tt++) /*使用for 循环从头到尾扫描字符串tt*/ if ((*tt >= 'A') && (*tt < = 'Z') ) /*判断某一个字符是否为大写字母*/ *tt -= 'A' - 'a'; /*将大写字母转换成小写字母*/ } |