【真题1】 str是一个由数字和字母字符组成的字符串,由变量num传入字符串长 度。请补充函数fun(),该函数的功能是:把字符串str 中的数字字符转换成数字并 存放到整型数组bb 中,函数返回数组bb 的长度。 例如: str=“Bcd123e456hui890”,结果为:123456890。 注意:部分源程序给出如 下。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun()的横线上填入 所编写的若干表达式或语句。 试题程序: #include< stdio.h > #define N 80 int bb[N]; int fun(char s[],int bb[],int num) { int i,n=0; for(i=0;i< num;i++) { if(【1】) { bb[n]=【2】; n++; } } return 【3】; } main() { char str[N]; int num=0,n,i; printf("Enter a string:\n"); gets(str); while(str[num]) num++; n=fun(str,bb,num); printf("\nbb= "); for(i=0;i< n;i++) printf("%d",bb[i]);} 解析: 填空1:如果当前字符的ASCII码大于字符′0′的ASCII码,而小于字 符′9′的ASCII码,则说明当前字符是数字字符。填空2:将数字字符转换为数 字的方法是,用当前数字字符的ASCII码减去字符′0′的ASCII码。填空3: 题目要求函数返回数组bb的长度,而变量n 记录了数字字符的个数,也就是数 组bb的长度,所以函数应该返回n。 答案:【1】s[i] >= ′0′ &&s[i]< = ′9′【2】s[i]- ′0′【3】n 【真题2】 给定程序modi.c 中函数 fun 的功能是:将s 所指字符串的反序和正序 进行连接形成一个新串放在t 所指的数组中。 例如,当s 所指字符串的内容为 "ABCD"时, t 所指数组中的内容为"DCBAABCD"。 请改正程序中的错误,使它能 得出正确的结果。 注意:不要改动main 函数, #include < conio.h > #include < stdio.h > #include < string.h > void fun (char *s, char *t) { int i, d; d = strlen(s); /************found************/ for (i = 1; i< d; i++) t[i] = s[d - 1 - i ]; for (i = 0; i< d; i++) t[ d + i ] = s[i]; /************found************/ t[2*d] = '/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 语言中,字符串的起始位置是从0 开始,所以源程序中的"for (i = 1; i< d; i++)"应改为"for(i=0;i< d;i++)"或相同作用的语句。 C 语言中,字符串的结束是以转义字符'\0'为标志的,所以源程序中的"t[2*d] = '/0';"应改为"t[2*d]='\0';"。 【真题3】 请编写函数fun,函数的功能是:移动字符串中的内容,移动的规则如 下:把第1 到第m 个字符平移到字符串的最后,把第m+1 到最后的字符移到字符 串的前部。 例如,字符串中原有的内容为:ABCDEFGHIJK,m 的值为3,则移动 后字符串中的内容应该是:DEFGHIJKABC。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其它函数中的任何内容,仅在函数fun 的花括号中填 入你编写的若干语句。 #include < stdio.h > #include < string.h > #define N 80 void fun(char *w, int m) {……} main() { char a[N]= "ABCDEFGHIJK"; int m; printf("The original string:\n");puts(a); printf("\n\nEnter m: ");scanf("%d",&m); fun(a,m); printf("\nThe string after moving:\n");puts(a); printf("\n\n"); } (2011年2月) 解析: 本题的考核点是一维数组的应用。 提示思路:本题要求把字符串中的第1到第m 个字符平移到字符串的最后,把 第m+1 到最后的字符移到字符串的前部,我们可以根据输入的m 的值,通过 for 循环语句,将m+1 到最后的字符之间的字符依次向前平移m 个存储单 元,本题中是通过语句w[j-1]=w[j];实现的,然后再将1 到m个字符逐一赋 给数组w[i-1],即w[i-1]=ch;。 void fun(char *w, int m) {int i=0,x,j; char ch; for(j=0;w[j];j++)i++; for(x=0;x< m;x++) {ch=w[0]; for(j=1;j< i;j++) /*通过for 循环语句,将m+1到最后的字符之间的字符 依次向前平移m 个存储单元*/ { w[j-1]=w[j]; } w[i-1]=ch; /*将m+1 到最后的字符之间的字符依次向前平移m 个存储单元 */ } } |