float score3] ISTU: void show(STU) (inti. printfr"%d %s:".tt.num tt name): for(i=0.i<:it+) prinscore): printf"\n"): /体水客*来*卡来率来f0Und*车中本本率年利 void modify(1*ss,float a) (inti. for(-=0.i<3;++) 作*特*found*a刘 s8->2*=a main() {STUst-f1,"Zhanghua',76.5,78.0,.82.0 float a show(std): 作*移车*车*特*ound车车特华*车特制 modi(3a助 show(std); 2 解题思路: 本题是利用结构体存储学生记录并由实参s5返回, 第一处:实参s是一个结构型指针变量,所以应填:STU。 第二处:该学生的各科成领都乘以一个系数a,所以应填:scoc门. 第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&sd。 给定程序MODI1.C中函数fn的功能是:求kt(k<13),所求阶乘的值作为函数值返回.例如:若k=I0,则应 输出:3628800。 请改正程序中的错误。使它能得出正确的结果。 注意:不要致动mam函数,不得增行或删行,也不得更政程序的结构! .26
- 26 - float score[3]; }STU; void show(STU tt) { int i; printf("%d %s : ",tt.num,tt.name); for(i=0; i<3; i++) printf("%5.1f",tt.score[i]); printf("\n"); } /**********found**********/ void modify(_1_ *ss,float a) { int i; for(i=0; i<3; i++) /**********found**********/ ss->_2_ *=a; } main( ) { STU std={ 1,"Zhanghua",76.5,78.0,82.0 }; float a; printf("\nThe original number and name and scores :\n"); show(std); printf("\nInput a number : "); scanf("%f",&a); /**********found**********/ modify(_3_,a); printf("\nA result of modifying :\n"); show(std); } 解题思路: 本题是利用结构体存储学生记录并由实参 ss 返回。 第一处:实参 ss 是一个结构型指针变量,所以应填:STU。 第二处:该学生的各科成绩都乘以一个系数 a,所以应填:score[i]。 第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是:求 k!(k<13),所求阶乘的值作为函数值返回。例如:若 k = 10,则应 输出:3628800。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!
给定源程序: #include <stdio.h> long fun int k) found44 ifk>0 retum (k*fun(k-1)). else if(k=0) retur IL: mainO intk=10; printf"%d=%ldn",k.fun(k); 解要思路: 第一处:条件判断缺少圆括号。 第二处:判斯相等的符号是=。 幸华单单中华中单卓中神车卡中车神中华中中南中华华中来神来帝华非神中中带卡单中中华中卡神中单单非单率年 程序定义了NXN的二维数组,并在主函数中自动赋值.请编写函数fu(mtaN.imtn,函数的功能是:使数 组左下三角元素中的值乘以n 例如:若n的值为3,a数组中的值为 11971川3971238侧返回主程序后a数组中的值应为169811456111215181 注意:部分源程序存在文件PROG1C中, 请勿改动主函数man和其它函数中的任何内容,仅在函数n的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <stdlib.h Hdefine N5 int fun intalIN]int n) maim() int a[N][N].n,i j: printf.The arrayn for (i=0:i<N:i++) -27
- 27 - 给定源程序: #include <stdio.h> long fun ( int k) { /************found************/ if k > 0 return (k*fun(k-1)); /************found************/ else if ( k=0 ) return 1L; } main() { int k = 10 ; printf("%d!=%ld\n", k, fun ( k )) ; } 解题思路: 第一处:条件判断缺少圆括号。 第二处:判断相等的符号是==。 *************************************************** 程序定义了 N×N 的二维数组,并在主函数中自动赋值。请编写函数 fun(int a[][N], int n),函数的功能是:使数 组左下三角元素中的值乘以 n 。 例如:若 n 的值为 3,a 数组中的值为 | 1 9 7 | | 3 9 7 | | 2 3 8 |则返回主程序后 a 数组中的值应为 | 6 9 8 | | 4 5 6 | | 12 15 18| 注意: 部分源程序存在文件 PROG1.C 中。 请勿改动主函数 main 和其它函数中的任何内容,仅在函数 fun 的花括号中填入你编写的若干语句。 给定源程序: #include <stdio.h> #include <stdlib.h> #define N 5 int fun ( int a[][N], int n ) { } main ( ) { int a[N][N], n, i, j; printf("***** The array *****\n"); for ( i =0; i<N; i++ )
{for(j=0.j<N.j++) {alill=rand(%10:printf(*%4",afi). printf"In"). do n=rand(%10:while (n>=3 ) printf"n=%4dn"n) fn(an方 printf (".THE RESULT."); for(i=0.i<N:+) (for(j=0 j<N:j+)printf%4d",a) printf"n"). NONO(): 解愿思路: 本趣是利用两重循环给二维数组左下三角元素中的值乘以 参考答案: int fun int a[lIN].int n) inti.j: for(i=0:i<N:i++) o0=0j<=j+) a*=n: ※※※※※※※※※※※※※※※※※※※※※※※※※ 第09套: 给定程序中,函数f的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序,即若原链表结点 据域从头至尾的数据为:10、4、2、8、6.挂序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处填入正确的内容并把下划线则除,使程序得出正确的结果。 注意:源程序存放在考生文件夹下的BLANKI.C中。 不得增行或删行,也不得更政程序的结构! 给定源程序: #include<stdio.h> #include <stdlib.h> define N6 typedef struct node int data: .28
- 28 - { for ( j =0; j<N; j++ ) { a[i][j] = rand()%10; printf( "%4d", a[i][j] ); } printf("\n"); } do n = rand()%10 ; while ( n >=3 ); printf("n = %4d\n",n); fun ( a, n ); printf ("***** THE RESULT *****\n"); for ( i =0; i<N; i++ ) { for ( j =0; j<N; j++ ) printf( "%4d", a[i][j] ); printf("\n"); } NONO( ); } 解题思路: 本题是利用两重循环给二维数组左下三角元素中的值乘以 n。 参考答案: int fun ( int a[][N], int n ) { int i, j; for(i = 0 ; i < N ; i++) for(j = 0 ; j <= i; j++) a[i][j] *= n ; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第 09 套: 给定程序中,函数 fun 的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数 据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结果。 注意:源程序存放在考生文件夹下的 BLANK1.C 中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <stdlib.h> #define N 6 typedef struct node { int data;
NODE void fun(NODE*h) NODE*p.*q:int t p=h; while(p) 小事**found*华*华华s/ q=1: 作found while(2_) 【fp->daa>q>daia {t=p->data,p->data=q-zdata;q->data= q=q->next. 作found NODEcreatlist(int a) {NODE*h"p.*q:int i; h=NULL: for(i=0:i<N;i++) (NODE*)mallod(sizeofNODE) q->data-a[i]. g->next=NULL: if(h==NULL)h=p=q: else {p->next=q年p=g:】 void oulist(NODEh) NODE"p. p=h; if(p=NULL)"The list is NULLIV"). {printf"nHead"方 29
- 29 - struct node *next; } NODE; void fun(NODE *h) { NODE *p, *q; int t; p = h; while (p) { /**********found**********/ q = _1_ ; /**********found**********/ while (_2_) { if (p->data > q->data) { t = p->data; p->data = q->data; q->data = t; } q = q->next; } /**********found**********/ p = _3_ ; } } NODE *creatlist(int a[]) { NODE *h,*p,*q; int i; h=NULL; for(i=0; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; q->next = NULL; if (h == NULL) h = p = q; else { p->next = q; p = q; } } return h; } void outlist(NODE *h) { NODE *p; p=h; if (p==NULL) printf("The list is NULL!\n"); else { printf("\nHead ");
do {printf"%d p->data);p=p->next) while(pI-NULL). print">Endn"). main() {NODEhead: int a[N]0,10.4,2,&6 head=creatlist(a); printfThe original listn). outlist(head). fun(head): outlist(head). 解愿思路: 本题是考察使用链表方法,使用两重w循环语句,对链表的结点数据进行升序排列。 第一处:由于外循环变量使用P指针,内循环变量使用q指针,所以q指向必须指向p的©t指针,因此应填 写:pnet 第二处:判图断内循环q指针是否结束,所以应填:q。 第三处:外循环控制变量p指向自己的net指针,所以应填:pnet 市中中来中中中水中来市中卡市中中市中中来水中中中中水冲中中中水率来中来卡非申中中市中中中中中水率中来华 给定程序MODI1.C中函数n的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A 2转换为叫,其它字符不变。 请改正函数fu中指定部位的错误,使它能得出正确的结果。 注意:不要改动man函数,不得增行或刷行,也不得更政程序的结构 给定源程序: #include <stdio.h> ncude <ctypeh void fun(char"s) while(*s=a)) {面*s=Z)*s=A ckei讯s=)s= 30
- 30 - do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } main() { NODE *head; int a[N]= {0, 10, 4, 2, 8, 6 }; head=creatlist(a); printf("\nThe original list:\n"); outlist(head); fun(head); printf("\nThe list after inverting :\n"); outlist(head); } 解题思路: 本题是考察使用链表方法,使用两重 while 循环语句,对链表的结点数据进行升序排列。 第一处:由于外循环变量使用 p 指针,内循环变量使用 q 指针,所以 q 指向必须指向 p 的 next 指针,因此应填 写:p.next。 第二处:判断内循环 q 指针是否结束,所以应填:q。 第三处:外循环控制变量 p 指向自己的 next 指针,所以应填:p.next。 *************************************************** 给定程序 MODI1.C 中函数 fun 的功能是: 将 s 所指字符串中的字母转换为按字母序列的后续字母(但 Z 转换为 A, z 转换为 a),其它字符不变。 请改正函数 fun 中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <ctype.h> void fun (char *s) { /**********found***********/ while(*s!='@') { if(*s>='A' & *s<='Z' || *s>='a' && *s<='z') { if(*s=='Z') *s='A'; else if(*s=='z') *s='a';