【真题1】 给定程序中,函数fun 的功能是:将N×N 矩阵中元素的值按列右移1 个位置, 右边被移出矩阵的元素绕回左边。例如,N=3,有下列矩阵 1 2 3 4 5 6 7 8 9 计算结果为 3 1 2 6 4 5 9 7 8 #include < stdio.h >#define N 4 void fun(int (*t)[N]) { int i, j, x; /**********found**********/ for(i=0; i< ___1___; i++) { /**********found**********/ x=t[i][___2___] ; for(j=N-1; j >0; j--) t[i][j]=t[i][j-1]; /**********found**********/ t[i][___3___]=x; } } main() { int t[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10}, i, j; printf("The original array:\n"); for(i=0; i< N; i++) { for(j=0; j< N; j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); printf("\nThe result is:\n"); for(i=0; i< N; i++) { for(j=0; j< N; j++) printf("%2d ",t[i][j]); printf("\n"); } } (2011年2月) 解析: 本题考查的是二维数组的用法。 在fun 函数中,外层循环是按行循环,由于共有N行,故循环的结束条件为i >=N,即第一空应填N;对于第j列的元素,其移动后应位于j+1列,如果 j+1=N 则将其移至0 列。在本题中,首先将i行N-1 列的元素存放到临时变量 x中,然后通过循环语句将i行j-1 列的元素移到i行j列,然后将临时变量x 中的值赋值给t[i][0]。故第二空应填N-1或其等效形式;第三空应填0。 答案:【1】N 【2】N-1 【3】0 【真题2】 下列给定程序中,函数fun()的功能是找出100~n(不大于1000)之间 百位数字加十位数字等于个位数字的所有整数,把这些整数放在s 所指的数组中,个 数作为函数值返回。 请改正程序中的错误,使它能得到正确结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构。 试题程序: #include < stdio.h >#define N 100 int fun(int *s, int n) { int i,j,k,a,b,c; j=0; for(i=100; i< n; i++) { /**********************found***********************/ k=n; a=k%10; k/=10; b=k%10; c=k/10; if(a==b+c) /**********************found***********************/ s[j]=i; } return j; } main() { int a[N], n,num=0, i; do { printf("\nEnter n(< =1000) :"); scanf("%d",&n); } while(n > 1000); num= fun(a,n); printf("\n\nThe result :\n"); for(i=0; i< num; i++) printf("%5d",a[i]); printf("\n\n"); } (2011年2月) 解析: (1)错误:k=n; 正确:k=i; (2)错误:s[j]=i; 正确:s[j++]=i; 错误1:k就是当前要被判断的数,是随着i值的变化而变化的。错误2:在循 环中,j是数组的下标要递增。 【真题3】 函数fun 的功能是:将s 所指字符串中ASCII值为偶数的字符删除,串 中剩余字符形成一个新串放在t 所指的数组中。 例如,若s 所指字符串中的内容为:“ABCDEFG12345”,其中字符B 的ASCII码 值为偶数、…、字符2 的ASCII码值为偶数、…都应当删除,其他依次类推。最后t 所指的数组中的内容是:“ACEG135”。 注意:部分源程序存在文件prog.c 中。 请勿改动主函数main 和其他函数中的任何内容,仅在函数fun 的花括号中填入你编 写的若干语句。 本题的考核点是数组、循环语句。 解题思路:使用循环语句将数组元素与2 做取余操作,如果余数不为零则将其值存入 另外一个数组中。 #include < conio.h >#include < stdio.h >#include < string.h >void fun(char *s,char t[]) {……} 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月) 解析: void fun(char *s, char t[]) { int i,slenth,n=0; slenth=strlen(s); /*统计字符串s中字符的个数*/ /*判断字符s[i]其值的ASCII码值是否为偶数,如果是,则继续下一个字符的 判断,否则将字符s[i]复制到t数组中*/ for(i=0;i< slenth;i++) if(s[i]%2!=0) t[n++]=s[i]; t[n]='\0'; } |