1、全国计算机等级考试二级C语言 考前冲刺讲座,主 讲 人:张一涛 地 点:西北工业大学长安校区 承办单位:西安智信教育,全国计算机等级考试二级C语言,上机考试 程序填空题( 30 分) 程序修改题( 30 分) 程序设计题( 40 分),程 序 题,函数fun的功能是:对指定字符在字符串a中出现的次数进行统计,统计的数据存到b数组中。其中:字符a出现的次数存放到b0中, 字符b出现的次数存放到b1 中,字符c出现的次数存放到b2中,字符d出现的次数存放到b3中,字符e出现的次数存放到b4中,其它字符出现的次数存到b5中。例如,当a中的字符串为:“bacd1b+ddep”,调用该函数后,b中存放数
2、据应是:1、2、1、3、1、3。注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include void fun(char *a, int b) int i;for(i=0;i=a ,main() int i, b6; char a100 = “bacd1b+ddep“;clrscr();fun(a, b);printf(“The result is: “);for (i=0; i6; i+) printf(“%d “, bi);printf(“n“);NONO()
3、; ,函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的百位和个位上。例如,当a45,b=12。调用该函数后,c=4152。 注意: 部分源程序存在文件PROG1.C中。数据文件IN1.DAT中的数据不得修改。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include void fun(int a, int b, long *c) *c=a/10*1000+b/10*100+a%10*10+b%10; ,ma
4、in() int a,b; long c;clrscr();printf(“Input a, b:“); scanf(“%d%d“, ,函数fun的功能是: 将s所指字符串中除了下标为偶、同时ASCII值也为偶数的字符外,其余的全都删除;串中剩余字符所形成的一个新串放在t所指的数组中。 例如,若s所指字符串中的内容为:“ABCDEFG123456”,其中字符A的ASCII码值为奇数,因此应当删除;其中字符B的ASCII码值为偶数,但在数组中的下标为奇数,因此也应当删除;而字符2的ASCII码值为偶数,所在数组中的下标也为偶数,因此不应当删除,其它依此类推。最后t所指的数组中的内容应是:“246
5、”。注意: 部分源程序存在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include void fun(char *s, char t) int i,j=0;for(i=0;si!=0;i+)if(si%2=0 ,main() char s100, t100;clrscr();printf(“nPlease enter string S:“); scanf(“%s“, s);fun(s, t);printf(“nThe result is: %sn“, t);NONO(); ,数组题
6、的主要考点,求一维、二维数组的最大值或最小值以及所在的下标 数组元素的平均值、查找数组元素 二维数组的转置、上三角或下三角清0、周边元素求0 将一组数据存放到数组中去。,将一组数据存放到数组中,请编写一个函数 void fun(char *tt, int pp),统计在tt字符串中 a 到 z 26个字母各自出现的次数,并依次放在pp所指数组中。 例如,当输入字符串:abcdefgabcdeabc 后,程序的输出结果应该是: 3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数mai
7、n和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include void fun(char *tt, int pp) int i,k;for(k=0;k=a ,main( ) char aa1000 ;int bb26, k, n ;clrscr() ;printf( “nPlease enter a char string:“ ) ; scanf(“%s“, aa) ;fun(aa, bb ) ;for ( k = 0 ; k 26 ; k+ ) printf (“%d “, bbk) ;printf( “n“ ) ;NONO ( ) ; ,求平
8、均分并将低于平均分的数据存放到数组中,m个人的成绩存放在score数组中,请编写函数fun,它的功能是:将低于平均分的人数作为函数值返回,将低于平均分的分数放在below所指的数组中。例如,当score数组中的数据为:10、20、30、40、50、60、70、80、90时,函数返回的人数应该是4, below中的数据应为:10、20、30、40。注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include int fun(int score, int m, in
9、t below) int i,c=0;double sum=0.0;for(i=0;im;i+)sum+=scorei;sum/=m;for(i=0;im;i+)if(scoreisum)belowc+=scorei;return c; ,main( ) int aaM, n, k;clrscr();fun ( 50, aa, ,二维数组的上三角清0 ,程序定义了NN的二维数组,并在主函数中自动赋值。请编写函数fun( int aN),函数的功能是:使数组右上半三角元素中的值全部置成0 。例如:a 数组中的值为| 1 9 7 | | 0 0 0 |a = | 2 3 8 | 则返回主程序后a数
10、组中的值应为 | 2 0 0 | 4 5 6 | | 4 5 0 |注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include #define N 5 int fun ( int aN ) int i,j;for(i=0;iN;i+)for(j=i;jN;j+)aij=0; ,main ( ) int aNN, i, j;clrscr();printf(“* The array *n“);for ( i =0; iN; i+ ) for ( j =0; jN
11、; j+ ) aij = rand()%20; printf( “%4d“, aij ); printf(“n“);fun ( a );printf (“THE RESULTn“);for ( i =0; iN; i+ ) for ( j =0; jN; j+ ) printf( “%4d“, aij );printf(“n“);NONO ( ); ,字符串数组的主要考点,字符数组的逆置 删除数组中的一个或一种元素 字符数组的大小写转换 比较两个字符串的长度 两个字符串的连接。,请编一个函数fun(char *s),函数的功能是把字符串中的内容逆置。 例如:字符串中原有的字符串为:abcdef
12、g,则调用该函数后, 串中的内容为:gfedcba。例如:字符串中原有的字符串为:abcdefg,则调用该函数后, 串中的内容为:gfedcba。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include #define N 81 fun ( char *s ) int i=0,j=strlen(s)-1;char t;while(ij)t=si;si=sj;sj=t;i+;j-; ,main( ) char aN;clrscr( );printf ( “
13、Enter a string : “ ); gets ( a );printf ( “The original string is : “ ); puts( a );fun ( a );printf(“n“);printf ( “The string after modified : “);puts ( a );NONO( ); ,规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。 例如,字符串中的内容为:*A*BC*DEF*G*,删除后,字符串中的内容应当是:A*BC*DEF*G*。在编写函数时,不得使用C语言提供的字符串
14、函数。注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include void fun( char *a ) int i=0,j=0;while(ai=*)i+;while(ai!=0)aj+=ai+;aj=0; ,main() char s81;printf(“Enter a string:n“);gets(s);fun( s );printf(“The string after deleted:n“);puts(s);NONO(); ,数学题的主要考点,素数、阶乘、平方根 多项
15、式、函数值 公式 一个排列值。,素数主要考点,判断一个数是否是素数 在一定范围内的所有素数存放到数组中 求一定范围内素数的平均值。,编写函数int fun(int lim, int aaMAX), 该函数的功能是求出小于或等于lim的所有素数并放在aa数组中, 该函数返回所求出的素数的个数。注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #define MAX 100 int fun(int lim, int aaMAX) int i,j,c=0;for(i=2;i=li
16、m;i+) for(j=2;j=i;j+)if(i%j=0)break;if(i=j)aac+=i;return c; ,main() int limit, i, sum;int aaMAX ;clrscr() ;printf(“输入一个整数“);scanf(“%d“, ,求一个排列的值,编写函数fun,它的功能是:计算并输出下列级数和:1 1 1S = + + + 12 23 n(n+1)例如,当n = 10时,函数值为:0.909091。 注意: 部分源程序在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#incl
17、ude #include double fun( int n ) double s=0.0;double i=1;for(i=1;i=n;i+)s=s+1.0/(i*(i+1);return s; ,main() /* 主函数 */ clrscr();printf(“%fn“, fun(10);NONO(); ,结构体主要考点,求结构体数组的成员的最低分 求结构体数组的成员的最高分 求结构体数组的成员的平均分,已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数 fun,函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。 已给出函数的
18、首部,请完成该函数。注意: 部分源程序存在文件PROG1.C文件中。请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。,#include #include #include #define N 10 typedef struct ss char num10; int s; STU; fun( STU a, STU *s ) int i;STU t=a0;for(i=0;it.s)t=ai;*s=t; ,main ( ) STU aN= “A01“,81,“A02“,89,“A03“,66,“A04“,87,“A05“,77,“A06“,90,“A07“
19、,79,“A08“,61,“A09“,80,“A10“,71 , m ;int i;clrscr();printf(“* The original data *n“);for ( i=0; i N; i+ )printf(“No = %s Mark = %dn“, ai.num,ai.s);fun ( a, ,链表主要考点,求链表的平均分 在链表中查找接点,N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。例如,若学生的成绩是:85,76,69,85,91,72,64,87;则平均分应当是:78.625。注意:
20、部分源程序在文件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 *p;double sum=0.0;p=h-next;while(p!=0)sum=sum+p-s;p=p-next;return sum/N; ,STREC * creat( double *s) ST
21、REC *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(“-%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
22、(h);ave=fun( h );printf(“ave= %6.3fn“,ave);NONO(); ,改 错 题,给定程序MODI1.C中函数 fun 的功能是:把在字符串s中出现的每个字符,紧随其后重复出现一次,形成一个新串放在t中,且在t中把原相邻字符的位置进行了交换。例如:当s中的字符串为:“ABCDE“时,则t中的字符串应为:“BBAADDCCEE“。请改正函数fun中的错误,使它能得出正确的结果。注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!,#include #include #include void fun (char *s, char *t) /*fou
23、nd*/int i, j; sl = strlen(s); 错误:sl没有定义。应改为:int i , j , sl; for (i=0, j=0; isl; i+=2) if (i+1 sl) t2*j = si+1; t2*j +1 = si+1;j+;,t2*j = si; t2*j +1 = si; /*found*/j-; 错误!应改为:j+;t2*sl = 0; main() char s100, t100;clrscr();printf(“nPlease enter string s:“); scanf(“%s“, s);fun(s, t);printf(“The result
24、is: %sn“, t); ,给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放到t串中,然后把s中的字符按逆序连接到t串的后面。例如:当s中的字符串为:“ABCDE“时,则t中的字符串应为:“ABCDEEDCBA“。请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!,#include #include #include void fun (char *s, char *t) int i, sl;sl = strlen(s); /*found*/for( i=0; i=s1; i +) 错误:s1没有定义。应
25、改为:for(i=0;i=sl;i+)ti = si;for (i=0; isl; i+)tsl+i = ssl-i-1;,/*found*/tsl = 0; 错误:生成的新数组是原数组的2倍。应改为 :t2*sl= 0; main() char s100, t100;clrscr();printf(“nPlease enter string s:“); scanf(“%s“, s);fun(s, t);printf(“The result is: %sn“, t); ,给定程序MODI1.C中函数 fun 的功能是:计算n!。例如,给n输入5,则输出120.000000。请改正程序中的错误,
26、使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构!,#include #include double fun ( int n ) double result = 1.0 ; /*found*/if n = = 0 错误:if语句没有括号,应改为if(n=0)return 1.0 ;while( n 1 ,main ( ) int n ;printf(“Input N:“) ;scanf(“%d“, ,给定程序MODI1.C中函数 fun 的功能是:实现两个整数的交换。 例如:给a和b分别输入:60 和 65,输出为:a = 65 b = 60请改正程序
27、中的错误,使它能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!,#include #include /*found*/ void fun ( int a, b ) 错误:实参是地址,应该使用指针, 应改为:void fun(int *a,int *b) int t; /*found*/t = b; b = a ; a = t; 错误:应交换指针所指向的内容,而不是地址值。 应改为:t=*b;*b=*a;*a=t; ,main ( ) int a, b;clrscr( );printf ( “Enter a , b : “); scanf ( “%d%d
28、“, ,给定程序MODI1.C中函数fun的功能是:从字符串s中删除所有小写字母c。请改正程序中的错误,使它能计算出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构!,#include void fun( char *s ) int i,j;for(i=j=0; si!=0; i+)if(si!=c) /*found*/sj=si; 错误:下标j没有移动,应改为sj+=si; /*found*/si=0; 错误:si不是新数组的结束位置应改为sj= 0 ,main() char s80;printf(“Enter a string: “); gets(s);p
29、rintf(“The original string: “); puts(s);fun(s);printf(“The string after deleted : “); puts(s);printf(“nn“); ,填 空 题,给定程序函数fun的功能是:将自然数1-10以及它们的平方根写到名为myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的blank1.c中。,#include #include int fun(char *fname ) FILE *fp; int i,n
30、; float x;if(fp=fopen(fname, “w“)=NULL) return 0;for(i=1;i=10;i+) /*found*/fprintf(_1_,“%d %fn“,i,sqrt(double)i); 填写为:fprintf(fp,“%d %fn“,i,sqrt(double)i); printf(“nSucceed!!n“);,/*found*/_2_; 填写为:fclose(fp); printf(“nThe data in file :n“); /*found*/if(fp=fopen(_3_,“r“)=NULL) 填写为:if(fp=fopen(fname,“
31、r“)=NULL) return 0;fscanf(fp,“%d%f“, ,fclose(fp);return 1; main() char fname=“myfile3.txt“;fun(fname); ,给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的blank1.c中。 不得增行或删行,也不得改程序的结构!,#include #include
32、 #define N 5 typedef struct int num;char name10;char tel10; STYPE; void check(); /*found*/ int fun(_1_ *std) 填写为:int fun(STYPE *std), /*found*/ 填写为:FILE *fp; int i;_2_ *fp; int i;if(fp=fopen(“myfile5.dat“,“wb“)=NULL)return(0);printf(“nOutput data to file !n“);for(i=0; iN; i+) /*found*/fwrite(,fclose
33、(fp);return (1); main() STYPE s10= 1,“aaaaa“,“111111“,2,“bbbbb“,“222222“,3,“ccccc“,“333333“,4,“ddddd“,“444444“,5,“eeeee“,“555555“;int k;k=fun(s);if (k=1) printf(“Succeed!“); check(); else,printf(“Fail!“); void check() FILE *fp; int i;STYPE s10;if(fp=fopen(“myfile5.dat“,“rb“)=NULL) printf(“Fail !n“);
34、 exit(0); printf(“nRead file and output to screen :n“);printf(“n num name teln“);for(i=0; iN; i+) fread( ,给定程序的功能是将在字符串s中出现、而未在字符串t中出现的字符形成一个新的字符串放在u中,u中字符按原字符串字符顺序排列,不去掉重复字符。例如:当s=“112345”,t=“2467”,u中的字符串为“1135”。请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 注意:源程序存在考生文件夹下的blank1.c中。,#include #include void fu
35、n (char *s,char *t, char *u) int i, j, sl, tl;sl = strlen(s); tl = strlen(t);for (i=0; isl; i+) for (j=0; jtl; j+),/*found*/if (si = tj) _1_ ; 填写为:break;if (j=tl) /*found*/*u+ = _2_; 填写为:*u+ = si; /*found*/_3_ = 0; 填写为:*u = 0; ,main() char s100, t100, u100;printf(“nPlease enter string s:“); scanf(“%s“, s);printf(“nPlease enter string t:“); scanf(“%s“, t);fun(s, t, u);printf(“the result is: %sn“, u); ,全国计算机等级考试二级C语言 考前冲刺讲座,主 讲 人:张一涛 地 点:西北工业大学长安校区 电 话:13679166145 电子邮件:27624638 Q Q:27624638、316261383 承办单位:瑞拓教育培训中心,