2012年二级C语言上机题库南开最新最准题库-1.txt
《2012年二级C语言上机题库南开最新最准题库-1.txt》由会员分享,可在线阅读,更多相关《2012年二级C语言上机题库南开最新最准题库-1.txt(272页珍藏版)》请在文库网上搜索。
1、说明:本题库是针对2012年3月份考试的上机考试题库,本题库共有100套题目(每套题目包含3道题:一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题),但由于考试时是随机抽题,所以即使把原题库告诉大家,你也不能知道到时计算机会给你抽取哪一套题,所以大家只有把全部题库都理解才能万无一失) 二级C语言上机试题汇编 第01套: 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去 除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回 所指变量。 例如,输入一个数:
2、27638496,新的数:为739。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(unsigned long *n) unsigned long x=0, i; int t; i=1; while(*n) /*found*/ t=*n % _1_; /*found*/ if(t%2!= _2_) x=x+t*i; i=i*10; *n =*n /10; /*found*/ *n=_3_; main() unsigned
3、long n=-1; while(n99999999|n0) printf(Please input(0n100000000): ); scanf(%ld,&n); fun(&n); printf(nThe result is: %ldn,n); 解题思路: 第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。 第二处:判断是否是奇数,所以应填:0。 第三处:最后通形参n来返回新数x,所以应填:x。 * 给定程序MODI1.C中函数 fun 的功能是:计算n!。 例如,给n输入5,则输出120.000000。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数
4、,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun ( int n ) double result = 1.0 ; /*found*/ if n = = 0 return 1.0 ; while( n 1 & n 170 ) /*found*/ result *= n- return result ; main ( ) int n ; printf(Input N:) ; scanf(%d, &n) ; printf(nn%d! =%lfnn, n, fun(n) ; 解题思路: 第一处:条件语句书写格式错误,应改为:if (n=0)。 第二处:语句
5、后缺少分号。 * 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得 调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串-1234,则 函数把它转换为整数值 -1234。函数fun中给出的语句仅供参考。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填 入你编写的若干语句。 给定源程序: #include #include long fun ( char *p) /* 以下代码仅供参考 */ int i, len, t; /* len为串长,t为正负标识 */ long x=0; len
6、=strlen(p); if(p0=-) t=-1; len-; p+; else t=1; /* 以下完成数字字符串转换为一个数字 */ return x*t; main() /* 主函数 */ char s6; long n; printf(Enter a string:n) ; gets(s); n = fun(s); printf(%ldn,n); NONO ( ); NONO ( ) /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s20 ; long n ; fp = fopen(c:testin.
7、dat,r) ; wf = fopen(c:testout.dat,w) ; for(i = 0 ; i 10 ; i+) fscanf(fp, %s, s) ; n = fun(s); fprintf(wf, %ldn, n) ; fclose(fp) ; fclose(wf) ; 解题思路: 本题是将一个数字字符串转换为一个整数。 参考答案: #include #include long fun ( char *p) /* 以下代码仅供参考 */ int i, len, t; /* len为串长,t为正负标识 */ long x=0; len=strlen(p); if(p0=-) t=-
8、1; len-; p+; else t=1; /* 以下完成数字字符串转换为一个数字 */ while(*p) x = x*10-48+(*p+); return x*t; main() /* 主函数 */ char s6; long n; printf(Enter a string:n) ; gets(s); n = fun(s); printf(%ldn,n); NONO ( ); NONO ( ) /* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s20 ; long n ; fp = fopen(c:te
9、stin.dat,r) ; wf = fopen(c:testout.dat,w) ; for(i = 0 ; i 10 ; i+) fscanf(fp, %s, s) ; n = fun(s); fprintf(wf, %ldn, n) ; fclose(fp) ; fclose(wf) ; 注意:由于NONO( )这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省略NONO( ) 第02套: 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本 文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除
10、, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s, int a, double f) /*found*/ _1_ fp; char ch; fp = fopen(file1.txt, w); fprintf(fp, %s %d %fn, s, a, f); fclose(fp); fp = fopen(file1.txt, r); printf(nThe result :nn); ch = fgetc(fp); /*found*/ while (!feof
11、(_2_) /*found*/ putchar(_3_); ch = fgetc(fp); putchar(n); fclose(fp); main() char a10=Hello!; int b=12345; double c= 98.76; fun(a,b,c); 解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:判断文件是否结束,所以应填:fp。 第三处:显示读出的字符,所以应填:ch。 * 给定程序MODI1.C中函数fun的功能是: 依次取出字符串中所有数字字符, 形 成新的字符串,
12、 并取代原字符串。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include void fun(char *s) int i,j; for(i=0,j=0; si!=0; i+) if(si=0 & si=9) /*found*/ sj=si; /*found*/ sj=0; main() char item80; printf(nEnter a string : );gets(item); printf(nnThe string is : %sn,item); fun(item); p
13、rintf(nnThe string of changing is : %sn,item ); 解题思路: 第一处: 要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j 来控制新字符串的位置,所以应改为:sj+=si;。 第二处: 置新字符串的结束符,所以应改为:sj=0;. * 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的 顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSH。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和
14、其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define M 3 #define N 4 void fun(char sN, char *b) int i,j,n=0; for(i=0; i N;i+) /* 请填写相应语句完成其功能 */ bn=0; main() char a100,wMN=W,W,W,W,S,S,S,S,H,H,H,H; int i,j; printf(The matrix:n); for(i=0; iM; i+) for(j=0;jN; j+)printf(%3c,wij); printf(n); fun(
15、w,a); printf(The A string:n);puts(a); printf(nn); NONO(); 解题思路: 本题是把二维数组中的字符数据按列存放到一个字符串中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的字符存放到一维数组(已计算出的位置)中。 参考答案: void fun(char sN, char *b) int i,j,n=0; for(i=0; i N;i+) /* 请填写相应语句完成其功能 */ for(j = 0 ; j M ; j+) bn = sji ; n = i * M + j + 1; bn=0; 第03套: 程序通过定义学生结构体变量
16、,存储了学生的学号、姓名和3门课的成绩。所 有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所 指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其它学 生的数据不变。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 5 typedef struct student long sno; char name10; float score3; STU; void fun(char
17、 *filename, STU n) FILE *fp; /*found*/ fp = fopen(_1_, rb+); /*found*/ fseek(_2_, -1L*sizeof(STU), SEEK_END); /*found*/ fwrite(&n, sizeof(STU), 1, _3_); fclose(fp); main() STU tN= 10001,MaChao, 91, 92, 77, 10002,CaoKai, 75, 60, 88, 10003,LiSi, 85, 70, 78, 10004,FangFang, 90, 82, 87, 10005,ZhangSan,
18、95, 80, 88; STU n=10006,ZhaoSi, 55, 70, 68, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), N, fp); fclose(fp); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), N, fp); fclose(fp); printf(nThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ss
19、j.sno, ssj.name); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); fun(student.dat, n); printf(nThe data after modifing :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i3; i+) pr
20、intf(%6.2f , ssj.scorei); printf(n); 解题思路: 本题是考察如何从文件中读出数据,再把结构中的数据写入文件中。 第一处:从指定的文件中读出数据,所以应填:filename。 第二处:读取文件fp的最后一条记录,所以应填:fp。 第三处:再把读出的记录,写入文件fp指定的位置上,所以应填:fp。 * 给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表, 并 为各结点数据域赋0到m-1的值。 请改正函数Creatlink中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构!
21、 给定源程序: #include #include typedef struct aa int data; struct aa *next; NODE; NODE *Creatlink(int n, int m) NODE *h=NULL, *p, *s; int i; /*found*/ p=(NODE )malloc(sizeof(NODE); h=p; p-next=NULL; for(i=1; idata=rand()%m; s-next=p-next; p-next=s; p=p-next; /*found*/ return p; outlink(NODE *h) NODE *p;
22、p=h-next; printf(nnTHE LIST :nn HEAD ); while(p) printf(-%d ,p-data); p=p-next; printf(n); main() NODE *head; head=Creatlink(8,22); outlink(head); 解题思路: 第一处: 指向刚分配的结构指针,所以应改为:p=(NODE *)malloc(sizeof(NODE); 第二处: 在动态分配内存的下一行语句是,使用临时结构指针变量h保存p指针的初始位置, 最后返回不能使用p,是因为p的位置已经发生了变化,所以应改为返回h。 * 请编写函数fun, 函数的功
23、能是:统计一行字符串中单词的个数,作为函数值返 回。一行字符串在主函数中输入, 规定所有单词由小写字母组成,单词之间由若干 个空格隔开, 一行的开始没有空格。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 80 int fun( char *s) main() char lineN; int num=0; printf(Enter a string :n); gets(line); num=fun( line ); printf(T
24、he number of word is : %dnn,num); NONO(); 解题思路: 本题是统计字符串中的单词数。 1. 利用while循环语句和指针变量,当字符为空格时,则单词数k加1。 2. 循环结束返回k。 参考答案: int fun( char *s) int k = 1 ; while(*s) if(*s = ) k+ ; s+ ; return k ; 第04套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所 有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指 的文件中读入学生数据,并按照学号从小到大排序后,再用二进
25、制方式把排序后的 学生数据输出到filename所指的文件中,覆盖原来的文件内容。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 5 typedef struct student long sno; char name10; float score3; STU; void fun(char *filename) FILE *fp; int i, j; STU sN, t; /*found*/ fp = fopen(fil
26、ename, _1_); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; iN-1; i+) for (j=i+1; jN; j+) /*found*/ if (si.sno _2_ sj.sno) t = si; si = sj; sj = t; fp = fopen(filename, wb); /*found*/ _3_(s, sizeof(STU), N, fp); /* 二进制输出 */ fclose(fp); main() STU tN= 10005,ZhangSan, 95, 80, 88, 10003,LiSi, 85,
27、70, 78, 10002,CaoKai, 75, 60, 88, 10004,FangFang, 90, 82, 87, 10001,MaChao, 91, 92, 77, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), 5, fp); fclose(fp); printf(nnThe original data :nn); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,tj.sno, tj.name); for (i=0; i
28、3; i+) printf(%6.2f , tj.scorei); printf(n); fun(student.dat); printf(nnThe data after sorting :nn); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), 5, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i。 第三处:把已排序的结构数据,重新写入文件,所以应填:fwrite。 * 给定程序
29、MODI1.C中函数fun的功能是: 在字符串的最前端加入n个*号, 形成 新串, 并且覆盖原串。 注意: 字符串的长度最长允许为79。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include void fun ( char s, int n ) char a80 , *p; int i; /*found*/ s=p; for(i=0; in; i+) ai=*; do ai=*p; i+; /*found*/ while(*p+) ai=0; strcpy(s,a)
30、; main() int n; char s80; printf(nEnter a string : ); gets(s); printf(nThe string %sn,s); printf(nEnter n ( number of * ) : ); scanf(%d,&n); fun(s,n); printf(nThe string after insert : %s n ,s); 解题思路: 第一处: 指针p应指向s,所以应改为:p=s;。 第二处: 死循环,当do while循环执行一次,临时变量p应该指向字符串的下一位置,所以应改为:while(*p+);。 * 请编写函数fun,函
31、数的功能是:统计各年龄段的人数。N个年龄通过调用随机 函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d0 中,把10至19岁年龄段的人数放在d1中,把20至29岁年龄段的人数放在d2中, 其余依此类推, 把100岁 (含100)以上年龄的人数都放在d10中。结果在主函数中输出。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 50 #define M 11 void fun( int *a, int *b) double rnd
32、() static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return(double)r/m); main() int ageN, i, dM; for(i=0; iN;i+)agei=(int)(115*rnd(); printf(The original data :n); for(i=0;iN;i+) printf(i+1)%10=0?%4dn:%4d,agei); printf(nn); fun( age, d); for(i=0;i10;i+)printf(%4d-%4d : %4dn,i*10,i*10+9,di); printf( Over 10
33、0 : %4dn,d10); NONO(d); 解题思路: 本题是统计各年龄段的人数。 1. 初始化各年龄段人数为0。 2. 使用for循环以及求出各年龄的十位数字作为存放人数的地址,如果大于值大于10,则存入d10中(大于110岁的人)。 参考答案: void fun( int *a, int *b) int i, j ; for(i = 0 ; i M ; i+) bi = 0 ; for(i = 0 ; i 10) bM - 1+ ; else bj+ ; double rnd() static t=29,c=217,m=1024,r=0; r=(r*t+c)%m; return(dou
34、ble)r/m); 第05套: 给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本 文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将 字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun(char *s, int a, double f) /*found*/ _1_ fp; char str100, str1
35、100, str2100; int a1; double f1; fp = fopen(file1.txt, w); fprintf(fp, %s %d %fn, s, a, f); /*found*/ _2_ ; fp = fopen(file1.txt, r); /*found*/ fscanf(_3_,%s%s%s, str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf(nThe result :nn%s %d %fn, str, a1, f1); main() char a10=Hello!; in
36、t b=12345; double c= 98.76; fun(a,b,c); 解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并转换成相应的整数、浮点数显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:关闭刚写入的文件,所以应填:fclose(fp)。 第三处:从文件中读出数据,所以应填:fp。 * 给定程序MODI1.C中函数fun的功能是: 对N名学生的学习成绩,按从高到低的 顺序找出前m(m10)名学生来, 并将这些学生数据存放在一个动态分配的连续存 储区中, 此存储区的首地址作为函数值返回。 请改正函数fun中指定部位的错误, 使它能
37、得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include #include #define N 10 typedef struct ss char num10; int s; STU; STU *fun(STU a, int m) STU bN, *t; int i,j,k; /*found*/ t=(STU *)calloc(sizeof(STU),m) for(i=0; iN; i+) bi=ai; for(k=0; km; k+) for(i=j=0; i bj.s) j=i; /*found*/ t(k
38、)=b(j); bj.s=0; return t; outresult(STU a, FILE *pf) int i; for(i=0; i10 ) printf(nGive the number of the students who have better score: ); scanf(%d,&m); pOrder=fun(a,m); printf(* THE RESULT *n); printf(The top :n); for(i=0; im; i+) printf( %s %dn,pOrderi.num , pOrderi.s); free(pOrder); 解题思路: 第一处:
39、语句最后缺少分号。 第二处: 应该使用方括号,而不是圆括号。 像此类,使用编译,即可发现。 * 请编写函数fun, 函数的功能是: 删去一维数组中所有相同的数, 使之只剩一 个。数组中的数已按由小到大的顺序排列,函数返回删除后数组中数据的个数。 例如, 一维数组中的数据是: 2 2 2 3 4 4 5 6 6 6 6 7 7 8 9 9 10 10 10。 删除后,数组中的内容应该是: 2 3 4 5 6 7 8 9 10。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include
40、 #define N 80 int fun(int a, int n) main() int aN=2,2,2,3,4,4,5,6,6,6,6,7,7,8,9,9,10,10,10,10,i,n=20; printf(The original data :n); for(i=0; in; i+)printf(%3d,ai); n=fun(a,n); printf(nnThe data after deleted :n); for(i=0;in;i+)printf(%3d,ai); printf(nn); NONO(); 解题思路: 本题是删除已排序过数组中的相同数。 1. 取出数组中的第1个数
41、存放在临时变量k中,再利用for循环来依次判断所有的数。 2. 如果取出的数和k相比,如果不相同,则仍存放在原数组中,其中存放的位置由j来控制, 接着把这个数重新存入k。如果相同,则取下一数。 参考答案: int fun(int a, int n) int i, j = 1, k = a0 ; for(i = 1 ; i n ; i+) if(k != ai) aj+=ai ; k = ai ; aj = 0 ; return j ; 第06套: 给定程序中,函数fun的功能是根据形参i的值返回某个函数的值。当调用正 确时, 程序输出: x1=5.000000, x2=3.000000, x1
42、*x1+x1*x2=40.000000 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include double f1(double x) return x*x; double f2(double x, double y) return x*y; /*found*/ _1_ fun(int i, double x, double y) if (i=1) /*found*/ return _2_(x); else /*found*/ return _3_(
43、x, y); main() double x1=5, x2=3, r; r = fun(1, x1, x2); r += fun(2, x1, x2); printf(nx1=%f, x2=%f, x1*x1+x1*x2=%fnn,x1, x2, r); 解题思路: 本题是根据给定的公式来计算函数的值。 第一处:程序中使用双精度double类型进行计算,所以函数的返回值类型也为double,所以应填:double。 第二处:当i等于1时,则返回f1函数的值,所以应填:f1。 第三处:如果i不等于1,则返回f2函数的值,所以应填:f2。 * 给定程序MODI1.C中函数fun的功能是: 比较两个
44、字符串,将长的那个字符串 的首地址作为函数值返回。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include /*found*/ char fun(char *s, char *t) int sl=0,tl=0; char *ss, *tt; ss=s; tt=t; while(*ss) sl+; /*found*/ (*ss)+; while(*tt) tl+; /*found*/ (*tt)+; if(tlsl) return t; else return s; main() cha
45、r a80,b80,*p,*q; int i; printf(nEnter a string : ); gets(a); printf(nEnter a string again : ); gets(b); printf(nThe longer is :nn%sn,fun(a,b); 解题思路: 第一处: 试题要求返回字符串的首地址,所以应改为:char *fun(char *s,char *t) 第二处: 取字符串指针ss的下一个位置,所以应改为:ss+;。 第三处:取字符串指针tt的下一个位置,所以应改为:tt+;。 * 请编写函数fun,函数的功能是: 移动字符串中的内容,移动的规则如下
46、: 把第 1到第m个字符, 平移到字符串的最后, 把第m+1到最后的字符移到字符串的前部。 例如, 字符串中原有的内容为: ABCDEFGHIJK, m的值为3, 则移动后, 字符串 中的内容应该是: DEFGHIJKABC。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 80 void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ int i; char t; t=w0; for(i=0;i
47、strlen(w)-1;i+) wi=wi+1; wstrlen(w)-1=t; void fun(char *w, int m) /* 可调用fun1函数左移字符 */ main() char aN= ABCDEFGHIJK; int m; printf(The original string:n);puts(a); printf(nnEnter m: );scanf(%d,&m); fun(a,m); printf(nThe string after moving:n);puts(a); printf(nn); NONO(); 解题思路: 本题是考察字符串的操作。 1. 由于函数fun1是
48、将字符串中字符循环左移一个位置,并通过实参w返回循环左移一个位置的字符串。 2. 利用循环for语句来操作多少个字符(m)需要循环左移。 参考答案: void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ int i; char t; t=w0; for(i=0;istrlen(w)-1;i+) wi=wi+1; wstrlen(w)-1=t; void fun(char *w, int m) /* 可调用fun1函数左移字符 */ int i; for(i = 0 ; i m ; i+) fun1(w); 第07套: 程序通过定义并赋初值的方式,利用结
49、构体变量存储了一名学生的信息。函 数fun的功能是输出这位学生的信息。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct int num; char name9; char sex; struct int year,month,day ; birthday; float score3; STU; /*found*/ void show(STU _1_) int i; printf(n%d %s %c %d-%d-%d
50、, tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i3; i+) /*found*/ printf(%5.1f, _2_); printf(n); main( ) STU std= 1,Zhanghua,M,1961,10,8,76.5,78.0,82.0 ; printf(nA student data:n); /*found*/ show(_3_); 解题思路: 本题是利用结构体变量存储了一名学生的信息。 第一处:tt变量在函数体fun已经使用,所以应填:tt
51、。 第二处:利用循环分别输出学生的成绩数据,所以应填:tt.scorei。 第三处:函数的调用,所以应填:std。 * 给定程序MODI1.C中函数 fun 的功能是:求出数组中最大数和次最大数,并 把最大数和a0中的数对调、次最大数和a1中的数对调。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 20 int fun ( int * a, int n ) int i, m, t, k ; for(i=0;i2;i+) /*found*/ m=0; for(k=i+1;ka
52、m) k=m; t=ai;ai=am;am=t; main( ) int x, bN=11,5,12,0,3,6,9,7,10,8, n=10, i; for ( i=0; in; i+ ) printf(%d , bi); printf(n); fun ( b, n ); for ( i=0; iam) m=k;。 * 请编写一个函数 unsigned fun ( unsigned w ),w 是一个大于10的无符 号整数,若 w 是 n (n 2)位的整数,函数求出w的低 n-1位的数作为函数值返 回。 例如:w 值为 5923,则函数返回 923; w 值为 923 则函数返回 23。
53、注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include unsigned fun ( unsigned w ) main( ) unsigned x; printf ( Enter a unsigned integer number : ); scanf ( %u, &x ); printf ( The original data is : %un, x ); if ( x 10000) w %= 10000 ; else if(w1000) w %= 1000 ; else
54、if(w100) w %= 100 ; else if(w10) w %=10 ; return w ; 第08套: 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、 姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include typedef struct int num; char name9; float score3; STU; void show(STU
55、 tt) int i; printf(%d %s : ,tt.num,tt.name); for(i=0; i3; i+) printf(%5.1f,tt.scorei); printf(n); /*found*/ void modify(_1_ *ss,float a) int i; for(i=0; i_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 num
56、ber : ); scanf(%f,&a); /*found*/ modify(_3_,a); printf(nA result of modifying :n); show(std); 解题思路: 本题是利用结构体存储学生记录并由实参ss返回。 第一处:实参ss是一个结构型指针变量,所以应填:STU。 第二处:该学生的各科成绩都乘以一个系数a,所以应填:scorei。 第三处:函数的调用,由于函数定义时使用的指针结构型变量,所以应填:&std。 * 给定程序MODI1.C中函数fun的功能是:求k!(k13),所求阶乘的值作为函 数值返回。例如:若k = 10,则应输出:3628800。 请
57、改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include 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!=%ldn, k, fun ( k ) ; 解题思路: 第一处:条件判断缺少圆括号。 第二处:判断相等的符号是=。 * 程序定义了NN的二维数组,并在主函数中自动赋值。请编写函数 fun(int aN, int
58、 n),函数的功能是:使数组左下三角元素中的值乘以n 。 例如:若n的值为3,a 数组中的值为 | 1 9 7 | | 3 9 7 | a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 6 9 8 | | 4 5 6 | | 12 15 18| 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 5 int fun ( int aN, int n ) main ( ) int aNN, n, i, j; printf(*
59、The array *n); for ( i =0; iN; i+ ) for ( j =0; j=3 ); printf(n = %4dn,n); fun ( a, n ); printf (* THE RESULT *n); for ( i =0; iN; i+ ) for ( j =0; jN; j+ ) printf( %4d, aij ); printf(n); NONO( ); 解题思路: 本题是利用两重循环给二维数组左下三角元素中的值乘以n。 参考答案: int fun ( int aN, int n ) int i, j; for(i = 0 ; i N ; i+) for(j
60、 = 0 ; j = i; j+) aij *= n ; 第09套: 给定程序中,函数fun的功能是将不带头节点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 6 typedef struct node int data; struct nod
61、e *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; idata=ai; q-next = NULL; if (h = N
62、ULL) 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(p!=NULL); printf(-Endn); main() NODE *head; int aN= 0, 10, 4, 2, 8, 6 ; head=creatlist(a); printf(nThe original l
63、ist: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所指字符串中的字母转换为按字母
64、序列的后续字母(但Z转换为A, z转换为a),其它字符不变。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include void fun (char *s) /*found*/ while(*s!=) if(*s=A & *s=a & *s=z) if(*s=Z) *s=A; else if(*s=z) *s=a; else *s += 1; /*found*/ (*s)+; main() char s80; printf(n Enter a string with l
65、ength 80. :nn ); gets(s); printf(n The string : nn ); puts(s); fun ( s ); printf (nn The Cords :nn ); puts(s); 解题思路: 第一处: 使用while循环来判断字符串指针s是否结束,所以应改为:while(*s)。 第二处: 取字符串指针s的下一个位置,所以应改为:s+;。 * 请编写函数fun, 函数的功能是: 移动一维数组中的内容; 若数组中有n个整 数, 要求把下标从0到p(含p,p小于等于n-1)的数组元素平移到数组的最后。 例如, 一维数组中的原始内容为: 1,2,3,4,5,
66、6,7,8,9,10; p的值为3。移动 后, 一维数组中的内容应为: 5,6,7,8,9,10,1,2,3,4。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 80 void fun(int *w, int p, int n) main() int aN=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; in; i+)pri
67、ntf(%3d,ai); printf(nnEnter p: );scanf(%d,&p); fun(a,p,n); printf(nThe data after moving:n); for(i=0; in; i+)printf(%3d,ai); printf(nn); NONO(); 解题思路: 本题是考察一维数组的操作。 1. 定义一维数组中间变量b,把n值后面数组中的内容存入b中。 2. 再把m前的数组中的内容存入b中。 3. 最后把数组b的内容依次存放到w中。 参考答案: void fun(int *w, int p, int n) int i, j = 0, bN ; for(i
68、= p + 1 ; i n ; i+) bj+ = wi ; for(i = 0 ; i = p ; i+) bj+ = wi ; for(i = 0 ; i n ; i+) wi= bi ; 第10套: 给定程序中,函数fun的功能是:判定形参a所指的NN(规定N为奇数)的矩 阵是否是幻方,若是,函数返回值为1; 不是,函数返回值为0。幻方的判定 条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。 例如,以下33的矩阵就是一个幻方: 4 9 2 3 5 7 8 1 6 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLA
69、NK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 3 int fun(int (*a)N) int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; iN; i+) j=N-i-1; m1+=aii; m2+=aij; if(m1!=m2) return 0; for(i=0; iN; i+) /*found*/ row=colum= _1_; for(j=0; jN; j+) row+=aij; colum+=aji; /*found*/ if( (row!=colum) _2_ (row!=m1) ) r
70、eturn 0; /*found*/ return _3_; main() int xNN,i,j; printf(Enter number for array:n); for(i=0; iN; i+) for(j=0; jN; j+) scanf(%d,&xij); printf(Array:n); for(i=0; iN; i+) for(j=0; jN; j+) printf(%3d,xij); printf(n); if(fun(x) printf(The Array is a magic square.n); else printf(The Array isnt a magic sq
71、uare.n); 解题思路: 第一处:行列变量row和colum的值初始化为0。 第二处:两个条件只要有一个不满足就返回0,所以应填:|。 第三处:如果矩阵是“幻方”,则返回1。 * 给定程序MODI1.C中fun函数的功能是: 根据整型形参m,计算如下公式的值。 1 1 1 t = 1 - - - - - - - 2 3 m 例如,若主函数中输入5,则应输出 -0.283333。 请改正函数fun中的错误或在横线处填上适当的内容并把横线删除, 使它能 计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fu
72、n( 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( nnThe result is %lfn, fun( m ) ); 解题思路: 第一处:在除法运算中,如果除数和被除数都是整数,所么所除结果也是整数,因此应改为t-=1./i。 第二处:应是返回公式的值,函数中公式的值是存放在临时变量t中,所
73、以应填return t;。 * 请编写一个函数,函数的功能是删除字符串中的所有空格。 例如, 主函数中输入asd af aa z67, 则输出为 asdafaaz67。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include int fun(char *str) main() char str81; int n; printf(Input a string:) ; gets(str); puts(str); fun(str); printf(* str: %sn,
74、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 != ) stri+ = *p
75、; p+ ; stri = 0 ; 第11套: 给定程序中,函数fun的功能是将带头结点的单向链表逆置。即若原链表中从 头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次为: 10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 typedef struct node int data; struct node *next; NODE; void fun(N
76、ODE *h) NODE *p, *q, *r; /*found*/ p = h-_1_; /*found*/ if (p=_2_) return; q = p-next; p-next = NULL; while (q) r = q-next; q-next = p; /*found*/ p = q; q = _3_; h-next = p; NODE *creatlist(int a) NODE *h,*p,*q; int i; h = (NODE *)malloc(sizeof(NODE); h-next = NULL; for(i=0; idata=ai; q-next = NULL;
77、 if (h-next = NULL) h-next = p = q; else p-next = q; p = q; return h; void outlist(NODE *h) NODE *p; p = h-next; if (p=NULL) printf(The list is NULL!n); else printf(nHead ); do printf(-%d, p-data); p=p-next; while(p!=NULL); printf(-Endn); main() NODE *head; int aN=2,4,6,8,10; head=creatlist(a); prin
78、tf(nThe original list:n); outlist(head); fun(head); printf(nThe list after inverting :n); outlist(head); 解题思路: 本题是考察使用链表方法,对链表的结点数据进行降序排列。 第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p 的初始位置。所以应填写:h-next。 第二处:判断p指针是否结束,所以应填写:0。 第三处:q指向原q的next指针,所以应填:r。 * 给定程序MODI1.C中函数fun的功能是: 计算s所指字符串中含有t所指字符串 的数目, 并
79、作为函数值返回。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include #define N 80 int fun(char *s, char *t) int n; char *p , *r; n=0; while ( *s ) p=s; /*found*/ r=p; while(*r) if(*r=*p) r+; p+; else break; /*found*/ if(*r= 0) n+; s+; return n; main() char aN,bN; int
80、m; printf(nPlease enter string a : ); gets(a); printf(nPlease enter substring b : ); gets( b ); m=fun(a, b); printf(nThe result is : m = %dn,m); 解题思路: 第一处: 程序中子串是由变量t来实现的,再根据下面while循环体中语句可知,所以应改为:r=t;。 第二处: 是判断相等的条件,所以应改为:if(*r=0)。 * 请编写函数fun, 函数的功能是: 将放在字符串数组中的M个字符串(每串的长 度不超过N), 按顺序合并组成一个新的字符串。函数fu
81、n中给出的语句仅供参考。 例如, 字符串数组中的M个字符串为 AAAA BBBBBBB CC 则合并后的字符串的内容应是: AAAABBBBBBBCC。 提示:strcat(a,b)的功能是将字符串b复制到字符串a的串尾上,成为一个新 串。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define M 3 #define N 20 void fun(char aMN, char *b) /* 以下代码仅供参考 */ int i; *b=0; main() char
82、wMN=AAAA,BBBBBBB,CC, a100; int i ; printf(The string:n); for(i=0; iM; i+)puts(wi); printf(n); fun(w,a); printf(The A string:n); printf(%s,a);printf(nn); NONO(); 解题思路: 本题是考察字符串的操作。 使用for循环以及C语言函数strcat依次连接起来。 参考答案: #include #define M 3 #define N 20 void fun(char aMN, char *b) /* 以下代码仅供参考 */ int i; *b
83、=0; for(i = 0 ; i M ; i+) strcat(b, ai) ; 第12套: 给定程序中,函数fun的功能是将不带头结点的单向链表逆置。即若原链表中 从头至尾结点数据域依次为:2、4、6、8、10,逆置后,从头至尾结点数据域依次 为:10、8、6、4、2。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 typedef struct node int data; struct nod
84、e *next; NODE; /*found*/ _1_ * fun(NODE *h) NODE *p, *q, *r; p = h; if (p = NULL) return NULL; q = p-next; p-next = NULL; while (q) /*found*/ r = q-_2_; q-next = p; p = q; /*found*/ q = _3_ ; return p; NODE *creatlist(int a) NODE *h,*p,*q; int i; h=NULL; for(i=0; idata=ai; q-next = NULL; if (h = NUL
85、L) 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(p!=NULL); printf(-Endn); main() NODE *head; int aN=2,4,6,8,10; head=creatlist(a); printf(nThe original list:n); out
86、list(head); head=fun(head); printf(nThe list after inverting :n); outlist(head); 解题思路: 本题是考察使用链表方法,对链表的结点数据进行降序排列,最后通过函数进行返回。 第一处:由于链表中的所有结果要求通过函数进行返回,所以应填:NODE *。 第二处:中间变量r用来保存q的next指针,所以应填:next。 第三处:q指向原q的next指针,所以应填:r。 * 给定程序MODI1.C中函数fun的功能是: 将s所指字符串中位于奇数位置的字符 或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中
87、)。 例如, 字符串中的数据为: AABBCCDDEEFF, 则输出应当是:ABBCDDEFF。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include #define N 80 void fun(char *s, char t) int i, j=0; for(i=0; istrlen(s); i+) /*found*/ if(i%2 & si%2=0) tj+=si; /*found*/ ti=0; main() char sN, tN; printf(nPlea
88、se enter string s : ); gets(s); fun(s, t); printf(nThe result is : %sn,t); 解题思路: 第一处: 根据试题分析,两个条件之间应该是“或”的关系,而不是“与”的关系,所以应改为:if(i%2 | si%2=0)。 第二处: 当字符串处理结束后,应该补上字符串的结束符,那么字符串t的位置是由i来控制,所以应改为:tj=0;。 * 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据, 按列的顺序 依次放到一维数组中。函数fun中给出的语句仅供参考。 例如, 二维数组中的数据为: 33 33 33 33 44 44
89、 44 44 55 55 55 55 则一维数组中的内容应是: 33 44 55 33 44 55 33 44 55 33 44 55。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int s10, int b, int *n, int mm, int nn) /* 以下代码仅供参考 */ int i,j,np=0; /* np用作b数组下标 */ *n=np; main() int w1010=33,33,33,33,44,44,44,44,55,
90、55,55,55,i,j; int a100=0, n=0; printf(The matrix:n); for(i=0; i3; i+) for(j=0;j4; j+)printf(%3d,wij); printf(n); fun(w,a,&n,3,4); printf(The A array:n); for(i=0;in;i+)printf(%3d,ai);printf(nn); NONO(); 解题思路: 本题是把二维数组中的数据按行存放到一维数组中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的数据存放到一维数组(已计算出的位置)中。 参考答案: void fun(int
91、 (*s)10, int *b, int *n, int mm, int nn) /* 以下代码仅供参考 */ int i,j,np=0; /* np用作b数组下标 */ for(i = 0 ; i nn ; i+) for(j = 0 ; j mm ; j+) bnp = sji ; np = i * mm + j + 1; *n=np; 第13套: 给定程序中,函数fun的功能是将带头节点的单向链表结点数据域中的数据从 小到大排序。即若原链表结点数据域从头至尾的数据为:10、4、2、8、6,排序 后链表结点数据域从头至尾的数据为:2、4、6、8、10。 请在程序的下划线处填入正确的内容并把
92、下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 6 typedef struct node int data; struct node *next; NODE; void fun(NODE *h) NODE *p, *q; int t; /*found*/ p = _1_ ; while (p) /*found*/ q = _2_ ; while (q) /*found*/ if (p-data _3_ q-data) t = p-data
93、; p-data = q-data; q-data = t; q = q-next; p = p-next; NODE *creatlist(int a) NODE *h,*p,*q; int i; h = (NODE *)malloc(sizeof(NODE); h-next = NULL; for(i=0; idata=ai; q-next = NULL; if (h-next = NULL) h-next = p = q; else p-next = q; p = q; return h; void outlist(NODE *h) NODE *p; p = h-next; if (p=
94、NULL) printf(The list is NULL!n); else printf(nHead ); do printf(-%d, p-data); p=p-next; while(p!=NULL); printf(-Endn); main() NODE *head; int aN= 0, 10, 4, 2, 8, 6 ; head=creatlist(a); printf(nThe original list:n); outlist(head); fun(head); printf(nThe list after sorting :n); outlist(head); 解题思路: 本
95、题是考察使用链表方法,对链表的结点数据进行升序排列。 第一处:使用结构指针p,来控制链表的结束,p必须指向h结构指针的next指针,来定位p 的初始位置。所以应填写:h-next。 第二处:使用while循环,对链表中结点的数据进行排序,q必须指向p结构指针的next指针。所以应填写:p-next。 第三处:如果当前结点中的数据大于(大于等于)循环中的结点数据,那么进行交换,所以应填写:(或=)。 * 给定程序MODI1.C是建立一个带头结点的单向链表, 并用随机函数为各结点数 据域赋值。函数fun的作用是求出单向链表结点(不包括头结点)数据域中的最大值, 并且作为函数值返回。 请改正函数fu
96、n中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include typedef struct aa int data; struct aa *next; NODE; fun ( NODE *h ) int max=-1; NODE *p; /*found*/ p=h ; while(p) if(p-datamax ) max=p-data; /*found*/ p=h-next ; return max; outresult(int s, FILE *pf) fprintf(pf,nThe
97、 max in link : %dn,s); NODE *creatlink(int n, int m) NODE *h, *p, *s, *q; int i, x; h=p=(NODE *)malloc(sizeof(NODE);h-data=9999; for(i=1; idata=rand()%m; s-next=p-next; p-next=s; p=p-next; p-next=NULL; return h; outlink(NODE *h, FILE *pf) NODE *p; p=h-next; fprintf(pf,nTHE LIST :nn HEAD ); while(p)
98、fprintf(pf,-%d ,p-data); p=p-next; fprintf(pf,n); main() NODE *head; int m; head=creatlink(12, 100); outlink(head , stdout); m=fun(head); printf(nTHE RESULT :n); outresult(m, stdout); 解题思路: 程序中是使用while循环语句和结合结构指针p来找到数据域中的最大值。 第一处: p指向形参结构指针h的next指针,所以应改为:p=h-next;。 第二处: p指向自己的下一个结点,所以应改为:p=p-next, *
99、 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的数据,按行的顺序 依次放到一维数组中, 一维数组中数据的个数存放在形参n所指的存储单元中。 例如, 二维数组中的数据为: 33 33 33 33 44 44 44 44 55 55 55 55 则一维数组中的内容应是: 33 33 33 33 44 44 44 44 55 55 55 55。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int (*s)10, int *b, int *n,
100、 int mm, int nn) main() int w1010 = 33,33,33,33,44,44,44,44,55,55,55,55,i,j ; int a100 = 0, n = 0 ; printf(The matrix:n) ; for(i = 0 ; i 3 ; i+) for(j = 0 ; j 4 ; j+) printf(%3d,wij) ; printf(n) ; fun(w, a, &n, 3, 4) ; printf(The A array:n) ; for(i = 0 ; i n ; i+) printf(%3d,ai);printf(nn) ; NONO()
101、; 解题思路: 本题是把二维数组中的数据按行存放到一维数组中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的数据存放到一维数组(已计算出的位置)中。 参考答案: void fun(int (*s)10, int *b, int *n, int mm, int nn) int i, j, k ; for(i = 0 ; i mm ; i+) for(j = 0 ; j nn ; j+) k = i * nn + j ; bk = sij ; *n = mm * nn ; main() int w1010 = 33,33,33,33,44,44,44,44,55,55,55,55,i
102、,j ; int a100 = 0, n = 0 ; printf(The matrix:n) ; for(i = 0 ; i 3 ; i+) for(j = 0 ; j 4 ; j+) printf(%3d,wij) ; printf(n) ; fun(w, a, &n, 3, 4) ; printf(The A array:n) ; for(i = 0 ; i n ; i+) printf(%3d,ai);printf(nn) ; NONO() ; 第14套: 给定程序中, 函数fun的功能是用函数指针指向要调用的函数,并进行调用。 规定在_2_处使f指向函数f1,在_3_处使f指向函数f
103、2。当调用正确时,程序 输出: x1=5.000000, x2=3.000000, x1*x1+x1*x2=40.000000 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include double f1(double x) return x*x; double f2(double x, double y) return x*y; double fun(double a, double b) /*found*/ _1_ (*f)(); double r
104、1, r2; /*found*/ f = _2_ ; /* point fountion f1 */ r1 = f(a); /*found*/ f = _3_ ; /* point fountion f2 */ r2 = (*f)(a, b); return r1 + r2; main() double x1=5, x2=3, r; r = fun(x1, x2); printf(nx1=%f, x2=%f, x1*x1+x1*x2=%fn,x1, x2, r); 解题思路: 本题主要是考察用函数指针指向要调用的函数。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 第一处:定义函数
105、指针的类型,所以应填:double。 第二处:使f指向函数f1,所以应填:f1。 第三处:使f指向函数f2,所以应填:f2。 * 给定程序MODI1.C是建立一个带头结点的单向链表,并用随机函数为各结点赋 值。函数fun的功能是将单向链表结点 (不包括头结点)数据域为偶数的值累加起来, 并且作为函数值返回。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include #include typedef struct aa int data; struct aa *next; NODE; in
106、t fun(NODE *h) int sum = 0 ; NODE *p; /*found*/ p=h; while(p) if(p-data%2=0) sum +=p-data; /*found*/ p=h-next; return sum; NODE *creatlink(int n) NODE *h, *p, *s, *q; int i, x; h=p=(NODE *)malloc(sizeof(NODE); for(i=1; idata=rand()%16; s-next=p-next; p-next=s; p=p-next; p-next=NULL; return h; outlin
107、k(NODE *h, FILE *pf) NODE *p; p = h-next; fprintf(pf ,nnTHE LIST :nn HEAD ); while(p) fprintf(pf ,-%d ,p-data ); p=p-next; fprintf (pf,n); outresult(int s, FILE *pf) fprintf(pf,nThe sum of even numbers : %dn,s); main() NODE *head; int even; head=creatlink(12); head-data=9000; outlink(head , stdout);
108、 even=fun(head); printf(nThe result :n); outresult(even, stdout); 解题思路: 本题是考察如何使用单向链表把数据域的值按条件进行累加。 第一处:试题要求不计算头结点,所以应改为:p=h-next; 第二处:指向p的下一个结点来实现循环,所以应改为:p=p-next; * 请编写函数fun, 函数的功能是: 判断字符串是否为回文?若是, 函数返回1, 主函数中输出: YES, 否则返回0, 主函数中输出NO。回文是指顺读和倒读都一样 的字符串。 例如, 字符串LEVEL是回文, 而字符串123312就不是回文。 注意:部分源程序在文
109、件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 80 int fun(char *str) main() char sN ; printf(Enter a string: ) ; gets(s) ; printf(nn) ; puts(s) ; if(fun(s) printf( YESn) ; else printf( NOn) ; NONO() ; 解题思路: 本题是考察如何判断一个字符串是回文字符串,回文是指顺读和倒读都一样的字符串。可以利用for循环语句来判断,如果
110、前后不一致,则不是回文字符串。 参考答案: int fun(char *str) int i, j = strlen(str) ; for(i = 0 ; i j / 2 ; i+) if(stri != strj - i - 1) return 0 ; return 1 ; main() char sN ; printf(Enter a string: ) ; gets(s) ; printf(nn) ; puts(s) ; if(fun(s) printf( YESn) ; else printf( NOn) ; NONO() ; 第15套: 程序通过定义学生结构体变量,存储了学生的学号、
111、姓名和3门课的成绩。所 有学生数据均以二进制方式输出到student.dat文件中。函数fun的功能是从指定 文件中找出指定学号的学生数据,读入此学生数据,对该生的分数进行修改,使 每门课的分数加3分,修改后重写文件中该学生的数据,即用该学生的新数据覆盖 原数据,其它学生数据不变;若找不到,则什么都不做。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 5 typedef struct student long sno;
112、char name10; float score3; STU; void fun(char *filename, long sno) FILE *fp; STU n; int i; fp = fopen(filename,rb+); /*found*/ while (!feof(_1_) fread(&n, sizeof(STU), 1, fp); /*found*/ if (n.sno_2_sno) break; if (!feof(fp) for (i=0; i3; i+) n.scorei += 3; /*found*/ fseek(_3_, -1L*sizeof(STU), SEEK_
113、CUR); fwrite(&n, sizeof(STU), 1, fp); fclose(fp); main() STU tN= 10001,MaChao, 91, 92, 77, 10002,CaoKai, 75, 60, 88, 10003,LiSi, 85, 70, 78, 10004,FangFang, 90, 82, 87, 10005,ZhangSan, 95, 80, 88, ssN; int i,j; FILE *fp; fp = fopen(student.dat, wb); fwrite(t, sizeof(STU), N, fp); fclose(fp); printf(
114、nThe original data :n); fp = fopen(student.dat, rb); fread(ss, sizeof(STU), N, fp); fclose(fp); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); fun(student.dat, 10003); fp = fopen(student.dat, rb); fread(ss, sizeof(ST
115、U), N, fp); fclose(fp); printf(nThe data after modifing :n); for (j=0; jN; j+) printf(nNo: %ld Name: %-8s Scores: ,ssj.sno, ssj.name); for (i=0; i3; i+) printf(%6.2f , ssj.scorei); printf(n); 解题思路: 本题是考察如何从指定文件中找出指定学号的学生数据,并进行适当的修改,修改后重新写回到文件中该学生的数据上,即用该学生的新数据覆盖原数据。 第一处:判断读文件是否结束,所以应填:fp。 第二处:从读出的数据
116、中判断是否是指定的学号,其中学号是由形参sno来传递的,所以应填:=。 第三处:从已打开文件fp中重新定位当前读出的结构位置,所以应填:fp。 * 给定程序MODI1.C中函数fun的功能是:利用插入排序法对字符串中的字符按 从小到大的顺序进行排序。插入法的基本算法是:先对字符串中的头两个元素进 行排序。然后把第三个字符插入到前两个字符中,插入后前三个字符依然有序; 再把第四个字符插入到前三个字符中,。待排序的字符串已在主函数中赋予。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #include
117、#define N 80 void insert(char *aa) int i,j,n; char ch; /*found*/ n=strlen aa ; for( i=1; i=0) & ( chaaj ) aaj+1=aaj; j-; aaj+1=ch; main( ) char aN=QWERTYUIOPASDFGHJKLMNBVCXZ; int i ; printf (The original string : %sn, a); insert(a) ; printf(The string after sorting : %snn,a ); 解题思路: 第一处: 函数应该使用圆括号,所
118、以应改为:n=strlen(aa) ;。 第二处: 变量c没有定义,但后面使用的是ch变量,所以应改为:ch=aai;。 *N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:找出学生的最高分,由函数值返回。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 8 struct slist double s; struct slist *next; ; typedef struc
119、t slist STREC; double fun( STREC *h ) STREC * creat( double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p=q; p-next=0; return h; outlist( STREC *h) STREC *p; p=h-next; printf(head); do printf(-%2.0f,p-s);p=p-next; while(p!=0); printf(nn); main() do
120、uble sN=85,76,69,85,91,72,64,87, max; STREC *h; h=creat( s ); outlist(h); max=fun( h ); printf(max=%6.1fn,max); NONO(); 解题思路: 本题是考察如何从链表中求出学生的最高分。 我们给出的程序是利用while循环语句以及临时结构指针p变量来求出最高分。 1. 将链表中的第1个值赋给变量max。 2. 将链表指针p的初始位置指向h的next指针(h-next)。 3. 判断p指针是否结束,如果结束,则返回max,否则做下一步。 4. 判断max是否小于p-s,如果小于,则max取p
121、-s,否则不替换。 5. 取p-next赋值给p(取下一结点位置给p),转3继续。 参考答案: double fun( STREC *h ) double max=h-s; STREC *p; p=h-next; while(p) if(p-smax ) max=p-s; p=p-next; return max; STREC * creat( double *s) STREC *h,*p,*q; int i=0; h=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p=q; p-next=0; return h
122、; outlist( STREC *h) STREC *p; p=h-next; printf(head); do printf(-%2.0f,p-s);p=p-next; while(p!=0); printf(nn); 第16套: 给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的 长度,将其余字符串右边用字符*补齐,使其与最长的字符串等长。ss所指字符串 数组中共有M个字符串,且串长N。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序:
123、 #include #include #define M 5 #define N 20 void fun(char (*ss)N) int i, j, n, len=0; for(i=0; in)n=len; for(i=0; iM; i+) /*found*/ n=strlen(_1_); for(j=0; jlen-n; j+) /*found*/ ssi _2_=*; /*found*/ ssin+j+ _3_=0; main() char ssMN=shanghai,guangzhou,beijing,tianjing,cchongqing; int i; printf(The ori
124、ginal strings are :n); for(i=0; iM; i+) printf(%sn,ssi); printf(n); fun(ss); printf(The result is :n); for(i=0; iM; i+) printf(%sn,ssi); 解题思路: 第一处:利用for循环语句取当前字符串的长度,所以应填:ssi。 第二处:在字符串的右边填字符*,其开始位置是n+j,其中n是该字符串本身的长度,j是循环控制变量,所以应填:n+j。 第三处:字符串处理结束应置字符串结束符,其位置是n+j+1,所以应填:1。 * 给定程序MODI1.C中 fun 函数的功能是:将
125、p所指字符串中每个单词的最后一 个字母改成大写。(这里的“单词”是指由空格隔开的字符串)。 例如, 若输入 I am a student to take the examination., 则应输出 I aM A studenT tO takE thE examination.。 请修改程序中的错误之处, 使它能得出正确的结果。 注意: 不要改动 main 函数, 不得删行, 也不得更改程序的结构! 给定源程序: #include #include void fun( char *p ) int k = 0; for( ; *p; p+ ) if( k ) /*found*/ if( p =
126、) k = 0; /*found*/ * (p-1) = toupper( *( p - 1 ) ) else k = 1; main() char chrstr64; int d ; printf( nPlease enter an English sentence within 63 letters: ); gets(chrstr); d=strlen(chrstr) ; chrstrd = ; chrstrd+1 = 0 ; printf(nnBefore changing:n %s, chrstr); fun(chrstr); printf(nAfter changing:n %s,
127、chrstr); 解题思路: 第一处:关键字int错写成INT。 第二处:该行括号没有配对,所以只要加上一个右括号即可。 * 请编写函数fun, 对长度为7个字符的字符串, 除首、尾字符外,将其余5个字 符按ASCII码降序排列。 例如,原来的字符串为 CEAedca,排序后输出为 CedcEAa 。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #include int fun(char *s,int num) main() char s10; p
128、rintf(输入7个字符的字符串:); gets(s); fun(s,7); printf(n%s,s); NONO(); 解题思路: 本题是考察考生如何对字符串中的字符按降序进行排序。给出的程序是使用双重for循环以及冒泡法进行排序的,结果仍存放在原先的字符串上。 参考答案: int fun(char *s,int num) char ch ; int i, j ; for(i = 1 ; i 6 ; i+) for(j = i + 1 ; j 6 ; j+) if(*(s + i) *(s + j) ch = *(s + j) ; *(s + j) = *(s +i) ; *(s + i)
129、 = ch ; 第17套: 程序通过定义学生结构体数组,存储了若干名学生的学号、姓名和3门课的成 绩。函数fun的功能是将存放学生数据的结构体数组,按照姓名的字典序(从小到 大)排序。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include struct student long sno; char name10; float score3; ; void fun(struct student a, int n) /*found*/
130、 _1_ t; int i, j; /*found*/ for (i=0; i_2_; i+) for (j=i+1; j 0) t = ai; ai = aj; aj = t; main() struct student s4=10001,ZhangSan, 95, 80, 88,10002,LiSi, 85, 70, 78, 10003,CaoKai, 75, 60, 88, 10004,FangFang, 90, 82, 87; int i, j; printf(nnThe original data :nn); for (j=0; j4; j+) printf(nNo: %ld Nam
131、e: %-8s Scores: ,sj.sno, sj.name); for (i=0; i3; i+) printf(%6.2f , sj.scorei); printf(n); fun(s, 4); printf(nnThe data after sorting :nn); for (j=0; j4; j+) printf(nNo: %ld Name: %-8s Scores: ,sj.sno, sj.name); for (i=0; i3; i+) printf(%6.2f , sj.scorei); printf(n); 解题思路: 本题是对结构体数组中的姓名按升序进行排列。 第一处:
132、t是一个临时变量,主要是存放学生数据的结构变量,所以应填:struct student。 第二处:利用两重for循环进行排序操作,排序的终止条件应该是总人数减1,所以应填: n-1。 第三处:对姓名进行比较大小,所以应填:ai.name,aj.name。 * 给定程序MODI1.C中函数fun的功能是:在p所指字符串中找出ASCII码值最大 的字符,将其放在第一个位置上;并将该字符前的原字符向后顺序移动。 例如,调用fun函数之前给字符串输入:ABCDeFGH, 调用后字符串中的内容为:eABCDFGH。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也
133、不得更改程序的结构。 给定源程序: #include fun( char *p ) char max,*q; int i=0; max=pi; while( pi!=0 ) if( maxp ) *q=*(q-1); q-; p0=max; main() char str80; printf(Enter a string: ); gets(str); printf(nThe original string: ); puts(str); fun(str); printf(nThe string after moving: ); puts(str); printf(nn); 解题思路: 第一处:在
134、语句后缺少分号,所应改为:q=p+i;。 第二处:保留字while写错,所应改为:while(qp)。 * 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组 s中, 请编写函数fun,它的功能是:把指定分数范围内的学生数据放在b所指的数 组中,分数范围内的学生人数由函数值返回。 例如,输入的分数是60 69, 则应当把分数在60到69的学生数据进行输出, 包含60分和69分的学生数据。主函数中将把60放在low中,把69放在heigh中。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干
135、语句。 给定源程序: #include #define N 16 typedef struct char num10; int s; STREC; int fun( STREC *a,STREC *b,int l, int h ) main() STREC sN=GA005,85,GA003,76,GA002,69,GA004,85, GA001,96,GA007,72,GA008,64,GA006,87, GA015,85,GA013,94,GA012,64,GA014,91, GA011,90,GA017,64,GA018,64,GA016,72; STREC hN,tt;FILE *ou
136、t ; int i,j,n,low,heigh,t; printf(Enter 2 integer number low & heigh : ); scanf(%d%d, &low,&heigh); if ( heigh low ) t=heigh;heigh=low;low=t; n=fun( s,h,low,heigh ); printf(The students data between %d-%d :n,low,heigh); for(i=0;in; i+) printf(%s %4dn,hi.num,hi.s); printf(n); out = fopen(c:testout.da
137、t,w) ; n=fun( s,h,80,98 ); fprintf(out,%dn,n); for(i=0;in-1;i+) for(j=i+1;jhj.s) tt=hi ;hi=hj; hj=tt; for(i=0;in; i+) fprintf(out,%4dn,hi.s); fprintf(out,n); fclose(out); 解题思路: 本题是把符合条件的学生记录存入到另一个结构体,最后通过主函数进行输出。 1. 符合条件的学生人数存在变量j(初始值为0)中,最后返回其值。 2. 利用for循环语句,依次判断是否符合条件,如果符合,则存入另一个记录体中,人数j 加1。 参考答案:
138、 int fun( STREC *a,STREC *b,int l, int h ) int i,j = 0 ; for(i = 0 ; i = l & ai.s = h) bj+ = ai ; return j ; 第18套: 给定程序中,函数fun的功能是:将形参s所指字符串中的所有字母字符顺序 前移,其他字符顺序后移,处理后新字符串的首地址作为函数值返回。 例如,s所指字符串为:asd123fgh543df,处理后新字符串为:asdfghdf123543。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得
139、增行或删行,也不得更改程序的结构! 给定源程序: #include #include #include char *fun(char *s) int i, j, k, n; char *p, *t; n=strlen(s)+1; t=(char*)malloc(n*sizeof(char); p=(char*)malloc(n*sizeof(char); j=0; k=0; for(i=0; i=a)&(si=A)&(si=Z) /*found*/ tj=_1_; j+; else pk=si; k+; /*found*/ for(i=0; i_2_; i+) tj+i=pi; /*found
140、*/ tj+k= _3_; return t; main() char s80; printf(Please input: ); scanf(%s,s); printf(nThe result is: %sn,fun(s); 解题思路: 第一处:函数中申请了两个内存空间,其p是存放字母字符串,t是存放非字母字符串,根据条件可知,p依次存放字母字符串,其位置由j来控制,所以应填:si。 第二处:利用for循环再把t中的内容依次追加到p中,其中t的长度为k,所以应填:k。 第三处:字符串处理好后必须添加字符串结束符,所以应填:0。 * 给定程序MODI1.C中函数 fun 的功能是:将s所指字符串
141、中最后一次出现的与 t1所指字符串相同的子串替换成t2所指字符串,所形成的新串放在w所指的数组中。 在此处,要求t1和t2所指字符串的长度相同。 例如,当s所指字符串中的内容为:abcdabfabc,t1所指子串中的内容为: ab,t2所指子串中的内容为:99时, 结果,在w所指的数组中的内容应为: abcdabf99c。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include int fun (char *s, char *t1, char *t2 , char *w) int i; c
142、har *p , *r, *a; strcpy( w, s ); /*found*/ while ( w ) p = w; r = t1; while ( *r ) /*found*/ IF ( *r = *p ) r+; p+; else break; if ( *r = 0 ) a = w; w+; r = t2; while ( *r ) *a = *r; a+; r+; main() char s100, t1100, t2100, w100; printf(nPlease enter string S:); scanf(%s, s); printf(nPlease enter sub
143、string t1:); scanf(%s, t1); printf(nPlease enter substring t2:); scanf(%s, t2); if ( strlen(t1)=strlen(t2) ) fun( s, t1, t2, w); printf(nThe result is : %sn, w); else printf(nError : strlen(t1) != strlen(t2)n); 解题思路: 第一处:判断w指针所指的值是否是结束符,应改为:while(*w)。 第二处:if错写成If。 * 函数fun的功能是:将s所指字符串中ASCII值为奇数的字符删除,
144、串中剩余字 符形成一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:ABCDEFG12345,其中字符A的ASCII码值 为奇数、字符1的ASCII码值也为奇数、 都应当删除,其它依此类推。最后 t所指的数组中的内容应是:BDF24。 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include void fun(char *s, char t) main() char s100, t100; printf(nPlease enter string S:
145、); scanf(%s, s); fun(s, t); printf(nThe result is: %sn, t); NONO(); 解题思路: 本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。 参考答案: void fun(char *s, char t) int i, j = 0 ; for(i = 0 ; i strlen(s); i+) if(si % 2=0) tj+ = si ; tj = 0 ; 第19套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函 数fun的功能是将形参a所指结构体变量s中的数据进行修改,并把a中
146、地址作为函数 值返回主函数,在主函数中输出修改后的数据。 例如:a所指变量s中的学号、姓名、和三门课的成绩依次是:10001、 ZhangSan 、95、80、88,修改后输出t中的数据应为:10002、LiSi 、96、 81、89。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include struct student long sno; char name10; float score3; ; /*found*/ _1_ fun
147、(struct student *a) int i; a-sno = 10002; strcpy(a-name, LiSi); /*found*/ for (i=0; i3; i+) _2_ += 1; /*found*/ return _3_ ; main() struct student s=10001,ZhangSan, 95, 80, 88, *t; int i; printf(nnThe original data :n); printf(nNo: %ld Name: %snScores: ,s.sno, s.name); for (i=0; isno, t-name); for (
148、i=0; iscorei); printf(n); 解题思路: 本题是利用形参对结构体变量中的值进行修改并通过地址把函数值返回。 第一处:必须定义结构指针返回类型,所以应填:struct student *。 第二处:分别对成绩增加1分,所以应填:a-scorei。 第三处:返回结构指针a,所以应填:a。 * 给定程序MODI1.C中函数fun的功能是:从N个字符串中找出最长的那个串,并 将其地址作为函数值返回。各字符串在主函数中输入,并放入一个字符串数组中。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #incl
149、ude #include #define N 5 #define M 81 /*found*/ fun(char (*sq)M) int i; char *sp; sp=sq0; for(i=0;iN;i+) if(strlen( sp)strlen(sqi) sp=sqi ; /*found*/ return sq; main() char strNM, *longest; int i; printf(Enter %d lines :n,N); for(i=0; iN; i+) gets(stri); printf(nThe N string :n,N); for(i=0; iN; i+)
150、puts(stri); longest=fun(str); printf(nThe longest string :n); puts(longest); 解题思路: 第一处: 要求返回字符串的首地址,所以应改为:char *fun(char (*sq)M)。 第二处: 返回一个由变量sp控制的字符串指针,所以应改为:return sp;。 * 函数fun的功能是:将a、b中的两个两位正整数合并形成一个新的整数放在c 中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b中的 十位和个位数依次放在变量c的十位和千位上。 例如,当a45,b=12。调用该函数后,c=2415。 注意
151、: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int a, int b, long *c) main() int a,b; long c; printf(Input a, b:); scanf(%d%d, &a, &b); fun(a, b, &c); printf(The result is: %ldn, c); NONO(); 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。
152、取a十位数字的方法:a/10 取a个位数字的方法:a%10 参考答案: void fun(int a, int b, long *c) *c = (b%10)*1000+(a/10)*100+(b/10)*10+a%10; 第20套: 给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定 所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平 均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均 值和移动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 移动后的输出
153、为:30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 10 double fun(double *x) int i, j; double av, yN; av=0; /*found*/ for(i=0; iN; i+) av +=_1_; for(i=j=0; iN; i+) if( xiav ) /*found*/ yj=xi; xi=-1; _2_
154、; i=0; while(iN) if( xi!= -1 ) yj+=xi; /*found*/ _3_; for(i=0; iN; i+)xi = yi; return av; main() int i; double xN; for(i=0; iN; i+) xi=rand()%50; printf(%4.0f ,xi); printf(n); printf(nThe average is: %fn,fun(x); printf(nThe result :n,fun(x); for(i=0; iN; i+) printf(%5.0f ,xi); printf(n); 解题思路: 第一处:求
155、出N个数的平均值,所以应填:N。 第二处:利用for循环语句,把数组x中小于平均值的数,依次存放到数组y中,其中位置由变量j来控制,所以应填:j+。 第三处:i是while循环体的控制变量,每做一次循环均要加1。 * 给定程序MODI1.C中函数 fun 的功能是:统计字符串中各元音字母(即:A、 E、I、O、U)的个数。注意:字母不分大、小写。 例如:若输入:THIs is a boot,则输出应该是:1、0、2、2、0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include fun ( char
156、*s, int num5 ) int k, i=5; for ( k = 0; k= 0) numi+; main( ) char s181; int num15, i; printf( nPlease enter a string: ); gets( s1 ); fun ( s1, num1 ); for ( i=0; i 5; i+ ) printf (%d ,num1i); printf (n); 解题思路: 第一处:num初始化错误,应为:numk=0;。 第二处:由于s是指针型变量,所以应改为:switch(*s)。 * 请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为
157、函数值返 回。二维数组中的值在主函数中赋予。 例如:二维数组中的值为 1 3 5 7 9 2 9 9 9 4 6 9 9 9 8 1 3 5 7 0 则函数值为 61。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define M 4 #define N 5 int fun ( int aMN ) main( ) int aaMN=1,3,5,7,9, 2,9,9,9,4, 6,9,9,9,8, 1,3,5,7,0; int i, j, y; clrscr()
158、; printf ( The original data is : n ); for ( i=0; iM; i+ ) for ( j =0; jN; j+ ) printf( %6d, aaij ); printf (n); y = fun ( aa ); printf( nThe sum: %dn , y ); printf(n); NONO( ); 解题思路: 本题是统计二维数组周边元素值之和,但要注意的是不要重复计算四个角上的元素值,结果作为函数值返回。 参考答案: int fun ( int aMN ) int tot = 0, i, j ; for(i = 0 ; i N ; i+)
159、 tot += a0i ; tot += aM-1i ; for(i = 1 ; i M - 1 ; i+) tot += ai0 ; tot += aiN-1 ; return tot ; 第21套: 给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定 所有数均为正数),将所指数组中大于平均值的数据移至数组的前部,小于等于平 均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均 值和移动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 移动后的输出为:46 32 40 45 48
160、 30 6 17 15 26 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 10 double fun(double *x) int i, j; double s, av, yN; s=0; for(i=0; iN; i+) s=s+xi; /*found*/ av=_1_; for(i=j=0; iav ) /*found*/ y_2_=xi; xi=-1; for(i=0; iN; i+) /*fo
161、und*/ if( xi!= _3_) yj+=xi; for(i=0; iN; i+)xi = yi; return av; main() int i; double xN; for(i=0; iN; i+) xi=rand()%50; printf(%4.0f ,xi); printf(n); printf(nThe average is: %fn,fun(x); printf(nThe result :n,fun(x); for(i=0; iN; i+) printf(%5.0f ,xi); printf(n); 解题思路: 第一处:计算N个数的平均值,所以应填:s/N。 第二处:利用f
162、or循环语句,把数组x中大于平均值的数,依次存放到数组y中,同时把数组x上的该数置为-1,其中位置由变量j来控制,所以应填:j+。第三处:再利用循环把不是-1的数,依次仍存放到数组y中,所以应填:-1。 * 给定程序MODI1.C的功能是:读入一个英文文本行,将其中每个单词的第一个 字母改成大写,然后输出此文本行(这里的“单词”是指由空格隔开的字符串)。 例如,若输入:I am a student to take the examination., 则应输出:I Am A Student To Take The Examination.。 请改正程序中的错误,使程序能得出正确的结果。 注意:不
163、要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /*found*/ include /*found*/ upfst ( char p ) int k=0; for ( ; *p; p+ ) if ( k ) if ( *p = ) k = 0; else if ( *p != ) k = 1; *p = toupper( *p ); main( ) char chrstr81; printf( nPlease enter an English text line: ); gets( chrstr ); printf( nnBef
164、ore changing:n %s, chrstr ); upfst( chrstr ); printf( nAfter changing:n %sn, chrstr ); 解题思路: 第一处:包含头文件的标识错误,在include前漏写了#。 第二处:由于传入的参数是字符串,所以应为upfst(char *p)。 * 程序定义了NN的二维数组,并在主函数中赋值。请编写函数fun,函数的功 能是:求出数组周边元素的平均值并作为函数值返给主函数中的s。 例如:a 数组中的值为 |0 1 2 7 9| |1 9 7 4 5| a = |2 3 8 3 1| |4 5 6 8 2| |5 9 1 4
165、 1| 则返回主程序后s的值应为: 3.375。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 5 double fun ( int wN ) main ( ) int aNN=0,1,2,7,9,1,9,7,4,5,2,3,8,3,1,4,5,6,8,2,5,9,1,4,1; int i, j; double s ; printf(* The array *n); for ( i =0; iN; i+ ) for ( j =
166、0; jN; j+ ) printf( %4d, aij ); printf(n); s = fun ( a ); printf (* THE RESULT *n); printf( The sum is : %lfn,s ); NONO( ); 解题思路: 本题是统计二维数组周边元素值的平均值,但要注意的是不要重复计算四个角上的元素值。 参考答案: double fun ( int wN ) int i, j, n=0; double sum=0; for ( i =0; iN; i+ ) sum+=w0i+wN-1i; n+=2; for ( i =1; iN - 1; i+ ) sum
167、+=wi0+wiN-1; n+=2; return sum/n; 第22套: 给定程序中,函数fun的功能是:将自然数110以及它们的平方根写到名为 myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include int fun(char *fname ) FILE *fp; int i,n; float x; if(fp=fopen(fname, w)=NULL) retur
168、n 0; for(i=1;i=10;i+) /*found*/ fprintf(_1_,%d %fn,i,sqrt(double)i); printf(nSucceed!!n); /*found*/ _2_; printf(nThe data in file :n); /*found*/ if(fp=fopen(_3_,r)=NULL) return 0; fscanf(fp,%d%f,&n,&x); while(!feof(fp) printf(%d %fn,n,x); fscanf(fp,%d%f,&n,&x); fclose(fp); return 1; main() char fnam
169、e=myfile3.txt; fun(fname); 解题思路: 本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 第一处:int fprintf(FILE *stream, const char *format ,argument, ); 因此本处只能填写文件流的变量fp。 第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数fclose(fp)。 第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出文件名,所以本处只能写文件名变量fname或者直接给出文件名myfile3.dat。 * 给定程
170、序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include fun ( int n, int *a ) int i, j, p, t; for ( j = 0; jn-1 ; j+ ) p = j; /*found*/ for ( i=j+1; iai ) /*found*/ t=i; if ( p!=j ) t = aj; aj = ap; ap = t; putarr( int n, int *z ) int i; for
171、 ( i = 1; i = n; i+, z+ ) printf( %4d, *z ); if ( !( i%10 ) ) printf( n ); printf(n); main() int aa20=9,3,0,4,1,2,5,6,8,10,7, n=11; printf( nnBefore sorting %d numbers:n, n ); putarr( n, aa ); fun( n, aa ); printf( nAfter sorting %d numbers:n, n ); putarr( n, aa ); 解题思路: 第一处:for循环的终止值应该n或者是=n-1。 第二处
172、:使用临时变量p来保存最小值位置i,所以应改为:p=i;。 * 函数fun的功能是: 将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是: 将a数的十位和个位数依次放在c数的个位和百位上, b数的十位 和个位数依次放在c数的十位和千位上。 例如, 当a=45, b=12时, 调用该函数后, c=2514。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int a, int b, long *c)
173、main() int a,b; long c; printf(Input a, b:); scanf(%d,%d, &a, &b); fun(a, b, &c); printf(The result is: %ldn, c); NONO(); 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 取a十位数字的方法:a/10 取a个位数字的方法:a%10 参考答案: void fun(int a, int b, long *c) *c=(b%10)*1000+(a%10)*100+(b/10)*10+(a/10); 第23套: 给定程序中,函数fun的功能是:找
174、出NN矩阵中每列元素中的最大值,并按 顺序依次存放于形参b所指的一维数组中。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 4 void fun(int (*a)N, int *b) int i,j; for(i=0; iN; i+) /*found*/ bi= _1_; for(j=1; jN; j+) /*found*/ if(bi _2_ aji) bi=aji; main() int xNN= 12,5,8,7,
175、6,1,9,3,1,2,3,4,2,8,4,3 ,yN,i,j; printf(nThe matrix :n); for(i=0;iN; i+) for(j=0;jN; j+) printf(%4d,xij); printf(n); /*found*/ fun(_3_); printf(nThe result is:); for(i=0; iN; i+) printf(%3d,yi); printf(n); 解题思路: 第一处:把每列的第1值赋值给bi,所以应填:a0i。 第二处:如果bi值小于aji的值,则把aji重新赋值给bi中,保存最大的值, 所以应填:。 第三处:在主函数中,x是存放矩
176、阵数据,y是存放每列的最大值,所以应填:x,y。 * 给定程序MODI1.C中函数fun的功能是: 交换主函数中两个变量的值。例如: 若变量a中的值原为8,b中的值为3。程序运行后a中的值为3, b中的值为8。 请改正程序中的错误, 使它能计算出正确的结果。 注意: 不要改动 main 函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include /*found*/ int fun(int x,int y) int t; /*found*/ t=x;x=y;y=t; main() int a,b; a=8;b=3; fun(&a,&b); printf(%d, %dn,a,
177、b); 解题思路: 第一处:函数形参定义不正确,在定义第2个形参时,也应加上int。由于通过该函数实现两数交换,在C语言中,必须交换地址中的值,所以应定义为int *x,int *y。 第二处:要交换地址中的值,不能交换地址,必须指定地址中的值,因此应改为t=*x;*x=*y;*y=t;。 * 编写函数fun, 函数的功能是求出小于或等于lim的所有素数并放在aa数组中, 函数返回所求出的素数的个数。函数fun中给出的语句仅供参考。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #incl
178、ude #define MAX 100 int fun(int lim, int aaMAX) /* 以下代码仅供参考 */ int i,j,k=0; /* 其中变量k用于统计素数个数 */ for(i=2;i=lim;i+) /* 以下完成判断aa数组中小于或等于lim的素数并统计个数 */ return k; main() int limit, i, sum; int aaMAX ; printf(输入一个整数); scanf(%d, &limit); sum=fun(limit, aa); for(i=0 ; i sum ; i+) if(i % 10 = 0 & i != 0) pri
179、ntf(n) ; printf(%5d, aai) ; NONO(); 解题思路: 本题是考察考生如何判断一个数是素数,再求出所有小于lim数的素数并存入数组aa中保存,最后由形参aa返回,素数的个数由函数值返回。 参考答案: int fun(int lim, int aaMAX) /* 以下代码仅供参考 */ int i,j,k=0; /* 其中变量k用于统计素数个数 */ for(i=2;i=lim;i+) /* 以下完成判断aa数组中小于或等于lim的素数并统计个数 */ for(j = 2 ; j (i/2) aak+ = i; return k; 第24套: 程序通过定义学生结构体变
180、量,存储了学生的学号、姓名和3门课的成绩。函 数fun的功能是将形参a中的数据进行修改,把修改后的数据作为函数值返回主函数 进行输出。 例如:传给形参a的数据中,学号、姓名、和三门课的成绩依次是:10001、 ZhangSan、95、80、88,修改后的数据应为:10002、LiSi、96、81、89。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include struct student long sno; char name10;
181、 float score3; ; /*found*/ _1_ fun(struct student a) int i; a.sno = 10002; /*found*/ strcpy(_2_, LiSi); /*found*/ for (i=0; i3; i+) _3_+= 1; return a; main() struct student s=10001,ZhangSan, 95, 80, 88, t; int i; printf(nnThe original data :n); printf(nNo: %ld Name: %snScores: ,s.sno, s.name); for (
182、i=0; i3; i+) printf(%6.2f , s.scorei); printf(n); t = fun(s); printf(nThe data after modified :n); printf(nNo: %ld Name: %snScores: ,t.sno, t.name); for (i=0; i3; i+) printf(%6.2f , t.scorei); printf(n); 解题思路: 本题是对结构体变量中的值进行修改并通过函数值返回。 第一处:必须定义结构返回类型,所以应填:struct student。 第二处:对姓名进行修改,所以应填:a.name。 第三处
183、:分别对成绩增加1分,所以应填:a.scorei。 * 假定整数数列中的数不重复,并存放在数组中。给定程序MODI1.C中函数fun 的功能是:删除数列中值为x的元素。n中存放的是数列中元素的个数。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #define N 20 fun(int *a,int n,int x) int p=0,i; an=x; while( x!=ap ) TAB p=p+1; /*found*/ if(P=n) return -1; else for(i=p;in;i+)
184、/*found*/ TAB ai+1=ai; return n-1; main() int wN=-3,0,1,5,7,99,10,15,30,90,x,n,i; n=10; printf(The original data :n); for(i=0;in;i+) printf(%5d,wi); printf(nInput x (to delete): ); scanf(%d,&x); printf(Delete : %dn,x); n=fun(w,n,x); if ( n=-1 ) printf(*Not be found!*nn); else printf(The data after d
185、eleted:n); for(i=0;in;i+) printf(%5d,wi);printf(nn); 解题思路: 第一处: 条件语句中的小写p错写成大写P了。 第二处: 删除元素,应该是后面位置的元素值赋值给前面的位置上,所以应改为: ai=ai+1;。 * 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组 s中, 请编写函数fun,它的功能是:把分数最低的学生数据放在b所指的数组中, 注意:分数最低的学生可能不止一个,函数返回分数最低的学生的人数。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填
186、入 你编写的若干语句。 给定源程序: #include #define N 16 typedef struct char num10; int s; STREC; int fun( STREC *a, STREC *b ) main() STREC sN=GA05,85,GA03,76,GA02,69,GA04,85, TAB TAB GA01,91,GA07,72,GA08,64,GA06,87, TAB TAB GA015,85,GA013,91,GA012,64,GA014,91, TAB TAB GA011,91,GA017,64,GA018,64,GA016,72; STREC hN
187、; int i,n;FILE *out ; n=fun( s,h ); printf(The %d lowest score :n,n); for(i=0;in; i+) printf(%s %4dn,hi.num,hi.s); printf(n); out = fopen(c:testout.dat,w) ; fprintf(out, %dn,n); for(i=0;in; i+) fprintf(out, %4dn,hi.s); fclose(out); 解题思路: 本题是把符合条件的学生记录存入到另一个结构体,人数通过函数返回,记录由实参b返回。 1. 符合条件的学生人数存在变量j(初始
188、值为0)中,最后返回其值。 2. 利用for循环语句,依次判断是否符合条件,如果成绩相等,则把记录存入b中,人数j 加1;如果当前成绩ai.s小于最低成绩min,那么人数重新初始化为0,把当前成绩存入最低成绩中,人数j加1。 3. 直至循环结束为止。 参考答案: int fun( STREC *a, STREC *b ) int i, j = 0, min=a0.s ; for(i = 0 ; i ai.s) j = 0 ; bj+ = ai ; min = ai.s ; else if(min = ai.s) bj+ = ai ; return j ; 第25套: 人员的记录由编号和出生年、
189、月、日组成,N名人员的数据已在主函数中存入 结构体数组std中,且编号唯一。函数fun的功能是:找出指定编号人员的数据, 作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct char num10; int year,month,day ; STU; /*found*/ _1_ fun(STU *std,
190、char *num) int i; STU a=,9999,99,99; for (i=0; iN; i+) /*found*/ if( strcmp(_2_,num)=0 ) /*found*/ return (_3_); return a; main() STU stdN= 111111,1984,2,15,222222,1983,9,21,333333,1984,9,1, 444444,1983,7,15,555555,1984,9,28,666666,1983,11,15, 777777,1983,6,22,888888,1984,8,19; STU p; char n10=66666
191、6; p=fun(std,n); if(p.num0=0) printf(nNot found !n); else printf(nSucceed !n ); printf(%s %d-%d-%dn,p.num,p.year,p.month,p.day); 解题思路: 本题是要求从给定的人员数据中找出编号相同的记录数据。 第一处:从返回值来看,是返回一个结构型的值,所以应填:STU。 第二处:判断结构变量中的编号num是否相等,所以应填:stui.num。 第三处:返回编号相等的记录值,所以应填:stdi。 * 给定程序MODI1.C中函数fun的功能是:从s所指字符串中,找出与t所指字符 串
192、相同的子串的个数作为函数值返回。 例如,当s所指字符串中的内容为:abcdabfab,t所指字符串的内容为: ab,则函数返回整数3。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include int fun (char *s, char *t) int n; char *p , *r; n = 0; while ( *s ) p = s; r = t; while ( *r ) if ( *r = *p ) /*found*/ r+; p+ else break; /*found*/ i
193、f ( r = 0 ) n+; s+; return n; main() char s100, t100; int m; printf(nPlease enter string S:); scanf(%s, s); printf(nPlease enter substring t:); scanf(%s, t); m = fun( s, t); printf(nThe result is: m = %dn, m); 解题思路: 第一处:语句后缺少分号。 第二处:判断r的当前字符是否是字符串结束符,所以应改为:if(*r=0)。 * 函数fun的功能是:将s所指字符串中ASCII值为偶数的字符删
194、除,串中剩余字 符形成一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:ABCDEFG12345,其中字符B的ASCII码值 为偶数、字符2的ASCII码值为偶数、 都应当删除,其它依此类推。最后t所 指的数组中的内容应是:ACEG135。 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include void fun(char *s, char t) main() char s100, t100; printf(nPlease enter string
195、 S:); scanf(%s, s); fun(s, t); printf(nThe result is: %sn, t); NONO(); 解题思路: 本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。 参考答案: void fun(char *s, char t) int i, j = 0 ; for(i = 0 ; i strlen(s); i+) if(si % 2) tj+ = si ; tj = 0 ; 第26套: 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按数据域递 增有序链接。函数fun的功能是:删除链表中数据域值相同的结点,使之
196、只保留一 个。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct list int data; struct list *next; SLIST; void fun( SLIST *h) SLIST *p, *q; p=h-next; if (p!=NULL) q=p-next; while(q!=NULL) if (p-data=q-data) p-next=q-next;
197、 /*found*/ free(_1_); /*found*/ q=p-_2_; else p=q; /*found*/ q=q-_3_; SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(nThe list is NULL!n); else prin
198、tf(nHead); do printf(-%d,p-data); p=p-next; while(p!=NULL); printf(-Endn); main( ) SLIST *head; int aN=1,2,2,3,4,4,4,5; head=creatlist(a); printf(nThe list before deleting :n); outlist(head); fun(head); printf(nThe list after deleting :n); outlist(head); 解题思路: 本题是考察考生对链表的操作,主要是解决删除链表中数据域值相同的结点。程序中共有
199、三处要填上适当的内容,使程序能运行出正确的结果。 函数fun中使用两个临时结构指针变量p和q对链表进行操作。首先p指向链表开始的next指针,q指向p的next指针,再利用while循环语句来判断指针q是否NULL,如果q指针是指向NULL, 那么函数结束返回。如果不是NULL,那么就要判断p和q中data值是否相同,如果值相同,则要删除该结点,然后继续判断下一结点值是相同,如果还相同,那么继续删除结点,直至不相同为止。如果两个结点的值不相同,那么p就指向q,q指向q的next指针再继续操作上述过程。 删除结点的方法是:先将p的next指针指向q的next指针,再释放q指针指向的内存,最后把q
200、指针再指向p的next指针就可以删除一个链表中的结点了。 第一处:释放q指针所指的内存空间,应填q。 第二处:q指针指向p的next指针,重新完成链接,应填next。 第三处:两个结点的值不相同,那么q就指向q的next指针,应填next。 * 给定程序MODI1.C中函数fun的功能是:用选择法对数组中的n个元素按从小到 大的顺序进行排序。 请修改程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行和删行,也不得更改程序的结构! 给定源程序: #include #define N 20 void fun(int a, int n) int i, j, t, p; for
201、 (j = 0 ;j n-1 ;j+) /*found*/ p = j for (i = j;i n; i+) if(ai ap) /*found*/ p = j; t = ap ; ap = aj ; aj = t; main() int aN=9,6,8,3,-1,i, m = 5; printf(排序前的数据:) ; for(i = 0;i m;i+) printf(%d ,ai); printf(n); fun(a,m); printf(排序后的数据:) ; for(i = 0;i m;i+) printf(%d ,ai); printf(n); 解题思路: 第一处:语句后缺少分号。
202、第二处:保存最小值的位置,所以应改为:p = i;。 * 请编写一个函数fun,它的功能是:求出1到m之间(含m)能被7或11整除的所有 整数放在数组a中,通过n返回这些数的个数。例如,若传送给m的值为50,则程序 输出: 7 11 14 21 22 28 33 35 42 44 49 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define M 100 void fun ( int m, int *a , int *n ) main( ) int aaM, n,
203、 k; fun ( 50, aa, &n ); for ( k = 0; k n; k+ ) if(k+1)%20=0) printf(n); else printf( %4d, aak ); printf(n) ; NONO( ); 解题思路: 本题是考察考生对某个数能被其他的数整除方式,并把符合条件的数存放在数组a中。 我们给出的程序是使用for循环语句以及取模的方式来解决这个问题的。 参考答案: #include #define M 100 void fun ( int m, int *a , int *n ) int i ; *n=0 ; for(i=7 ; i=m; i+) if(i
204、 % 7 = 0) | (i % 11 = 0) a(*n)+=i ; 第27套: 给定程序中,函数fun的功能是:计算下式前n项的和作为函数值返回。 例如,当形参n的值为10时,函数返回:9.612558。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include double fun(int n) int i; double s, t; /*found*/ s=_1_; /*found*/ for(i=1; i=_2_; i+) t=2.0*i; /
205、*found*/ s=s+(2.0*i-1)*(2.0*i+1)/_3_; return s; main() int n=-1; while(n0): ); scanf(%d,&n); printf(nThe result is: %fn,fun(n); 解题思路: 第一处:根据公式可知,累加和变量s,应置0。 第二处:for循环的终止值应为形参n。 第三处:根据公式以及函数体中t变量内容,所以应填:t*t。 * 给定程序MODI1.C中函数 fun 的功能是:统计substr所指子字符串在str所指 字符串中出现的次数。 例如,若字符串为aaas lkaaas,子字符串为as,则应输出2。
206、请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include fun (char *str,char *substr) int i,j,k,num=0; /*found*/ for(i = 0, stri, i+) for(j=i,k=0;substrk=strj;k+,j+) /*found*/ If(substrk+1=0) num+; break; return num; main() char str80,substr80; printf(Input a string:) ; gets(str); pr
207、intf(Input a substring:) ; gets(substr); printf(%dn,fun(str,substr); 解题思路: 第一处:循环for语句中应有分号。 第二处:if错写成If。 * 请编写一个函数fun,它的功能是:根据以下公式求的值(要求满足精度 0.0005, 即某项小于0.0005时停止迭代): 1 12 123 1234 12n = 1+ 2 3 35 357 3579 35(2n+1) 程序运行后,如果输入精度0.0005,则程序输出为3.14。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数
208、fun的花括号中填 入你编写的若干语句。 给定源程序: #include #include double fun ( double eps) main( ) double x; printf(Input eps:) ; scanf(%lf,&x); printf(neps = %lf, PI=%lfn, x, fun(x); NONO(); 解题思路: 本题是根据公式进行计算。 参考答案: double fun ( double eps) double s=1,t=1./3; int n=1; while(t=eps) s+=t; n+; t=t*n/(2.0*n+1); return (s*
209、2.0); main( ) double x; printf(Input eps:) ; scanf(%lf,&x); printf(neps = %lf, PI=%lfn, x, fun(x); NONO(); 第28套: 给定程序中,函数fun的功能是:统计形参s所指字符串中数字字符出现的次 数,并存放在形参t所指的变量中,最后在主函数中输出。例如,形参s所指的字 符串为:abcdef35adgh3kjsdf7。输出结果为:4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结
210、构! 给定源程序: #include void fun(char *s, int *t) int i, n; n=0; /*found*/ for(i=0; _1_ !=NULL; i+) /*found*/ if(si=0&si= _2_ ) n+; /*found*/ _3_ ; main() char s80=abcdef35adgh3kjsdf7; int t; printf(nThe original string is : %sn,s); fun(s,&t); printf(nThe result is : %dn,t); 解题思路: 第一处:在for循环中终止值要判断字符串是否结
211、束符,所以应填:si。 第二处:判断是否是数字,所以应填:9。 第三处:字符串中数字字符出现的次数n,并存放在形参t所指的变量中,所以应填:*t=n。 * 给定程序MODI1.C中函数fun的功能是:通过某种方式实现两个变量值的交换, 规定不允许增加语句和表达式。例如变量a 中的值原为8,b中的值原为3, 程序运 行后 a 中的值为 3,b中的值为8。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int *x,int y) int t ; /*found*/ t = x ;
212、 x = y ; /*found*/ return(y) ; main() int a = 3, b = 8 ; printf(%d %dn, a, b) ; b = fun(&a, b) ; printf(%d %dn, a, b) ; 解题思路: 第一处:由于x是整型指针变量,所以地址不能赋值给整型变量,因此必须取x地址上的值, 所以应改为t=*x;*x=y;。 第二处:已交换后的值存放在t中,所以返回值应为return(t);。 * 请编写函数fun,它的功能是: 求出 1 到 1000 之间能被 7 或11整除、但不 能同时被 7 和 11 整除的所有整数并将它们放在a所指的数组中,通
213、过 n 返回这 些数的个数。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun (int *a, int *n) main( ) int aa1000, n, k ; fun ( aa, &n ) ; for ( k = 0 ; k n ; k+ ) if(k + 1) % 10 = 0) printf(n) ; else printf(%5d, aak) ; NONO( ); 解题思路: 本题是利用for循环语句以及取模%运算来得出符合条件的整数并存入a
214、所指的数组。 参考答案: void fun (int *a, int *n) int i ; *n = 0 ; for(i = 7 ; i 1000 ; i+) if(i % 7) = 0 | (i % 11) = 0) & (i % 77) != 0) a(*n)+ = i ; 第29套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函 数fun的功能是对形参b所指结构体变量中的数据进行修改,最后在主函数中输出修 改后的数据。 例如: b所指变量t中的学号、姓名、和三门课的成绩依次是: 10002、 ZhangQi、93、85、87,修改后输出t中的数据应为:10004
215、、 LiJie 、93、 85、87。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include struct student long sno; char name10; float score3; ; void fun( struct student *b) int i; /*found*/ b_1_ = 10004; /*found*/ strcpy(b_2_, LiJie); main() struct student t=1
216、0002,ZhangQi, 93, 85, 87; int i; printf(nnThe original data :n); printf(nNo: %ld Name: %snScores: ,t.sno, t.name); for (i=0; i3; i+) printf(%6.2f , t.scorei); printf(n); /*found*/ fun(_3_); printf(nThe data after modified :n); printf(nNo: %ld Name: %snScores: ,t.sno, t.name); for (i=0; ino。 第二处:对姓名进
217、行更改,所以应填:-name。 第三处:对函数的调用,所以应填:&t。 * 给定程序MODI1.C中函数fun的功能是:应用递归算法求形参a的平方根。求平 方根的迭代公式如下: 1 a x1 = ( x0 + ) 2 x0 例如,a为2时,平方根值为:1.414214。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #include /*found*/ double fun(double a, dounle x0) double x1, y; x1=(x0+ a/x0)/2.0; /*found*/
218、 if( fabs(x1-xo)0.00001 ) TAB y=fun(a,x1); else y=x1; return y; main( ) double x; printf(Enter x: ); scanf(%lf,&x); printf(The square root of %lf is %lfn,x,fun(x,1.0); 解题思路: 第一处: 第二个变量定义的保留字double写错。 第二处: 变量x0错写成xo了。 * 学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组 s中, 请编写函数fun,它的功能是:把高于等于平均分的学生数据放在b所指的数 组中,高于等
219、于平均分的学生人数通过形参n传回,平均分通过函数值返回。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #define N 12 typedef struct char num10; double s; STREC; double fun( STREC *a, STREC *b, int *n ) main() STREC sN=GA05,85,GA03,76,GA02,69,GA04,85, TAB TAB GA01,91,GA07,72,GA08,64,GA06
220、,87, TAB TAB GA09,60,GA11,79,GA12,73,GA10,90; STREC hN, t;FILE *out ; int i,j,n; double ave; ave=fun( s,h,&n ); printf(The %d student data which is higher than %7.3f:n,n,ave); for(i=0;in; i+) printf(%s %4.1fn,hi.num,hi.s); printf(n); out = fopen(c:testout.dat,w) ; fprintf(out, %dn%7.3fn, n, ave); fo
221、r(i=0;in-1;i+) for(j=i+1;jn;j+) if(hi.shj.s) t=hi ;hi=hj; hj=t; for(i=0;in; i+) fprintf(out,%4.1fn,hi.s); fclose(out); 解题思路: 本题是计算平均分并把高于平均分的记录存入结构体数组中,最后平均分t通过函数值返回,人数n和符合条件的记录b由形参传回。 1. 利用for循环计算平均分t。2. 利用for循环把高于平均分的学生记录存入b中,人数*n加1。 参考答案: double fun( STREC *a, STREC *b, int *n ) double t=0 ; int
222、i ; *n = 0 ; for(i = 0 ; i N ; i+) t = t + ai.s ; t = t / N ; for(i = 0 ; i t) b(*n)+ = ai ; return t ; 第30套: 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。函 数fun的功能是将形参a所指结构体变量中的数据赋给函数中的结构体变量b,并修 改b中的学号和姓名,最后输出修改后的数据。例如:a所指变量中的学号、姓名、 和三门课的成绩依次是:10001、ZhangSan、95、80、88,则修改后输出b中的 数据应为:10002、LiSi、95、80、88。 请在程序的下划
223、线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include struct student long sno; char name10; float score3; ; void fun(struct student a) struct student b; int i; /*found*/ b = _1_; b.sno = 10002; /*found*/ strcpy(_2_, LiSi); printf(nThe data after modif
224、ied :n); printf(nNo: %ld Name: %snScores: ,b.sno, b.name); /*found*/ for (i=0; i3; i+) printf(%6.2f , b._3_); printf(n); main() struct student s=10001,ZhangSan, 95, 80, 88; int i; printf(nnThe original data :n); printf(nNo: %ld Name: %snScores: ,s.sno, s.name); for (i=0; i3; i+) printf(%6.2f , s.sco
225、rei); printf(n); fun(s); 解题思路: 本题是对结构体变量中的值进行修改。 第一处:要修改的结构体变量是由形参a来传递的,所以应填:a。 第二处:对结构体中的成员name进行替换,所以应填:b.name。 第三处:分别输出结构体中的成绩,所以应填:scorei。 * 给定程序MODI1.C中函数fun的功能是:从s所指字符串中删除所有小写字母c。 请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun( char *s ) int i,j; for(i=j=0;
226、 si!=0; i+) if(si!=c) /*found*/ TAB sj=si; /*found*/ si=0; main() char s80; printf(Enter a string: ); gets(s); printf(The original string: ); puts(s); fun(s); printf(The string after deleted : ); puts(s);printf(nn); 解题思路: 第一处: 新字符串的位置值是由变量j来控制的,但程序中字符赋值后没有对j进行增量的语句,所以应改为:sj+=si;。 第二处: 对新字符串添加字符串结束符,
227、由于程序中使用变量j对新字符串来控制的,所以应改为:sj=0;。 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字 符串中的前导*号全部移到字符串的尾部。函数fun中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,移动后,字符串中的内 容应当是:A*BC*DEF*G*。在编写函数时, 不得使用C语言提供的字符 串函数。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) /* 以下代码仅
228、供参考 */ char *p,*q; int n=0; p=a; while(*p=*) /* 统计串头*个数n */ n+; p+; q=a; /* 向前复制字符串,请填写相应的语句完成其功能 */ for(;n0;n-) /* 在串尾补n个* */ *q+=*; *q=0; main() char s81,*p; int n=0; printf(Enter a string:n);gets(s); fun( s ); printf(The string after moveing:n);puts(s); NONO(); 解题思路: 本题是考察字符串的移动。具体操作请看参考源程序。 参考答案
229、: void fun( char *a ) /* 以下代码仅供参考 */ char *p,*q; int n=0; p=a; while(*p=*) /* 统计串头*个数n */ n+; p+; q=a; /* 向前复制字符串,请填写相应的语句完成其功能 */ while(*p) *q=*p; p+;q+; for(;n0;n-) /* 在串尾补n个* */ *q+=*; *q=0; 第31套: 给定程序中,函数fun的功能是:对形参s所指字符串中下标为奇数的字符按 ASCII码大小递增排序,并将排序后下标为奇数的字符取出,存入形参p所指字符 数组中,形成一个新串。 例如,形参s所指的字符串为
230、:baawrskjghzlicda,执行后p所指字符数组中 的字符串应为:aachjlsw。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s, char *p) int i, j, n, x, t; n=0; for(i=0; si!=0; i+) n+; for(i=1; in-2; i=i+2) /*found*/ _1_; /*found*/ for(j=_2_+2 ; jsj) t=j; if(t!=i
231、) x=si; si=st; st=x; for(i=1,j=0; in; i=i+2, j+) pj=si; /*found*/ pj=_3_; main() char s80=baawrskjghzlicda, p50; printf(nThe original string is : %sn,s); fun(s,p); printf(nThe result is : %sn,p); 解题思路: 第一处:取外循环的控制变量,所以应填:t=i。 第二处:内循环的起始变量,应该是i+2,所以应填:i。 第三处:新字符串处理完后应添加字符串结束符,所以应填:0。 * 给定程序MODI1.C中函数
232、 fun 的功能是:用下面的公式求的近似值,直到 最后一项的绝对值小于指定的数(参数num )为止: 1 1 1 1 - + - + . 4 3 5 7 例如, 程序运行后, 输入0.0001, 则程序输出3.1414。 请改正程序中的错误,使它能输出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include float fun ( float num ) int s ; float n, t, pi ; t = 1 ; pi = 0 ; n = 1 ; s = 1 ; /*found*/ while(t = num)
233、 pi = pi + t ; n = n + 2 ; s = -s ; /*found*/ t = s % n ; pi = pi * 4 ; return pi ; main( ) float n1, n2 ; printf(Enter a float number: ) ; scanf(%f, &n1) ; n2 = fun(n1) ; printf(%6.4fn, n2) ; 解题思路: 第一处:要判断t的最后一项绝对小于指定的数,由于t是实数,那么应改为while(fabs(t)=num)。 第二处:t是s除以n的值,而不是取余数,所以应改t=s/n;。 * 请编写一个函数void f
234、un (char a,char b,int n),其功能是:删除一 个字符串中指定下标的字符。其中, a指向原字符串, 删除指定字符后的字符串存 放在b所指的数组中,n中存放指定的下标。例如,输入一个字符串: World,然后输入3,则调用该函数后的结果为: Word。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define LEN 20 void fun (char a, char b, int n) main( ) char str1LEN,
235、 str2LEN ; int n ; printf(Enter the string:n) ; gets(str1) ; printf(Enter the position of the string deleted:) ; scanf(%d, &n) ; fun(str1, str2, n) ; printf(The new string is: %sn, str2) ; NONO() ; 解题思路: 本题是利用字符串拷贝和字符串连接来生成新的字符串。 参考答案: void fun (char a, char b, int n) strncpy(b, a, n) ; bn = 0 ; str
236、cat(b, a + n + 1) ; 第32套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,将所有串长超 过k的字符串中右边的字符删除,只保留左边的k个字符。ss所指字符串数组中共 有N个字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 10 /*found*/ void fun(char (*ss) _1_, int k) int i=0
237、 ; /*found*/ while(i _2_) /*found*/ ssik=_3_; i+; main() char xNM=Create,Modify,Sort,skip,Delete; int i; printf(nThe original stringnn); for(i=0;iN;i+)puts(xi); printf(n); fun(x,4); printf(nThe string after deleted :nn); for(i=0; iN; i+) puts(xi); printf(n); 解题思路: 本题是根据给定的字符串数组中删除串长大于某个值的右边字符串。 第一处:
238、函数的定义,试题中已用M作为字符串的长度,所以应填:M。 第二处:利用while循环,分别对字符串数组中的每个字符串置字符串结束符,程序中已经给定了N个字符串,所以应填:N。 第三处:置字符串结束符,所以应填:0(或0)。 * 给定程序MODI1.C中函数fun的功能是:根据以下公式求值,并作为函数值 返回。 例如,给指定精度的变量eps输入0.0005时,应当输出Pi=3.140578。 1 1 2 1 2 3 1 2 3 4 =1+ + + + + 2 3 3 5 3 5 7 3 5 7 9 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程
239、序的结构。 给定源程序: #include #include double fun(double eps) double s,t; int n=1; s=0.0; /*found*/ t=0; while( teps) s+=t; t=t * n/(2*n+1); n+; /*found*/ return(s); main() double x; printf(nPlease enter a precision: ); scanf(%lf,&x); printf(neps=%lf, Pi=%lfnn,x,fun(x); 解题思路: 第一处: 初始化t的值,根据程序中的计算程序和试题的要求得出,
240、t应为1。 第二处: 根据公式/2得出,所以返回时应原有s的基础上乘以2作为返回值。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字 符串的前导*号不得多于n个;若多于n个,则删除多余的*号; 若少于或等于n个, 则什么也不做,字符串中间和尾部的*号不删除。函数fun中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,若n的值为4,删除后, 字符串中的内容应当是:*A*BC*DEF*G*;若n的值为8,则字符串中的内容仍 为:*A*BC*DEF*G*。n的值在主函数中输入。 在编写函数时,不得使用 C语言提供的字符串函数。 注意: 部分源程序在
241、文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a, int n ) /* 以下代码仅供参考 */ int i=0,j,k=0; while(ak=*) k+; /* k为统计*字符个数 */ if(kn) i=n;j=k; /* 以下完成将下标为k至串尾的字符前移k-n个位置 */ main() char s81; int n; printf(Enter a string:n);gets(s); printf(Enter n : );scanf(%d,&
242、n); fun( s,n ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察字符串的操作。 利用for循环来判断aj的字符是否是字符串结束符,如果不是字符串结束符,则把aj 的字符依次存放到ai。其中,变量i是n的初始值,变量j是字符串前导的*号数。 参考答案: void fun( char *a, int n ) /* 以下代码仅供参考 */ int i=0,j,k=0; while(ak=*) k+; /* k为统计*字符个数 */ if(kn) i=n;j=k; /* 以下完成将下标为k至串尾的字符前移k-
243、n个位置 */ for(; aj !=0 ; j+) ai+=aj; ai = 0; 第33套: 给定程序的功能是:调用函数fun将指定源文件中的内容复制到指定的目标 文件中,复制成功时函数返回值为1,失败时返回值为0。在复制的过程中,把复 制的内容输出到终端屏幕。主函数中源文件名放在变量sfname中,目标文件名放 在变量tfname中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include int fun(char *sourc
244、e, char *target) FILE *fs,*ft; char ch; /*found*/ if(fs=fopen(source, _1_)=NULL) return 0; if(ft=fopen(target, w)=NULL) return 0; printf(nThe data in file :n); ch=fgetc(fs); /*found*/ while(!feof(_2_) putchar( ch ); /*found*/ fputc(ch,_3_); ch=fgetc(fs); fclose(fs); fclose(ft); printf(nn); return 1;
245、 main() char sfname20 =myfile1,tfname20=myfile2; FILE *myf; int i; char c; myf=fopen(sfname,w); printf(nThe original data :n); for(i=1; i30; i+) c=A+rand()%25;fprintf(myf,%c,c); printf(%c,c); fclose(myf);printf(nn); if (fun(sfname, tfname) printf(Succeed!); else printf(Fail!); 解题思路: 本题要求是把一个文件中的内容复制
246、到另一个文件中。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 第一处:要求打开一个读方式的源文件,因此可以填上r或r+。打开读文件操作的流是fs。 第二处:用while循环来判断源文件是否已读到文件结束符,int feof(FILE *stream),因此,此处只能填写fs。 第三处:把已经读取的字符写入目标文件中,打开写文件操作的流是ft,因此,此处只能填写ft。 * 给定程序MODI1.C中函数fun的功能是:将长整型数中每一位上为偶数的数依 次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。 例如,当s中的数为:87653142时,t中的数为:8642。 请改正程序
247、中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun (long s, long *t) int d; long sl=1; *t = 0; while ( s 0) d = s%10; /*found*/ if (d%2=0) *t=d* sl+ *t; sl *= 10; /*found*/ s = 10; main() long s, t; printf(nPlease enter s:); scanf(%ld, &s); fun(s, &t); printf(The result is:
248、%ldn, t); 解题思路: 第一处:判断相等的条件是=。 第二处:整除的符号是/。 * 函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。 合并的方式是:将a数的十位和个位数依次放在c数的十位和千位上, b数的十位 和个位数依次放在c数的百位和个位上。 例如,当a45,b=12时,调用该函数后,c=5142。 注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun(int a, int b, lo
249、ng *c) main() int a,b; long c; printf(Input a, b:); scanf(%d,%d, &a, &b); fun(a, b, &c); printf(The result is: %ldn, c); NONO(); 解题思路: 本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。 取a十位数字的方法:a/10 取a个位数字的方法:a%10 参考答案: void fun(int a, int b, long *c) *c=(a%10)*1000+(b/10)*100+(a/10)*10+(b%10); 第34套: 用筛选法可得到2n(
250、n10000)之间的所有素数,方法是:首先从素数2开 始,将所有2的倍数的数从数表中删去(把数表中相应位置的值置成0);接着从数 表中找下一个非0数,并从数表中删去该数的所有倍数;依此类推,直到所找的下 一个数等于n为止。这样会得到一个序列: 2,3,5,7,11,13,17,19,23, 函数fun用筛选法找出所有小于等于n的素数,并统计素数的个数作为函数值 返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include int fun(int n)
251、 int a10000, i,j, count=0; for (i=2; i=n; i+) ai = i; i = 2; while (in) /*found*/ for (j=ai*2; j=n; j+=_1_) aj = 0; i+; /*found*/ while (_2_=0) i+; printf(nThe prime number between 2 to %dn, n); for (i=2; i=n; i+) /*found*/ if (ai!=_3_) count+; printf( count%15?%5d:n%5d,ai); return count; main() int
252、 n=20, r; r = fun(n); printf(nThe number of prime is : %dn, r); 解题思路: 第一处:所有2的倍数的数从数表中删去,所以应填:ai。 第二处:找出下一个不是的ai,所以应填:ai。 第三处:输出素数,只要判断ai不是0就是素数,所以应填:0。 * 给定程序MODI1.C中函数fun的功能是: 为一个偶数寻找两个素数, 这两个素 数之和等于该偶数,并将这两个素数通过形参指针传回主函数。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #
253、include #include void fun(int a,int *b,int *c) int i,j,d,y; for(i=3;i=a/2;i=i+2) /*found*/ Y=1; for(j=2;j=sqrt(double)i);j+) if(i%j=0) y=0; if(y=1) /*found*/ d=a-i; for(j=2;j=sqrt(double)d);j+) if(d%j=0) y=0; if(y=1) *b=i; *c=d; main() int a,b,c; do printf(nInput a: ); scanf(%d,&a); while(a%2); fun(
254、a,&b,&c); printf(nn%d = %d + %dn,a,b,c); 解题思路: 第一处:变量y错写成Y。 第二处:给变量d进行赋值,所以应改为:d=a-i;。 * 请编写函数fun, 它的功能是:计算并输出n(包括n)以内能被5或9整除的所有自然数的倒数之和。 例如,在主函数中从键盘给n输入20后, 输出为: s=0.583333。 注意: 要求n的值不大于100。 部分源程序在文件PROG1.C中。 请勿改动主函数main和其他函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include double fun(int n) main()
255、int n; double s; printf(nInput n: ); scanf(%d,&n); s=fun(n); printf(nns=%fn,s); NONO(); 解题思路: 本题是计算n(包括n)以内能被5或9整除的所有自然数的倒数之和。 参考答案: double fun(int n) int i; double sum=0.0; for(i=1; i=n; i+) if(i%5 = 0 | i%9 = 0) /* 被5或9整除 */ sum+=1.0/i; return sum; 第35套: 给定程序中,函数fun的功能是建立一个NN的矩阵。 矩阵元素的构成规律 是:最外层元素
256、的值全部为1;从外向内第2层元素的值全部为2;第3层元素的值 全部为3,依次类推。例如,若N=5,生成的矩阵为: 1 1 1 1 1 1 2 2 2 1 1 2 3 2 1 1 2 2 2 1 1 1 1 1 1 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define N 7 /*found*/ void fun(int (*a) _1_) int i,j,k,m; if(N%2=0) m=N/2 ; else m=N/2+1; fo
257、r(i=0; im; i+) /*found*/ for(j= _2_ ; jN-i; j+) aij=aN-i-1j=i+1; for(k=i+1; kN-i; k+) /*found*/ aki=akN-i-1= _3_; main() int xNN=0,i,j; fun(x); printf(nThe result is:n); for(i=0; iN; i+) for(j=0; jN; j+) printf(%3d,xij); printf(n); 解题思路: 第一处:建立一个NN的矩阵,所以应填:N。 第二处:j的起始变量值应i。 第三处:也应该填写i+1。 * 给定程序MODI1
258、.C中函数 fun 的功能是: 将十进制正整数m转换成k(2k9) 进制数, 并按高位到低位顺序输出。 例如,若输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。 请改正 fun 函数中的错误,使它能得出正确的结果。 注意:不要改动 main 函数。不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include void fun( int m, int k ) int aa20, i; for( i = 0; m; i+ ) /*found*/ aai = m/k; m /= k; for( ; i; i- ) /*found*/ printf(
259、 %d, aa i ); main() int b, n; printf( nPlease enter a number and a base:n ); scanf( %d %d, &n, &b ); fun( n, b ); printf(n); 解题思路: 第一处:应该取模而不是整除,所以应为:aai=m%k;。 第二处:输出aa的位置不正确,所以应为:printf(%d,aai-1);。 * 编写一个函数,从num个字符串中找出最长的一个字符串,并通过形参指针max 传回该串地址。(注意: 主函数中用*作为结束输入的标志,函数fun中给出的 语句仅供参考。) 注意:部分源程序在文件PRO
260、G1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include fun(char(*a)81,int num,char *max) /* 以下代码仅供参考 */ int i,k=0,len, maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */ maxlen=strlen(ak); for(i=1;inum;i+) /* 以下完成查找最长串 */ *max=ak; main() char ss1081,*ps; int n,i=0; printf(输入若干个字
261、符串:); gets(ssi); puts(ssi); while(!strcmp(ssi,*)=0) i+; gets(ssi); puts(ssi); n=i; fun(ss,n,&ps); printf(nmax=%sn,ps); NONO(); 解题思路: 本题是考察考生怎样从已输入的字符串中找出长度最大的字符串。求字符串的长度可以使用strlen函数。 参考答案: fun(char(*a)81,int num,char *max) /* 以下代码仅供参考 */ int i,k=0,maxlen; /* k为a数组中最长串所在元素的下标,初始为0,maxlen为其串长 */ maxle
262、n=strlen(ak); for(i=1;i maxlen) maxlen = strlen(ai) ; k = i ; *max=ak; 第36套: 给定程序中,函数fun的功能是:统计出带有头结点的单向链表中结点的个数, 存放在形参n所指的存储单元中。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct list int data; struct list *next;
263、SLIST; SLIST *creatlist(int *a); void outlist(SLIST *); void fun( SLIST *h, int *n) SLIST *p; /*found*/ _1_=0; p=h-next; while(p) (*n)+; /*found*/ p=p-_2_; main() SLIST *head; int aN=12,87,45,32,91,16,20,48, num; head=creatlist(a); outlist(head); /*found*/ fun(_3_, &num); printf(nnumber=%dn,num); SL
264、IST *creatlist(int a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(The list is NULL!n); else printf(nHead ); do printf(-%d,p-data); p=p-next; while(p!=NULL); printf(-Endn)
265、; 解题思路: 本题是要求统计出带有头结点的单向链表中结点的个数。 第一处:对n所指的存储单元进行初始化,所以应填:*n。 第二处:指向p的下一个结点,所以应填:next。 第三处:函数调用,在主函数中已经给出了head,所以应填:head。 * 给定程序MODI1.C中函数fun的功能是:求出s所指字符串中最后一次出现的t 所指子字符串的地址,通过函数值返回,在主函数中输出从此地址开始的字符串; 若未找到,则函数值为NULL。 例如,当字符串中的内容为:abcdabfabcdx,t中的内容为:ab时, 输出结果应是:abcdx。 当字符串中的内容为:abcdabfabcdx,t中的内容为:a
266、bd时, 则程序输出未找到信息:not be found!。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include char * fun (char *s, char *t ) char *p , *r, *a; /*found*/ a = Null; while ( *s ) p = s; r = t; while ( *r ) /*found*/ if ( r = p ) r+; p+; else break; if ( *r = 0 ) a = s; s+; return a ;
267、main() char s100, t100, *p; printf(nPlease enter string S :); scanf(%s, s ); printf(nPlease enter substring t :); scanf(%s, t ); p = fun( s, t ); if ( p ) printf(nThe result is : %sn, p); else printf(nNot found !n ); 解题思路: 第一处:指向空指针错误,Null应NULL。 第二处:比较指针位置的值是否相等,所以应改为:if(*r=*p)。 * 函数fun的功能是: 将s所指字符串
268、中除了下标为偶数、同时ASCII值也为偶 数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组 中。 例如,若s所指字符串中的内容为:ABCDEFG123456,其中字符A的ASCII码 值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为 奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶 数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:246。 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 给定源程序: #inc
269、lude #include void fun(char *s, char t) main() char s100, t100; printf(nPlease enter string S:); scanf(%s, s); fun(s, t); printf(nThe result is: %sn, t); NONO(); 解题思路: 本题是从一个字符串按要求生成另一个新的字符串。我们使用for循环语句来解决这个问题。 参考答案: void fun(char *s, char t) int i, j = 0 ; for(i = 0 ; i strlen(s) ; i += 2) if(si %
270、2 = 0) tj+ = si ; tj = 0 ; 第37套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含有形参 substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串 数组中共有N个字符串,且串长小于M。程序中库函数strstr(s1, s2)的功能是在 s1串中查找s2子串,若没有,函数值为0,若有,为非0。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define
271、 N 5 #define M 15 void fun(char (*ss)M, char *substr) int i,find=0; /*found*/ for(i=0; i _1_ ; i+) /*found*/ if( strstr(ssi, _2_) != NULL ) find=1; puts(ssi); printf(n); /*found*/ if (find=_3_) printf(nDont found!n); main() char xNM=BASIC,C langwage,Java,QBASIC,Access,strM; int i; printf(nThe origin
272、al stringnn); for(i=0;iN;i+)puts(xi); printf(n); printf(nEnter a string for search : ); gets(str); fun(x,str); 解题思路: 本题是根据给定的字符串数组中查找指定的字符串,如果存在,则显示。 第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:查找子串,子串由形参substr传递,所以应填:substr。 第三处:试题要求,若没有找到,函数值为0,所以应填:0。 * 给定程序MODI1.C中函数fun的功能是:求三个数的最小公倍数。 例如,
273、给主函数中的变量x1、x2、x3分别输入15 11 2, 则输出结果应当是:330。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include /*found*/ fun(int x, y, z ) int j,t ,n ,m; j = 1 ; t=j%x; m=j%y ; n=j%z; while(t!=0|m!=0|n!=0) j = j+1; t=j%x; m=j%y; n=j%z; /*found*/ return i; main( ) int x1,x2,x3,j ; printf(Input x1
274、x2 x3: ); scanf(%d%d%d,&x1,&x2,&x3); printf(x1=%d, x2=%d, x3=%d n,x1,x2,x3); j=fun(x1,x2,x3); printf(The minimal common multiple is : %dn,j); 解题思路: 第一处: 函数中形参的定义不正确,应改为:fun(int x,int y, int z)。 第二处: 程序中三个数的最小公倍数是用j处理的,所以应返回j的值。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符
275、串的 长度, 形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个 数。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内 容应当是:A*BC*DEF*G。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a, int n,int h,int e ) main() char s81,*t,*f; int m=0, tn=0, fn=0; printf(E
276、nter a string:n);gets(s); t=f=s; while(*t)t+;m+; t-; while(*t=*)t-;tn+; while(*f=*)f+;fn+; fun( s , m,fn,tn ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察对字符串的操作。 1. 求出字符串的长度。 2. 利用循环把字符串中字符按要求仍存放在原字符串首址开始的位置上。 参考答案: void fun( char *a, int n,int h,int e ) char *p=a ; int j=0,len=
277、0; while(*p) p+; len+; while(jlen-h-e) aj=ah+j; j+; aj=0; 第38套: 函数fun的功能是:把形参a所指数组中的奇数按原顺序依次存放到a0、 a1、a2、中,把偶数从数组中删除,奇数个数通过函数值返回。例如: 若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除偶数后a 所指数组中的数据为:9、1、3、5、7,返回值为5。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include
278、 #define N 9 int fun(int a, int n) int i,j; j = 0; for (i=0; in; i+) /*found*/ if (ai%2=_1_) /*found*/ aj = ai; _2_; /*found*/ return _3_; main() int bN=9,1,4,2,3,6,5,8,7, i, n; printf(nThe original data :n); for (i=0; iN; i+) printf(%4d , bi); printf(n); n = fun(b, N); printf(nThe number of odd : %
279、d n, n); printf(nThe odd number :n); for (i=0; in; i+) printf(%4d , bi); printf(n); 解题思路: 第一处:判断ai是否是奇数,若是,则仍保留在原数组中aj,所以应填:1。 第二处:数组a中的元素位置由j来控制,每增加一个元素,则j加1,所以应填:j+。 第三处:返回删除偶数后a所指数组中数据的元素j,所以应填:j。 * 给定程序MODI1.C中函数fun的功能是:求出两个非零正整数的最大公约数, 并作为函数值返回。 例如,若给num1和num2分别输入49和21,则输出的最大公约数为7;若给num1和num2分别
280、输入27和81,则输出的最大公约数为27。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include int fun(int a,int b) int r,t; if(ab) /*found*/ t=a; b=a; a=t; r=a%b; while(r!=0) a=b; b=r; r=a%b; /*found*/ return(a); main() int num1, num2,a; printf(Input num1 num2: ); scanf(%d%d,&num1,&num2); printf(num1
281、= %d num2= %dnn,num1,num2); a=fun(num1,num2); printf(The maximun common divisor is %dnn,a); 解题思路: 第一处:交换值的次序有问题,所以应改为:t=a;a=b;b=t;。 第二处:返回值错误,应改为:return(b);。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:删除 字符串中所有的*号。在编写函数时,不得使用C语言提供的字符串函数。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内 容应当是:ABCDEFG。 注意: 部分源程序在文件PROG1.C中
282、。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) main() char s81; printf(Enter a string:n);gets(s); fun( s ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察字符串的操作。 1. 利用循环扫描字符串中所有的字符是否是*,如果不是*,则把这些字符存放字符串a首地址开始的位置上。 2. 最后给字符串a加上结束符。 参考答案: void fu
283、n( char *a ) int j =0 ; char *p=a; while(*p) if(*p != *) aj+=*p ; p+ ; aj=0; 第39套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中,删除所有串长 超过k的字符串,函数返回所剩字符串的个数。ss所指字符串数组中共有N个字符 串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M
284、10 int fun(char (*ss)M, int k) int i,j=0,len; /*found*/ for(i=0; i _1_ ; i+) len=strlen(ssi); /*found*/ if(len= _2_) /*found*/ strcpy(ssj+,_3_); return j; main() char xNM=Beijing,Shanghai,Tianjing,Nanjing,Wuhan; int i,f; printf(nThe original stringnn); for(i=0;iN;i+)puts(xi); printf(n); f=fun(x,7);
285、printf(The string witch length is less than or equal to 7 :n); for(i=0; if; i+) puts(xi);printf(n); 解题思路: 本题是根据给定的字符串数组中删除串长大于某个值的字符串。 第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:串长由形参k来传递,所以应填:k。 第三处:如果字符串ssi的串长小于k,则该字符串仍存在原字符串数组中,位置由变量j 来控制,所以应填:ssi。 * 给定程序MODI1.C中函数fun的功能是:逐个比较p、q所指两个字符串对应位
286、 置中的字符,把ASCII值大或相等的字符依次存放到c所指数组中,形成一个新的 字符串。 例如,若主函数中a字符串为:aBCDeFgH, 主函数中b字符串为:ABcd, 则c中的字符串应为:aBcdeFgH。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include #include void fun(char *p ,char *q, char *c) /*found*/ int k = 1; /*found*/ while( *p != *q ) if( *p*q ) ck=*q; else ck=*p;
287、if(*p) p+; if(*q) q+; k+; main() char a10=aBCDeFgH, b10=ABcd, c80=0; fun(a,b,c); printf(The string a: ); puts(a); printf(The string b: ); puts(b); printf(The result : ); puts(c); 解题思路: 第一处: 存放字符串初始位置也是从0开始存放的,由于k是控制c字符串的位置值,所以k 值应为0。 第二处: 判断两个字符串中是否有字符串结束符产生,所以应改为:while( *p | *q ), 而不是两字符串中对应位置的值不相等
288、。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字 符串前导的*号之外,将串中其它*号全部删除。在编写函数时,不得使用C语言提供 的字符串函数。函数fun中给出的语句仅供参考。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后, 字符串中的内 容应当是:*ABCDEFG。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) /* 以下代码仅供参考 */ int i=0,k; while(ai=*
289、) i+; k=i+1; while(ai!=0) /* 以下程序段实现非*字符前移 */ ai+1=0; main() char s81; printf(Enter a string:n);gets(s); fun( s ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察字符串的操作。 1. 使用while循环语句求出字符串前导*号的个数。 2. 使用while循环语句判断ai是否是字符串结束符标志,如果不是字符串结束标志,则再判断是否是字符*号,如果不是*号,则把ai字符存入ak中,如果是*号则跳过该*号,直
290、至字符串结束为止。 参考答案: void fun( char *a ) /* 以下代码仅供参考 */ int i=0,k; while(ai=*) i+; k=i; while(ai!=0) /* 以下程序段实现非*字符前移 */ if(ai != *) ak+=ai; i+; ak=0; 第40套: 给定程序中已建立一个带有头结点的单向链表,链表中的各结点按结点数据 域中的数据递增有序链接。函数fun的功能是:把形参x的值放入一个新结点并插 入到链表中,插入后各结点数据域的值仍保持递增有序。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件
291、夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 8 typedef struct list int data; struct list *next; SLIST; void fun( SLIST *h, int x) SLIST *p, *q, *s; s=(SLIST *)malloc(sizeof(SLIST); /*found*/ s-data=_1_; q=h; p=h-next; while(p!=NULL & xp-data) /*found*/ q=_2_; p=p-next; s-next
292、=p; /*found*/ q-next=_3_; SLIST *creatlist(int *a) SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST); for(i=0; idata=ai; p-next=q; p=q; p-next=0; return h; void outlist(SLIST *h) SLIST *p; p=h-next; if (p=NULL) printf(nThe list is NULL!n); else printf(nHead); do printf(-%d,p-data); p=p-next;
293、while(p!=NULL); printf(-Endn); main() SLIST *head; int x; int aN=11,12,15,18,19,22,25,29; head=creatlist(a); printf(nThe list before inserting:n); outlist(head); printf(nEnter a number : ); scanf(%d,&x); fun(head,x); printf(nThe list after inserting:n); outlist(head); 解题思路: 本题是要求在一个有序的链表中插入一个数,插入后各结
294、点仍然是有序的。程序中共有三处要填上适当的内容,使程序能运行出正确的结果。 第一处:在函数fun的开始处,已经对结构指针s分配了内存,其中data是一个整型变量,实际要求填入一个整型数据。根据本题要求在一个链表插入一个整型数,该数已通过函数的形参x传入,因此应填x。 第二处:使用一个while循环找出要插入一个数的位置,在循环体中q实际上保留当前链表p 位置的临时变量,如果xp-data时,那么再移动链表指针到下一个结果,再进行判断是否符合条件,如果仍大于,则仍q保留链表p的位置。因此,此处应填p。 第三处:当找到结点位置后,就要插入这个数,完成插入过程。由于函数体中分配了结构指针s,s的ne
295、xt指针已经指向了p,所以,当前位置q的next指针就应该指向指针s完成链表的链接。因此,此处应填s。 * 给定程序MODI1.C中函数fun的功能是:计算正整数num的各位上的数字之积。 例如,若输入:252,则输出应该是:20。若输入:202,则输出应该是:0。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include long fun (long num) /*found*/ long k; do k*=num%10 ; /*found*/ num=10 ; while(num) ; return (k
296、) ; main( ) long n ; printf(Please enter a number:) ; scanf(%ld,&n) ; printf(n%ldn,fun(n) ; 解题思路: 第一处:由于在k定义时没有赋初值,所以k是一个随机数,根据试题要求,k应赋值为1。 第二处:整除的符号是/。 * 请编写一个函数fun,它的功能是:计算n门课程的平均分,计算结果作为函 数值返回。 例如:若有5门课程的成绩是:90.5, 72, 80, 61.5, 55 则函数的值为:71.80。 注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fu
297、n的花括号中填入 你编写的若干语句。 给定源程序: #include float fun ( float *a , int n ) main() float score30=90.5, 72, 80, 61.5, 55, aver; aver = fun( score, 5 ); printf( nAverage score is: %5.2fn, aver); NONO ( ); 解题思路: 本题是使用循环来计算平均值且结果由函数值返回。 参考答案: float fun ( float *a , int n ) int i; float ave=0.0; for(i=0; in; i+) a
298、ve=ave+ai ; ave=ave/n; return ave; 第41套: 给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有 数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作 为函数值返回,在主函数中输出。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 主函数中输出:m=30.0 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include
299、#define N 10 double fun(double x,double *av) int i,j; double d,s; s=0; for(i=0; iN; i+) s = s +xi; /*found*/ _1_=s/N; d=32767; for(i=0; iN; i+) if(xi*av & *av - xi=d) /*found*/ d=*av-xi; j=_2_; /*found*/ return _3_; main() int i; double xN,av,m; for(i=0; iN; i+) xi=rand()%50; printf(%4.0f ,xi); prin
300、tf(n); m=fun(x,&av); printf(nThe average is: %fn,av); printf(m=%5.1f ,m); printf(n); 解题思路: 第一处:计算好的平均值通过形参av返回,所以应填:*av。 第二处:计算小于平均值且最接近平均值的位置j,所以应填:i。 第三处:返回该数,所以应填:xj。 * 给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。 例如,若 n=10,则应输出: 0.617977。 请改正程序中的语法错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程 序的结构! 给
301、定源程序: #include /*found*/ int fun ( int n ) float A=1; int i; /*found*/ for (i=2; in; i+) A = 1.0/(1+A); return A ; main( ) int n ; printf(nPlease enter n: ) ; scanf(%d, &n ) ; printf(A%d=%fn, n, fun(n) ) ; 解题思路: 第一处:函数的返回是浮点型数,所以应改为:float fun(int n)。 第二处:for的终止条件应是i=n。 * 程序定义了NN的二维数组,并在主函数中自动赋值。请编写函
302、数fun,函数 的功能是:使数组右上三角元素中的值乘以m 。 例如:若m的值为2,a 数组中的值为 | 1 9 7 | | 2 18 14| a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 2 6 16| | 4 5 6 | | 4 5 12| 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 5 int fun ( int aN, int m ) main ( ) int aNN, m, i, j; print
303、f(* The array *n); for ( i =0; iN; i+ ) for ( j =0; j=3 ); printf(m = %4dn,m); fun ( a ,m ); printf (THE RESULTn); for ( i =0; iN; i+ ) for ( j =0; jN; j+ ) printf( %4d, aij ); printf(n); NONO ( ); 解题思路: 本题是利用两重循环给二维数组右上三角元素中的值乘以m。 参考答案: int fun ( int aN, int m ) int i, j; for(i = 0 ; i N ; i+) for(
304、j = i ; j N ; j+) aij *= m ; 第42套: 给定程序中,函数fun的功能是: 将s所指字符串中的所有数字字符移到所有 非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形 参s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include void fun(char *s) int i, j=0, k=0; char t18
305、0, t280; for(i=0; si!=0; i+) if(si=0 & si=9) /*found*/ t2j=si; _1_; else t1k+=si; t2j=0; t1k=0; /*found*/ for(i=0; ik; i+) _2_; /*found*/ for(i=0; i_3_; i+) sk+i=t2i; main() char s80=ba3a54j7sd567sdffs; printf(nThe original string is : %sn,s); fun(s); printf(nThe result is : %sn,s); 解题思路: t2是存放数字字符串
306、,t1是存放非数字字符串。 第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j+。 第二处:利用for循环把t1字符串添加到原字符串s中,所以应填:si=t1i。 第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所以应填:j。 * 给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6个字符串按由小到大 的顺序进行排序。 请改正程序中的错误,使它能得出正确的结果。 注意: 不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define MAXLINE
307、20 fun ( char *pstr6) int i, j ; char *p ; for (i = 0 ; i 5 ; i+ ) /*found*/ for (j = i + 1, j 0) p = *(pstr + i) ; /*found*/ *(pstr + i) = pstr + j ; *(pstr + j) = p ; main( ) int i ; char *pstr6, str6MAXLINE ; for(i = 0; i 6 ; i+) pstri = stri ; printf( nEnter 6 string(1 string at each line): n )
308、; for(i = 0 ; i 6 ; i+) scanf(%s, pstri) ; fun(pstr) ; printf(The strings after sorting:n) ; for(i = 0 ; i 6 ; i+) printf(%sn, pstri) ; 解题思路: 第一处:for循环语句中缺少分号。 第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为: *(pstr+i)=*(pstr+j);。 * 请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回 此值。 例如,若输入字符串: 123412132,输入字符为: 1,则输出:3。
309、 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define M 81 int fun(char *ss, char c) main() char aM, ch; printf(nPlease enter a string:); gets(a); printf(nPlease enter a char:); ch = getchar(); printf(nThe number of the char is: %dn, fun(a, ch); NONO
310、 ( ); 解题思路: 本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数cnt加1, 直至字符串结束为止,最后由函数返回。 参考答案: int fun(char *ss, char c) int cnt = 0 ; char *p = ss ; while(*p) if(*p = c) cnt+ ; p+ ; return cnt ; 第43套: 给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t所 指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未
311、找到 则返回-1。ss所指字符串数组中共有N个内容不同的字符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 8 int fun(char (*ss)M,char *t) int i; /*found*/ for(i=0; i _1_ ; i+) /*found*/ if(strcmp(ssi,t)=0 ) return _2_ ; return -1; main
312、() char chNM=if,while,switch,int,for,tM; int n,i; printf(nThe original stringnn); for(i=0;iN;i+)puts(chi); printf(n); printf(nEnter a string for search: ); gets(t); n=fun(ch,t); /*found*/ if(n= _3_) printf(nDont found!n); else printf(nThe position is %d .n,n); 解题思路: 本题是考察在字符串查找指定的子串。 , 第一处:利用for循环,从
313、几个字符串中进行查找,程序中已经给定了N个字符串,所以应填:N。 第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i。 第三处:如果没有发现,则显示没有找到信息,所以应填:-1。 * 给定程序MODI1.C中函数fun的功能是:从整数1到55之间,选出能被3整除、 且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为 函数值返回。规定,函数中a1放个位数,a2放十位数。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include fun( int *b ) int k
314、,a1,a2,i=0; for(k=10; k=55; k+) /*found*/ a2=k/1O; a1=k-a2*10; if(k%3=0 & a2=5)|(k%3=0 & a1=5) bi=k; i+; /*found*/ return k; main( ) int a100,k,m; m=fun( a ); printf(The result is :n); for(k=0; km; k+) printf(%4d,ak); printf(n); 解题思路: 第一处: 取当前变量k的十位数字上的数,所以应改为:a2=k/10;。 第二处: 要求统计个数并存入变量i中,最后返回i,所以应改
315、为:return i;。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字 符串尾部的*号全部删除,前面和中间的*号不删除。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内 容应当是:*A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a ) main() char s81; printf(Enter a string:
316、n);gets(s); fun( s ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察字符串的移动。 1. 使用while循环语句和字符串指针p扫描出尾部的*号。 2. 定义两个字符串中间变量s和t,其中s是存放*号后面的字符串,t是存放*号字符串。 3. 最后利用字符串拷贝和连接,重新组成字符串a。 参考答案: void fun( char *a ) char *p = a ; while(*p) p+ ; p- ; while(*p = *) p- ; p+ ; *p = 0 ; 第44套: 函数fun的功
317、能是进行数字字符转换。若形参ch中是数字字符09, 则 0转换成9,1转换成8,2转换成7,9转换成0;若是其它 字符则保持不变;并将转换后的结果作为函数值返回。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include /*found*/ _1_ fun(char ch) /*found*/ if (ch=0 & _2_) /*found*/ return 9- (ch-_3_); return ch ; main() char c1, c2; pri
318、ntf(nThe result :n); c1=2; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=8; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2); c1=a; c2 = fun(c1); printf(c1=%c c2=%cn, c1, c2); 解题思路: 第一处:要求返回处理好的字符,所以应填:char。 第二处:判断该字符是否是数字,所以应填:ch=9。 第三处:只要减去0的ASCII值,即可得到要求的结果,所以应填:0。 * 给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字
319、符复制到b 中,要求每复制三个字符之后插入一个空格。 例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK, 调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include void fun(char *p, char *b) int i, k=0; while(*p) i=1; while( i=3 & *p ) /*found*/ bk=p; k+; p+; i+; if(*p) /*found*/ bk+= ; bk=0; mai
320、n() char a80,b80; printf(Enter a string: ); gets(a); printf(The original string: ); puts(a); fun(a,b); printf(nThe string after insert space: ); puts(b); printf(nn); 解题思路: 第一处:把指针p所指的值赋值给bk中。 第二处:把空格字符赋值给bk+中,而不是一个空格的字符串。 * N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头 节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。 例如,若学生的成
321、绩是:85,76,69,85,91,72,64,87, 则平均分应当 是:78.625。 注意: 部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include #include #define N 8 struct slist double s; struct slist *next; ; typedef struct slist STREC; double fun( STREC *h ) STREC * creat( double *s) STREC *h,*p,*q; int i=0; h
322、=p=(STREC*)malloc(sizeof(STREC);p-s=0; while(is=si; i+; p-next=q; p=q; p-next=0; return h; outlist( STREC *h) STREC *p; p=h-next; printf(head); do printf(-%4.1f,p-s);p=p-next; while(p!=0); printf(nn); main() double sN=85,76,69,85,91,72,64,87,ave; STREC *h; h=creat( s ); outlist(h); ave=fun( h ); pri
323、ntf(ave= %6.3fn,ave); NONO(); 解题思路: 本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。 参考答案: #include #include double fun( STREC *h ) STREC *p=h-next; /* 由于头结点中没有存放数据 */ double av=0.0; /* 对计算成绩平均值的变量进行初始化 */ int n = 0 ; while(p!=NULL) /* 判断链表是否结束 */ av = av + p-s ; /* 对成绩进行累加 */ p=p-next; /* 到下一个结点位置 */ n+; /* 人数加1 *
324、/ av /= n ; /* 计算成绩平均值 */ return av ; /* 返回成绩平均值 */ 第45套: 函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a0、 a1、a2、中,把奇数从数组中删除,偶数个数通过函数值返回。例如: 若a所指数组中的数据最初排列为:9、1、4、2、3、6、5、8、7,删除奇数后a 所指数组中的数据为:4、2、6、8,返回值为4。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #define
325、 N 9 int fun(int a, int n) int i,j; j = 0; for (i=0; in; i+) /*found*/ if (_1_= 0) /*found*/ _2_ = ai; j+; /*found*/ return _3_; main() int bN=9,1,4,2,3,6,5,8,7, i, n; printf(nThe original data :n); for (i=0; iN; i+) printf(%4d , bi); printf(n); n = fun(b, N); printf(nThe number of even :%dn, n); pr
326、intf(nThe even :n); for (i=0; i1) 例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14。 请改正程序中的错误,使它能得出正确结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 给定源程序: #include /*found*/ fun ( n ) int c; /*found*/ if(n=1) c = 10 ; else c= fun(n-1)+2; return(c); main() int n; printf(Enter n : ); scanf(%d,&n); printf(The result : %dnn, fu
327、n(n); 解题思路: 第一处:形参n没有定义类型,所以应改为:fun (int n)。 第二处:判断相等的符号是=。 * 假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字 符串中尾部的*号不得多于n个;若多于n个,则删除多余的*号;若少于或等于n个, 则什么也不做, 字符串中间和前面的*号不删除。 例如,字符串中的内容为:*A*BC*DEF*G*,若n的值为4,删除后, 字符串中的内容应当是:*A*BC*DEF*G*;若n的值为7,则字符串中的内容仍 为:*A*BC*DEF*G*。n的值在主函数中输入。在编写函数时,不得使用C 语言提供的字符串函数。 注意: 部分源程序
328、在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include void fun( char *a,int n ) main() char s81; int n; printf(Enter a string:n);gets(s); printf(Enter n : );scanf(%d,&n); fun( s,n ); printf(The string after deleted:n);puts(s); NONO(); 解题思路: 本题是考察字符串的操作。 1. 使用while循环语句和字符串指针p扫描
329、出尾部的*号。 2. 找出字符串最右边字母后出现*的第1位置。 3. 使用while循环来处理右边*是否大于n个,若大于,则取n个*。 4. 最后给字符串加上结束符。 参考答案: void fun( char *a,int n ) char *p=a ; int j=0; while(*p) p+; p-; /* 字符串的长度 */ while(*p = *) p-; /* 字符串右的* */ p+; while(jn & *p) p+ ; j+; *p = 0 ; 第46套: 给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的 字符串按由长到短的顺序排序,并输出排序结果
330、。ss所指字符串数组中共有N个字 符串,且串长小于M。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include #define N 5 #define M 8 void fun(char (*ss)M) char *psN,*tp; int i,j,k; for(i=0; iN; i+) psi=ssi; for(i=0; iN-1; i+) /*found*/ k= _1_ ; for(j=i+1; jN; j+) /*found
331、*/ if(strlen(psk) strlen(_2_) ) k=j; /*found*/ tp=psi; psi=psk; psk= _3_ ; printf(nThe string after sorting by length:nn); for(i=0; iN; i+) puts(psi); main() char chNM=red,green,blue,yellow,black; int i; printf(nThe original stringnn); for(i=0;iN;i+)puts(chi); printf(n); fun(ch); 解题思路: 本题是按字符串的长短进行排
332、序。 第一处:外循环每循环一次,k应保存当前的i值,所以应填:i。 第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:psj。 第三处:交换内容,所以应填:tp。 * 已知一个数列从第0项开始的前三项分别为0,0,1,以后的各项都是其相邻 的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的 平方根之和。n的值通过形参传入。 例如,当n10时,程序的输出结果应为:23.197745。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include #include /*f
333、ound*/ fun(int n) double sum, s0, s1, s2, s; int k; sum = 1.0; if (n = 2) sum = 0.0; s0 = 0.0; s1 = 0.0; s2 = 1.0; for (k = 4; k = n; k+) s = s0 + s1 + s2; sum += sqrt(s); s0 = s1; s1 = s2; s2 = s; /*found*/ return sum main ( ) int n; printf(Input N=); scanf(%d, &n); printf(%fn, fun(n) ); 解题思路: 第一处:
334、由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽略,其他必须定义返回的类型,所以要在此行前加上double或float。 第二处:该行缺少分号。 * 编写函数fun,它的功能是计算下列级数和,和值由函数值返回。 例如,当n = 10,x0.3时,函数值为1.349859。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun 的花括号中填入你编写的若干语句。 给定源程序: #include #include double fun(double x , int n) main() printf(%fn, fun(0.3
335、,10); NONO(); 解题思路: 本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并把结果存入变量s中,最后把s作为函数值返回。其中,jc函数是计算阶乘的。 参考答案: #include #include long jc(int n) long s = 1 ; int i ; for(i = 1 ; i = n ; i+) s *= i ; return s ; double fun(double x , int n) double s = 1.0, y = x ; int i ; for(i = 1 ; i = n ; i+) s += y / (dou
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2012 二级 语言 上机 题库 南开 最新