全国计算机等级考试2级C语言上机题库(共96页).doc
精选优质文档-倾情为你奉上第一套:1.1 填空 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶函数的数去除,剩余的书按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回所指变量。void fun(unsigned long *n) unsigned long x=0, i; int t; i=1; while(*n)/*found*/ t=*n % 10 ;/*found*/ if(t%2!= 0) x=x+t*i; i=i*10; *n =*n /10; /*found*/ *n=x; 1.2 改错 给定程序MODI1.C 中函数fun的功能是:计算n!。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 ;1.3 程序 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。long fun ( char *p) /* 以下代码仅供参考 */ int i, len, t; /* len为串长,t为正负标识 */ long x=0; len=strlen(p); if(p0='-') t=-1; len-; p+; else t=1; /* 以下完成数字字符串转换为一个数字 */ while(*p) x = x*10-48+(*p+); return x*t; 第二套:2.1填空 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数些到文本文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。void fun(char *s, int a, double f)/*found*/ FILE * 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(fp) /*found*/ putchar(ch); ch = fgetc(fp); putchar('n'); fclose(fp); 2.2 改错 给定程序MODI1.C中函数fun的功能是:依次取出字符串中所有数字字符,形成新的字符串,并取代原字符串。请改正函数fun中指定部位的错误,使它能得出正确的结果。#include <stdio.h>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'2.3程序 请编写函数fun,函数的功能是:将M行N列的二维数组中的字符数据,按列的顺序依次放到一个字符串中。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' 第三套:3.1填空 程序通过定义学生机构体变量,存储了学生的学号,姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是重写形参filename所指文件中最后一个学生的数据,即用新的学生数据覆盖该学生原来的数据,其他学生的数据不变。void fun(char *filename, STU n) FILE *fp;/*found*/ fp = fopen(filename, "rb+");/*found*/ fseek(fp, -1L*sizeof(STU), SEEK_END);/*found*/ fwrite(&n, sizeof(STU), 1, fp); fclose(fp);3.2改错 给定程序MODI1.C中的函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0到m-1的值。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; i<=n; i+) s=(NODE *)malloc(sizeof(NODE); s->data=rand()%m; s->next=p->next; p->next=s; p=p->next; /*found*/ return h;3.3程序 请编写函数fun,函数的功能是:统计一行字符串中单词的个数,作为函数值返回。一行字符串在主函数中输入,规定所有单词由小写字母组成,单词之间由若干个空格隔开,一行的开始没有空格。(有问题)int fun( char *s) int k = 1 ; while(*s) if (*s = ' ') k+ ; s+ ; return k ; 第四套:4.1填空 程序通过定义学生结构体变量,存储了学生的学号、姓名和3门课的成绩。所有学生数据均以二进制方式输出到文件中。函数fun的功能是从形参filename所指的文件中读入学生数据,并按照学号从小到大排列后,再用二进制方式把排序后的学生数据输出到filename所指的文件中,覆盖原来的文件内容。#define N 5typedef struct student long sno; char name10; float score3; STU;void fun(char *filename) FILE *fp; int i, j; STU sN, t;/*found*/ fp = fopen(filename, "rb"); fread(s, sizeof(STU), N, fp); fclose(fp); for (i=0; i<N-1; i+) for (j=i+1; j<N; j+)/*found*/ if (si.sno >sj.sno) t = si; si = sj; sj = t; fp = fopen(filename, "wb");/*found*/ fwrite(s, sizeof(STU), N, fp); fclose(fp);4.2改错 给定程序MODI1.C中函数fun的功能是:在字符串的最前端假如n个*号,形成新串,并且覆盖原串。注意:字符串的长度最长允许为79。void fun ( char s, int n ) char a80 , *p; int i;/*found*/ p=s; for(i=0; i<n; i+) ai='*' do ai=*p; i+;/*found*/ while(*p+); ai=0; strcpy(s,a);4.3程序 请编写函数fun,函数的功能是:统计各年龄段的人数。N个年龄通过调用随机函数获得,并放在主函数的age数组中;要求函数把0至9岁年龄段的人数放在d0中,把10至19岁年龄段的认输放在d1中,把20至29岁年龄段的人数放在d2中,期于依此类推,把100岁(含100)以上年龄的人数都放在d10中。结果在主函数中输出。void fun( int *a, int *b) int i, j ; for(i = 0 ; i < M ; i+) bi = 0 ; for(i = 0 ; i < N ; i+) j = ai / 10 ; if(j > 10) bM - 1+ ; else bj+ ; 第五套:5.1填空 给定程序中,函数fun的功能是将参数给定的字符串、整数、浮点数写到文本文件中,再用字符串方式从此文本文件中逐个读入,并调用库函数atoi和atof将字符串转换成响应的整数、浮点数,然后将其显示在屏幕上。void fun(char *s, int a, double f)/*found*/ FILE * fp; char str100, str1100, str2100; int a1; double f1; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %fn", s, a, f);/*found*/ fclose(fp) ; fp = fopen("file1.txt", "r");/*found*/ fscanf(fp,"%s%s%s", str, str1, str2); fclose(fp); a1 = atoi(str1); f1 = atof(str2); printf("nThe result :nn%s %d %fn", str, a1, f1);5.2改错 给定程序MODI1.C中函数fun的功能是:对N名学生的学习成绩按从高到低的顺序找出前m(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; i<N; i+) bi=ai; for(k=0; k<m; k+) for(i=j=0; i<N; i+) if(bi.s > bj.s) j=i;/*found*/ tk=bj; bj.s=0; return t;5.3程序 请编写函数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。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 ;第六套:6.1填空 给定程序中:函数fun的功能是根据形参i的值返回某个函数的值。当调用正确时,程序输出: x1=5., x2=3., x1*x1+x1*x2=40.。double f1(double x) return x*x; double f2(double x, double y) return x*y; /*found*/double fun(int i, double x, double y) if (i=1)/*found*/ return f1(x); else/*found*/ return f2(x, y);6.2改错 给定程序MODI1.C中函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。/*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(tl>sl) return t; else return s;6.3程序 请编写函数fun函数的功能是:移动字符串中的内容,移动的规则如下:把第1到第m个字符,平移到字符串的最后,把第m+1到最后的字符移动到字符串的前部。例如,字符串中原由的内容为:ABCDEFGHIJK,m的值为3,则移动后,字符串中的内容应该是DEFGHIJKABC。void fun1(char *w) /* 本函数的功能是将字符串中字符循环左移一个位置 */ int i; char t; t=w0; for(i=0;i<strlen(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); 第七套:7.1填空 程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的信息。函数fun的功能是输出这位学生的信息。typedef struct int num; char name9; char sex; struct int year,month,day ; birthday; float score3;STU;/*found*/void show(STU tt) int i; printf("n%d %s %c %d-%d-%d", tt.num, tt.name, tt.sex, tt.birthday.year, tt.birthday.month, tt.birthday.day); for(i=0; i<3; i+)/*found*/ printf("%5.1f", tt.scorei); printf("n");7.2改错 给定程序MODI1.C中函数fun的功能是:求出数组中最大数和次最大数,并把最大数和a0中的数对调、次最大数和a1中的数对调。int fun ( int * a, int n ) int i, m, t, k ; for(i=0;i<2;i+) /*found*/ m=i; for(k=i+1;k<n;k+)/*found*/ if(ak>am) m=k; t=ai;ai=am;am=t; 7.3程序 请编写一个函数unsigned fun (unsigned w),w是一个大于10的无符号整数,若w是n(2)位的整数,函数求出的w的低n-1位的数作为函数值返回。例如:W值为5923,则函数返回923;W值位923则函数返回23。unsigned fun ( unsigned w ) if(w>10000) w %= 10000 ; else if(w>1000) w %= 1000 ; else if(w>100) w %= 100 ; else if(w>10) w %=10 ; return w ;第八套:8.1填空 给定程序通过定义并赋初值的方式,利用结构体变量存储了一名学生的学号、姓名和3门课的成绩。函数fun的功能是将该学生的各科成绩都乘以一个系数a。void show(STU tt) int i; printf("%d %s : ",tt.num,tt.name); for(i=0; i<3; i+) printf("%5.1f",tt.scorei); printf("n");/*found*/void modify(STU *ss,float a) int i; for(i=0; i<3; i+)/*found*/ ss->scorei *=a; 8.2改错 给定程序MODI1.C中的函数fun的功能是:求k!(k<13),所求阶乘的值作为函数值返回。例如:若K=10,则应输出:。long fun ( int k)/*found*/ if (k > 0) return (k*fun(k-1);/*found*/ else if ( k=0 ) return 1L;8.3程序 程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(int a,int n),函数的功能是:使数组左下三角元素中的值乘以n。例如:若n的值为3,a数组中的值为 则返回主程序后a数组中的值应为 。int fun ( int aN, int n ) int i, j; for(i = 0 ; i < N ; i+) for(j = 0 ; j <= i; j+) aij *= n ;第九套:9.1填空 给定程序中,函数fun的功能是将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据位:10、4、2、8、6,排序后链表接点数据域从头至尾的数据为:2、4、6、8、10。void fun(NODE *h) NODE *p, *q; int t; p = h; while (p) /*found*/ q = p->next ;/*found*/ while (q) if (p->data > q->data) t = p->data; p->data = q->data; q->data = t; q = q->next; /*found*/ p = p->next ; 9.2改错 给定程序MODI1.C中函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其他字符不变。void fun (char *s)/*found*/ while(*s) if(*s>='A' & *s<='Z' | *s>='a' && *s<='z') if(*s='Z') *s='A' else if(*s='z') *s='a' else *s += 1; /*found*/ s+; 9.3程序 请编写函数fun,函数的功能是:移动一维数组中的内容;若猪组中有N个整数,要求把下标从0到P(含P,P小于等于N-1)的数组元素平移到数组的最后。例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;P的值为3。移动后一维数组中的内容应为:5,6,7,8,9,10,1,2,3,4。void fun(int *w, int p, int n) int i, j = 0, bN ; for(i = p + 1 ; i < n ; i+) bj+ = wi ; for(i = 0 ; i <= p ; i+) bj+ = wi ; for(i = 0 ; i < n ; i+) wi= bi ;第十套:10.1填空 给定程序中,函数fun的功能是:判定形参a所指的N×N(规定N为奇数)的矩阵是否是“幻方”,若是,函数返回值为1;不四,函数返回值为0。“幻方”的判定条件是:矩阵每行、每列、主对角线及反对角线上元素之和都相等。例如,以下3×3的矩阵就是一个“幻方”: 。int fun(int (*a)N) int i,j,m1,m2,row,colum; m1=m2=0; for(i=0; i<N; i+) j=N-i-1; m1+=aii; m2+=aij; if(m1!=m2) return 0; for(i=0; i<N; i+) /*found*/ row=colum= 0; for(j=0; j<N; j+) row+=aij; colum+=aji; /*found*/ if( (row!=colum) | (row!=m1) ) return 0; /*found*/ return 1;10.2改错 给定程序MODI1.C中fun函数的功能是:根据整形形参m,计算如下公式的值。 例如,若主函数中输入5,则应输出-0.。double fun( int m ) double t = 1.0; int i; for( i = 2; i <= m; i+ )/*found*/ t = t-1.0/i;/*found*/ return t;10.3 程序 请编写一个函数,函数的功能是删除字符串中的所有空格。例如,主函数中输入“asd af aa z67”,则输出为“asdafaaz67”。int fun(char *str) char *p = str ; int i = 0 ; while(*p) if(*p != ' ') stri+ = *p ; p+ ; stri=0;第十一套:11.1填空 给定程序,函数fun的功能是将带头结点的单向链表逆置。即若原链表结点数据域从头至尾的数据位:2、4、6、8、10,逆置后,从头至尾数据域依次为:10、8、6、4、2。void fun(NODE *h) NODE *p, *q, *r;/*found*/ p = h->next;/*found*/ if (p=0) return; q = p->next; p->next = NULL; while (q) r = q->next; q->next = p;/*found*/ p = q; q = r; h->next = p; 11.2改错给定程序MODI1.C中函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。int fun(char *s, char *t) int n; char *p , *r; n=0; while ( *s ) p=s;/*found*/ r=t; while(*r) if(*r=*p) r+; p+; else break;/*found*/ if(*r= 0) n+; s+; return n;11.3程序fun函数功能:将放在字符串数组中的M个字符串(每串的长度不超过N),将顺序合并组成一个新的字符串。函数fun中给出的语句仅供参考。例如,字符串数组中的M个字符串为AAAA BBBBBBB CCC则合并后的字符串的内容应是:AAAABBBBBBBCCC。提示:strcat(a,b)功能是将字符串b复制到字符串a的串尾上,成为一个新串。 void fun(char aMN, char *b) /* 以下代码仅供参考 */ int i; *b=0; for(i = 0 ; i < M ; i+) strcat(b, ai) ;第十二套:12.1填空 给定程序,函数fun的功能是将不带头结点的单向链表逆置。即若原链表结点数据域从头至尾的数据位:2、4、6、8、10,逆置后,从头至尾数据域依次:10、8、6、4、2。typedef struct node int data; struct node *next; NODE;/*found*/NODE * 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->next; q->next = p; p = q;/*found*/ q = r ; return p;12.2改错 给定程序MODI1.C中函数fun的功能是:计算s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。例如:字符串中的数据为:AABBCCDDDEEFF,则输出应当是:ABBCDDEFF。void fun(char *s, char t) int i, j=0; for(i=0; i<strlen(s); i+)/*found*/ if(i%2 | si%2=0) tj+=si;/*found*/ tj='0' 12.3程序 程序定义了M×N的二维数组,按列的顺序依次放到一维数组中。例如:二维数组中的数据为 则一维数组中为:33 44 55 33 44 55 33 44 55 33 44 55。同2.3void fun(int (*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.1填空给定程序中,函数fun的功能是将不带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表结点数据域从头至尾的数据位:10、4、2、8、6,排序后链表接点数据域从头至尾的数据为:2、4、6、8、10。typedef struct node int data; struct node *next; NODE;void fun(NODE *h) NODE *p, *q; int t;/*found*/ p = h->next ; while (p) /*found*/ q = p->next ; while (q) /*found*/ if (p->data >= q->data) t = p->data; p->data = q->data; q->data = t; q = q->next; p = p->next; 13.2 改错 给定程序MODI1.C是建立一个带头节点的单向链表,并用随机函数为个节点数据域赋值。函数fun的作用是求出单向链表节点(不包括头节点)数据域中的最大值,并且作为函数值返回。typedef struct aa int data; struct aa *next; NODE;fun ( NODE *h ) int max=-1; NODE *p;/*found*/ p=h->next; while(p) if(p->data>max ) max=p->data;/*found*/ p=p->next; return max; 13.3 程序程序定义了M×N的二维数组中数据,按行的顺序依次放到一维数组中。一维数组中数据的个数放在形参n所指的存储单元中。例如:二维数组中的数据为 则一维数组中为:33 33 33 33 44 44 44 44 55 55 55 55。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 ;第十四套:14.1填空 给定程序中:函数fun的功能是用函数指向要调用的函数,并进行调用。规定在空2处使f指向函数f1,在2处使f指向函数f2。当调用正确时,程序输出: x1=5., x2=3., x1*x1+x1*x2=40.。double f1(double x) return x*x; double f2(double x, double y) return x*y; double fun(double a, double b) /*found*/ double (*f