else*s+1 .foundt ("s)++ } main() char s[80]: print Enter a string with length)gets(s). printf"n The string nin "puts(s) fun (s). printf ("n The Cords")puts(s): 解思路: 第一处:使用whe循环来判断字符中指针s是否结束,所以应改为:while(*s。 第二处:取字符串指针s的下一个位置,所以应改为:s+, 年0单中中年0年年中车不华单中年年华中单中年单来中号年年0中年华卡0单年中车卡中单年中卡中年华 请偏写函数un,函数的功能是:移动一维数组中的内容:若数组中有n个整数.要求把下标从0到含p.p小于 等于-1)的数组元素平移到数组的最后 例如,一维数组中的原始内容为:1,2.3,45,6,7.8.9,10:p的值为3。移动后,一维数组中的内容应为 5,67,89,101,2,34. 注意:部分源程序在文件PROG1C中, 请勿改动主函数mai和其它函数中的任何内容,仅在函数的花括号中填入你编写的若干语句。 给定源程序: #include<stdio.h> #define N 80 void fun(intn.nt) main( {mtaN=1,23,45.67,89,10,11,12,13,14,15h int ip.n=15: for(=.i<m+)) printf"nnEnter p:"):scanf"p) fun(a.p.n):
- 31 - else *s += 1; } /**********found***********/ (*s)++; } } main() { char s[80]; printf("\n Enter a string with length < 80. :\n\n "); gets(s); printf("\n The string : \n\n "); puts(s); fun ( s ); printf ("\n\n The Cords :\n\n "); puts(s); } 解题思路: 第一处: 使用 while 循环来判断字符串指针 s 是否结束,所以应改为:while(*s)。 第二处: 取字符串指针 s 的下一个位置,所以应改为:s++;。 *************************************************** 请编写函数 fun, 函数的功能是: 移动一维数组中的内容; 若数组中有 n 个整数, 要求把下标从 0 到 p(含 p,p 小于 等于 n-1)的数组元素平移到数组的最后。 例 如, 一 维 数 组中 的 原 始 内 容为: 1,2,3,4,5,6,7,8,9,10; p 的值为 3 。移 动 后 , 一维 数 组 中 的 内容 应 为 : 5,6,7,8,9,10,1,2,3,4。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #define N 80 void fun(int *w, int p, int n) { } main() { int a[N]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; int i,p,n=15; printf("The original data:\n"); for(i=0; i<n; i++)printf("%3d",a[i]); printf("\n\nEnter p: ");scanf("%d",&p); fun(a,p,n);
printf"The data after moving) fo(-0:im,i++printf(%3d”a可: printf"nin"). NONOO. 解愿思路: 本题是考察一维数组的操作。 1.定义一维数组中间变量b,把n值后面数组中的内容存入b中。 2.再把m前的数组中的内容存入b中。 3.最后把数组b的内容依次存放到w中。 参考答案: void fun(intint p.intn) inti,j=0,b[N] for(i=p+1:isn:t+)blit+l=wlil foi=0;i<=p;4+)b+]=w0: for(i=0:i<n:i++)w]=bi]; ※※※※※※※※※※※※※※※※※※※※※※※※※ 第10套: 给定程序中,函数fun的功能是:判定形参a所指的NXN(规定N为奇数)的矩阵是否是"幻方",若是,函数 返回值为1:不是,函数返回值为0。幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和 都相等。 例如,以下3×3的矩阵就是一个幻方: 492 357 816 请在程序的下划线处填入正确的内容并把下划线除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANK1.C中, 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #define N3 int fun(int (a)[N]) {int ij.ml.m2.row.colum. m1=m2=0 for(i=0:i<N:i++)
- 32 - printf("\nThe data after moving:\n"); for(i=0; i<n; i++)printf("%3d",a[i]); printf("\n\n"); NONO(); } 解题思路: 本题是考察一维数组的操作。 1. 定义一维数组中间变量 b,把 n 值后面数组中的内容存入 b 中。 2. 再把 m 前的数组中的内容存入 b 中。 3. 最后把数组 b 的内容依次存放到 w 中。 参考答案: void fun(int *w, int p, int n) { int i, j = 0, b[N] ; for(i = p + 1 ; i < n ; i++) b[j++] = w[i] ; for(i = 0 ; i <= p ; i++) b[j++] = w[i] ; for(i = 0 ; i < n ; i++) w[i]= b[i] ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 10 套: 给定程序中,函数 fun 的功能是:判定形参 a 所指的 N×N(规定 N 为奇数)的矩阵是否是"幻方",若是,函数 返回值为 1; 不是,函数返回值为 0。"幻方"的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和 都相等。 例如,以下 3×3 的矩阵就是一个"幻方": 4 9 2 3 5 7 8 1 6 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #define N 3 int fun(int (*a)[N]) { int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i<N; i++)
{jN-i-I:ml+o:m2+ali]]: ifml!=m2)return 0. for(=0.iN, 作*率率中市市率率率O山d家来率率丰率率车华中 row=colum=1 for(j-0.j<N.j++) row+=alillil;colum+=alilli]: 作found if((rowl=colum)2(row!=m1))retum0. 作4 founds maino int x[N]IN]ij. for(i=0:i<N:i++) for(j0:j<N:j++)") printf("Array:n"): for(i=0,i<N,i++) for(=0.j<N:j++)print%3d printf"\n"). if(fun("The Array isa magie square.) else printf"The Array isn't amagic square.n"). 解题思路: 第一处:行列变量row和colum的值初始化为0. 第二处:两个条件只要有一个不满足就返回0,所以应填:。 第三处:如果矩阵是“幻方”,则返回1 给定程序MODI1.C中fun函数的功能是:根据整型形参m,计算如下公式的值. 11 1 23 例如,若主函数中输入5,则应输出0283333。 .33
- 33 - { j=N-i-1; m1+=a[i][i]; m2+=a[i][j]; } if(m1!=m2) return 0; for(i=0; i<N; i++) { /**********found**********/ row=colum= _1_; for(j=0; j<N; j++) { row+=a[i][j]; colum+=a[j][i]; } /**********found**********/ if( (row!=colum) _2_ (row!=m1) ) return 0; } /**********found**********/ return _3_; } main() { int x[N][N],i,j; printf("Enter number for array:\n"); for(i=0; i<N; i++) for(j=0; j<N; j++) scanf("%d",&x[i][j]); printf("Array:\n"); for(i=0; i<N; i++) { for(j=0; j<N; j++) printf("%3d",x[i][j]); printf("\n"); } if(fun(x)) printf("The Array is a magic square.\n"); else printf("The Array isn't a magic square.\n"); } 解题思路: 第一处:行列变量 row 和 colum 的值初始化为 0。 第二处:两个条件只要有一个不满足就返回 0,所以应填:||。 第三处:如果矩阵是“幻方”,则返回 1。 *************************************************** 给定程序 MODI1.C 中 fun 函数的功能是: 根据整型形参 m,计算如下公式的值。 1 1 1 t = 1 - - - - - . - - 2 3 m 例如,若主函数中输入 5,则应输出 -0.283333
请政正函数f中的错误或在横线处填上适当的内容并把横线删除,使它能计算出正确的结果 注意:不要政动ma两数,不得增行或酬行,也不得更政程序的结构: 给定源程序: include<stdio.h> double fun(intm) double t=1.0: int i: for(i=2.i<=m.+) 作g*found***华刺 t=101元 mainO int m printf"Please enter 1integer numbersn). scanf"d"&m). printf"The resut isfun(m)) 解题思路: 第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为1。 第二处:应是返国公式的值,函数中公式的值是存放在临时变量t中,所以应填rcum七. 季单单来中华单单华中神单单中中神中年中中原中华净中中中中净华华中中中单华家单华单华华单神单华卡单中华带 请编写一个函数,函数的功能是别除字符串中的所有空格。 例如,主函数中输入'asd af67,则输出为""asdafa67 注意:部分源程序在文件PROG1.C中, 请勿改动主函数mam和其它函数中的任何内容,仅在函数n的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <ctype.h> int funchar*st) main( -34
- 34 - 请改正函数 fun 中的错误或在横线处填上适当的内容并把横线删除, 使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> double fun( int m ) { double t = 1.0; int i; for( i = 2; i <= m; i++ ) /**********found**********/ t = 1.0-1 /i; /**********found**********/ _; } main() { int m ; printf( "\nPlease enter 1 integer numbers:\n" ); scanf( "%d", &m); printf( "\n\nThe result is %lf\n", fun( m ) ); } 解题思路: 第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为 t-=1./i。 第二处:应是返回公式的值,函数中公式的值是存放在临时变量 t 中,所以应填 return t;。 *************************************************** 请编写一个函数,函数的功能是删除字符串中的所有空格。 例如, 主函数中输入"asd af aa z67", 则输出为 "asdafaaz67"。 注意:部分源程序在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <ctype.h> int fun(char *str) { } main() {
char str[81] intn. printf"nputastring") gets(str). puts(str. fun(str). pint"**sr:%sn',st大 NONOO: 解题思路: 本愿是考察考生怎样利用字符审指针来删除字符申的空格字符。在函数开始处把指针先指向字符串亚以及位 置变量i置0,然后采用we循环和字符串指针D来处理的,每循环一次来判断指针D所指的字符是否为空格. 如果不是空格,则把该字符写到s字符中中,位置由ⅱ来控制,如果是空格,则不处理,继续取下一字符,直 至字符串结束为止,最后再把字符串结束符写到位置为的s上,再通过形参s返回。 参考答案: int fun() char*p=str; ti=0, while("p) if*pl='strt+】=*p p+ st=0; ※※※※※※※※※※※※※※※※※※※※※※※※※ 第11套 给定程序中,函数的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为2、4、6、 8、10,逆置后,从头至尾结点数据域依次为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线别除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中. 不得增行或行,也不得更改程序的结构: 给定源程序: #include <stdio.h> #define N5 typedef struct node .35
- 35 - char str[81]; int n; printf("Input a string:") ; gets(str); puts(str); fun(str); printf("*** str: %s\n",str); NONO(); } 解题思路: 本题是考察考生怎样利用字符串指针来删除字符串的空格字符。在函数开始处把指针 p 先指向字符串 str 以及位 置变量 i 置 0,然后采用 while 循环和字符串指针 p 来处理的,每循环一次来判断指针 p 所指的字符是否为空格, 如果不是空格,则把该字符写到 str 字符串中,位置由 i 来控制,如果是空格,则不处理,继续取下一字符,直 至字符串结束为止,最后再把字符串结束符写到位置为 i 的 str 上,再通过形参 str 返回。 参考答案: int fun(char *str) { char *p = str ; int i = 0 ; while(*p) { if(*p != ' ') str[i++] = *p ; p++ ; } str[i] = 0 ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 11 套: 给定程序中,函数 fun 的功能是将带头结点的单向链表逆置。即若原链表中从头至尾结点数据域依次为:2、4、6、 8、10,逆置后,从头至尾结点数据域依次为: 10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <stdlib.h> #define N 5 typedef struct node {