计算机等级考试二级C语言上机题集(第71~75套)
第71套
1.程序填空题
给定程序中,函数fun的功能是:将参数给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中读入,并调用库函数atoi和atof将字符串转换成相应的整数、浮点数,然后将其显示在屏幕上。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> void fun(char *s, int a, double f) { /**********found**********/ __1__ fp; char str[100], str1[100], str2[100]; int a1; double f1; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", 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 :\n%s %d %f\n",str,a1,f1); } int main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将s所指字符串中的字母转换为按字母序列的后续字母(但Z转换为A,z转换为a),其它字符不变。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun (char *s) { /**********found***********/ while(*s!='@') { if(*s>='A' & *s<='Z' || *s>='a' && *s<='z') { if(*s=='Z') *s='A'; else if(*s=='z') *s='a'; else *s += 1; } /**********found***********/ (*s)++; } } int main() { char s[80]; printf("\nEnter a string with length < 80. :\n"); gets(s); printf("\n The string : \n\n "); puts(s); fun ( s ); printf ("\n\n The Cords :\n\n "); puts(s); return 0; }
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。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 80 void NONO(void); void fun(int *w,int p,int n) { } int main() { int a[N]={1,2,3,4,5,6,7,8,9, 10,11,12,13,14,15}; int i,p,n=15; printf("The original data:\n"); for(i=0; i<n; i++) printf("%3d",a[i]); printf("\n\nEnter p: "); scanf("%d",&p); fun(a,p,n); printf("\nThe data after moving:\n"); for(i=0; i<n; i++) printf("%3d",a[i]); printf("\n"); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf,*wf ; int a[N], i, j, p, n ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 5 ; i++) { fscanf(rf, "%d %d", &n, &p) ; for(j = 0 ; j < n ; j++) fscanf(rf, "%d", &a[j]) ; fun(a, p, n) ; for(j = 0 ; j < n ; j++) fprintf(wf, "%3d", a[j]) ; fprintf(wf, "\n") ; } fclose(rf) ; fclose(wf) ; }
1.(1)FILE * (2)fclose(fp) (3)fp 2. while(*s!='\0') s++; 3. void fun(int *w,int p,int n) { int i,j,t; for (i=0;i<=p;i++) { t=w[0]; for (j=0;j<n-1;j++) w[j]=w[j+1]; w[n-1]=t; } }
第72套
1.程序填空题
给定程序中,函数fun的功能是:在形参ss所指字符串数组中,查找含义形参substr所指子串的所有字符串并输出,若没找到则输出相应信息。ss所指字符串数组中共有N个字符串,且串长<M。
程序中库函数strstr(s1,s2)的功能是在s1串中查找s2子串,若没有,函数值为0,若有,为非0。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <string.h> #define 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(ss[i], __2__)!=NULL) { find=1; puts(ss[i]); printf("\n"); } /**********found**********/ if (find==__3__) printf("\nDon't found!\n"); } int main() { char x[N][M]={"BASIC","C langwage","Java", "QBASIC","Access"},str[M]; int i; printf("\nThe original string\n\n"); for(i=0;i<N;i++)puts(x[i]); printf("\n"); printf("\nEnter a string for search : "); gets(str); fun(x,str); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:统计字符串中各元音字母(即A、E、I、O、U)的个数。注意:字母不分大、小写。
例如,若输入:This is a boot,则输出应为:1 0 2 2 0。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> void fun(char *s,int num[5]) { int k, i=5; for ( k = 0; k<i; k++ ) /**********found**********/ num[i]=0; for (; *s; s++) { i = -1; /**********found**********/ switch ( s ) { case 'a': case 'A': {i=0; break;} case 'e': case 'E': {i=1; break;} case 'i': case 'I': {i=2; break;} case 'o': case 'O': {i=3; break;} case 'u': case 'U': {i=4; break;} } if (i >= 0) num[i]++; } } int main() { char s1[81]; int num1[5], i; printf( "\nPlease enter a string: " ); gets( s1 ); fun ( s1, num1 ); for ( i=0; i < 5; i++ ) printf ("%d ",num1[i]); printf ("\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:求出二维数组周边元素之和,作为函数值返回。
例如,二维数组中的值为
1 3 5 7 9
2 9 9 9 4
6 9 9 9 8
1 3 5 7 0
则函数值为61。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 4 #define N 5 void NONO(void); int fun ( int a[M][N]) { } int main( ) { int aa[M][N]={{1,3,5,7,9},{2,9,9,9,4},{6,9,9,9,8},{1,3,5,7,0}}; int i, j, y; printf ( "The original data is : \n" ); for ( i=0; i<M; i++ ) { for ( j =0; j<N; j++ ) printf( "%6d", aa[i][j] ); printf ("\n"); } y = fun ( aa ); printf( "\nThe sum: %d\n" , y ); printf("\n"); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ int i, j, y, k, aa[M][N] ; FILE *rf, *wf ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(k = 0 ; k < 10 ; k++) { for(i = 0 ; i < M ; i++) for(j = 0 ; j < N ; j++) fscanf(rf, "%d", &aa[i][j]) ; y = fun ( aa ); fprintf(wf, "%d\n", y) ; } fclose(rf) ; fclose(wf) ; }
1.(1)N (2)substr (3)0 2. num[k]=0; switch ( *s ) 3. int fun ( int a[M][N]) { int s=0,i; for (i=0;i<N;i++) s+=a[0][i]+a[M-1][i]; for (i=1;i<M-1;i++) s+=a[i][0]+a[i][N-1]; return s; }
第73套
1.程序填空题
给定程序中,函数fun的功能是:将形参给定的字符串、整数、浮点数写到文本文件中,再用字符方式从此文本文件中逐个读入并显示在屏幕上。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s, int a, double f) { /**********found**********/ __1__ fp; char ch; fp = fopen("file1.txt", "w"); fprintf(fp, "%s %d %f\n", s, a, f); fclose(fp); fp = fopen("file1.txt", "r"); printf("\nThe result :\n\n"); ch = fgetc(fp); /**********found**********/ while (!feof(__2__)) { /**********found**********/ putchar(__3__); ch = fgetc(fp); } putchar('\n'); fclose(fp); } int main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:读入一个字符串(长度<20),将该字符串中的所有字符按ASCII码升序排序后输出。
例如,若输入:edcba,则应输出:abcde。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #define M 20 void fun(char t[]) { char c; int i,j; /************found************/ for(i=strlen(t);i;i--) for(j=0;j<i;j++) /************found************/ if(t[j]<t[j+1]) { c=t[j]; t[j]=t[j+1]; t[j+1]=c; } } int main() { char s[81]; printf("\nPlease enter a character string:"); gets(s); printf("\n\nBefore sorting:\n \"%s\"",s); fun(s); printf("\nAfter sorting decendingly:\n \"%s\"",s); return 0; }
3.程序设计题
学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中。编写函数fun,它的功能是:把指定分数范围内的学生数据放在h所指的数组中,分数范围内的学生人数由函数值返回。
例如,输入的分数为60 69,则应当把分数在60到69的学生数据输出(包含60分和69分的学生数据)。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define N 16 typedef struct { char num[10]; int s; } STREC; int fun(STREC *a,STREC *b,int l,int h) { } int main() { STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69}, {"GA04",85},{"GA01",91},{"GA07",72}, {"GA08",64},{"GA06",87},{"GA015",85}, {"GA013",91},{"GA012",64},{"GA014",91}, {"GA011",91},{"GA017",64},{"GA018",64}, {"GA016",72}}; STREC h[N];FILE *out; int i,n,low,heigh,t; printf("Enter 2 interger 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 student's data between %d--%d:\n",low,heigh); for(i=0;i<n;i++) printf("%s %4d\n",h[i].num,h[i].s); printf("\n"); out=fopen("out.dat","w"); n=fun(s,h,80,98); fprintf(out,"%d\n",n); for(i=0;i<n;i++) fprintf(out,"%s %4d\n",h[i].num,h[i].s); fclose(out); return 0; }
1.(1)FILE * (2)fp (3)ch 2. for(i=strlen(t)-1;i;i--) if(t[j]>t[j+1]) 3. int fun(STREC *a,STREC *b,int l,int h) { int i,j=0; for (i=0;i<N;i++) if (a[i].s>=l && a[i].s<=h) b[j++]=a[i]; return j; }
第74套
1.程序填空题
给定程序中,函数fun的功能是:将带头结点的单向链表结点数据域中的数据从小到大排序。即若原链表从头至尾结点数据域依次为:10、4、2、8、6,排序后,从头至尾结点数据域依次为:2、4、6、8、10。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #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; 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; i<N; i++) { q=(NODE *)malloc(sizeof(NODE)); q->data=a[i]; 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==NULL) printf("The list is NULL!\n"); else { printf("\nHead "); do { printf("->%d", p->data); p=p->next; } while(p!=NULL); printf("->End\n"); } } int main() { NODE *head; int a[N]= {0, 10, 4, 2, 8, 6 }; head=creatlist(a); printf("\nThe original list:\n"); outlist(head); fun(head); printf("\nThe list after sorting :\n"); outlist(head); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:求三个数的最小公倍数。
例如,给变量x1、x2、x3分别输入15 11 2,则输出结果应当是:330。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> int fun(int x,int y,int z) { int j,t,n,m; /************found************/ j=0; t=j%x; /************found************/ m=t%y; n=j%z; while(t!=0||m!=0||n!=0) { j=j+1; t=j%x; /************found************/ m=t%y; n=j%z; } return j; } int main() { int x1,x2,x3,j; printf("Input x1 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 :%d\n",j); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:只删除字符串前导和尾部的*号,串中字母之间的*号都不删除。形参n给出了字符串的长度,形参h给出了字符串中前导*号的个数,形参e给出了字符串中最后*号的个数。
例如,字符串中的内容为:*****A*BC*DEF*G***,删除后,字符串的内容应当为:A*BC*DEF*G。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun(char *a, int n,int h,int e) { } int main() { char s[81],*t,*f; int m=0, tn=0, fn=0; printf("Enter 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(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i ; char s[81], *t, *f ; int m=0, tn=0, fn=0; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(in, "%s", s) ; t=f=s; m=0; tn=0; fn=0; while(*t){t++;m++;} t--; while(*t=='*'){t--;tn++;} while(*f=='*'){f++;fn++;} fun(s, m, fn, tn); fprintf(out, "%s\n", s) ; } fclose(in) ; fclose(out) ; }
1.(1)h->next (2)p->next (3)> 2. j=x; m=j%y; m=j%y; 3. void fun(char *a, int n,int h,int e) { int i,j; for (j=0,i=h;i<n-e;i++) a[j++]=a[i]; a[j]='\0'; }
第75套
1.程序填空题
函数fun的功能是:把形参a所指数组中的最小值放在a[0]中,接着求出a所指数组中的最大值放在a[1]中;再把形参a所指数组中的次小值放在a[2]中,次大值放在a[3]中;其余以此类推。
例如,若a所指数组中数据最初排列为:9、1、4、2、3、6、5、8、7,则按规则移动后,数据排列为:1、9、2、8、3、7、4、6、5。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 9 void fun(int a[], int n) { int i,j, max, min, px, pn, t; for (i=0; i<n-1; i+=2) { /**********found**********/ max = min = ___1___; px = pn = i; for (j=i+1; j<n; j++) { /**********found**********/ if (max<___2___) { max = a[j]; px = j; } /**********found**********/ if (min>___3___) { min = a[j]; pn = j; } } if (pn != i) { t = a[i]; a[i] = min; a[pn] = t; if (px == i) px =pn; } if (px != i+1) { t = a[i+1]; a[i+1] = max; a[px] = t; } } } int main() { int b[N]={9,1,4,2,3,6,5,8,7}, i; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); fun(b, N); printf("\nThe data after moving :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> #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= O) n++; s++; } return n; } int main() { char a[N],b[N]; int m; printf("\nPlease enter string a : "); gets(a); printf("\nPlease enter substring b : "); gets( b ); m=fun(a, b); printf("\nThe result is : m = %d\n",m); return 0; }
3.程序设计题
编写函数fun,它的功能是:将放在字符串数组中的M个字符串(每串的长度不超过N),按顺序合并为一个新的字符串。
例如,字符串数组中的M个字符串为:
AAAA
BBBBBBB
CC
则合并后的字符串中的内容应为:AAAABBBBBBBCC。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define M 3 #define N 20 void NONO(void); void fun(char a[M][N], char *b) { } int main() { char w[M][N]={"AAAA","BBBBBBB","CC"},a[100]; int i ; printf("The string:\n"); for(i=0; i<M; i++) puts(w[i]); printf("\n"); fun(w,a); printf("The A string:\n"); printf("%s",a);printf("\n\n"); NONO(); } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; char w[M][N], a[100] ; int i ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(rf, "%s %s %s", w[0], w[1], w[2]) ; fun(w, a) ; fprintf(wf, "%s\n", a) ; } fclose(rf) ; fclose(wf) ; }
1.(1)a[i] (2)a[j] (3)a[j] 2. r=t; if(*r=='\0') 3. void fun(char a[M][N], char *b) { int i,j,k=0; for (i=0;i<M;i++) for (j=0;a[i][j]!='\0';j++) b[k++]=a[i][j]; b[k]='\0'; }