计算机等级考试二级C语言上机题集(第26~30套)
第26套
1.程序填空题
给定程序中,函数fun的功能是:计算
例如,若x=2.5,n=15时,函数值为:1.917915。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <math.h> double fun(double x, int n) { double f, t; int i; /**********found**********/ f = ___1___; t = -1; for (i=1; i<=n; i++) { /**********found**********/ t *= (___2___)*x/i; /**********found**********/ f += ___3___; } return f; } int main() { double x, y; x=2.5; y = fun(x, 15); printf("\nThe result is :\n"); printf("x=%-12.6f y=%-12.6f\n", x, y); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:根据下列公式求π值。
例如,给定精度eps为0.0005时,应当输出pi=3.140578。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> double fun(double eps) { double s,t; int n=1; s=0.0; /************found************/ t=0; while( t>eps) { s+=t; t=t * n/(2*n+1); n++; } /************found************/ return (s); } int main() { double x; printf("\nPlease enter a precision: "); scanf("%lf",&x); printf("\neps=%f, Pi=%f\n",x,fun(x)); return 0; }
3.程序设计题
假定输入的字符串中只包含字母和*号。编写函数fun,它的功能是:使字符串的最前面连续的*号不得多于n个;若多于n个,则删除多于的*;若少于或等于n个,则什么也不做,中间和尾部的*号不删除。
例如,字符串中的内容为:*****A*BC*DEF*G***,若n的值为4,删除后,字符串的内容应当为:****A*BC*DEF*G***;若n的值为8,则字符串的内容仍为:*****A*BC*DEF*G***。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> void NONO(void); void fun( char *a, int n ) { } int main() { char s[81]; 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(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *in, *out ; int i, n ; char s[81] ; in = fopen("in.dat","r") ; out = fopen("out.dat","w") ; for (i = 0 ; i < 10 ; i++) { fscanf(in, "%s", s) ; fscanf(in, "%d", &n) ; fun(s,n) ; fprintf(out, "%s\n", s) ; } fclose(in) ; fclose(out) ; }
1.(1)1.0 (2)-1.0 (3)t 2. t=1.0; return (2*s); 3. void fun( char *a, int n ) { int i,j; for (i=0;a[i]=='*';i++) ; if (i<=n) return; j=n; while (a[i]!='\0') { a[j++]=a[i++]; } a[j]='\0'; }
第27套
1.程序填空题
给定程序中,函数fun的功能是:把形参a所指数组中的所有偶数从数组中删除,剩下的奇数个数通过函数值返回。
例如,若a所指数组中的数据为:9、1、4、2、3、6、5、8、7,删除偶数后,数组中的数据为:9、1、3、5、7,函数返回值为5。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 9 int fun(int a[], int n) { int i,j; j = 0; for (i=0; i<n; i++) /**********found**********/ if (a[i]%2==___1___) { /**********found**********/ a[j] = a[i]; ___2___; } /**********found**********/ return ___3___; } int main() { int b[N]={9,1,4,2,3,6,5,8,7}, i, n; printf("\nThe original data :\n"); for (i=0; i<N; i++) printf("%4d ", b[i]); printf("\n"); n = fun(b, N); printf("\nThe number of odd : %d \n", n); printf("\nThe odd number :\n"); for (i=0; i<n; i++) printf("%4d ", b[i]); printf("\n"); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:交换柱函数中两个变量的值。
例如,若a=8,b=3,程序运行后,a=3,b=8。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /*********found**********/ int fun(int x,int y) { int t; /*********found**********/ t=x;x=y;y=t; } int main() { int a,b; a=8;b=3; fun(&a,&b); printf("%d, %d\n",a,b); return 0; }
3.程序设计题
编写函数fun,它的功能是:求出小于或等于lim的所有素数并存放到数组aa中,函数返回求出素数的个数。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #define MAX 100 void NONO(void); int fun(int lim, int aa[MAX]) { } int main() { int limit, i, sum; int aa[MAX]; printf("输入一个整数"); scanf("%d", &limit); sum=fun(limit, aa); for(i=0 ; i < sum ; i++) { if(i % 10 == 0 && i != 0) printf("\n") ; printf("%5d", aa[i]) ; } NONO(); return 0; } void NONO(void) { /* 请在此函数内打开文件,输入测试数据,调用 fun 函数, 输出数据,关闭文件。 */ FILE *rf, *wf ; int limit, i, sum, aa[MAX] ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; fscanf(rf, "%d", &limit); sum=fun(limit, aa); for(i=0 ; i < sum ; i++) fprintf(wf,"%d\n", aa[i]) ; fclose(rf) ; fclose(wf) ; }
1.(1)1 (2)j++ (3)j 2. void fun(int *x,int *y) t=*x;*x=*y;*y=t; 3. int fun(int lim, int aa[MAX]) { int i,k,n; if (lim<2) return 0; aa[0]=2; n=1; for (i=3;i<=lim;i++) { for (k=0;k<n;k++) if (i%aa[k]==0) break; if (k>=n) aa[n++]=i; } return n; }
第28套
1.程序填空题
给定程序中,函数fun的功能是:以N*N矩阵的主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。
例如,N=3,有下列矩阵
1 2 3
4 5 6
7 8 9
计算结果为
1 0 0
6 5 0
10 14 0
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #define N 4 /**********found**********/ void fun(int (*t)___1___ ) { int i, j; for(i=1; i<N; i++) { for(j=0; j<i; j++) { /**********found**********/ ___2___ =t[i][j]+t[j][i]; /**********found**********/ ___3___ =0; } } } int main() { int t[][N]={21,12,13,24,25,16,47,38,29, 11,32,54,42,21,33,10}, i, j; printf("\nThe original array:\n"); for(i=0; i<N; i++) { for(j=0;j<N;j++) printf("%2d ",t[i][j]); printf("\n"); } fun(t); printf("\nThe result is:\n"); for(i=0; i<N; i++) { for(j=0;j<N;j++) printf("%2d ",t[i][j]); printf("\n"); } return 0; }
2.程序修改题
给定程序中,函数fun的功能是:根据整型形参m,计算如下公式的值。
例如,若m=2000,则应输出:0.000160。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> /************found************/ fun(int m) { double y = 0, d ; int i ; /************found************/ for( i = 100, i <= m, i += 100 ) { d = (double)i * (double)i ; y += 1.0 / d ; } return( y ) ; } int main() { int n = 2000 ; printf( "\nThe result is %f\n", fun(n)); return 0; }
3.程序设计题
已知学生的记录由学号和学习成绩构成,N名学生的数据已存入结构体数组a中。编写函数fun,它的功能是:找出成绩最低的学生记录,并通过形参返回主函数(规定只有一个最低分)。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> #define N 10 void NONO(void); typedef struct ss { char num[10]; int s; } STU; void fun(STU a[], STU *s) { } int main() { STU a[N]={{"A01",81},{"A02",89}, {"A03",66},{"A04",87},{"A05",77}, {"A06",90},{"A07",79},{"A08",61}, {"A09",80},{"A10",71} }, m ; int i; printf("***** The original data *****\n"); for ( i=0; i< N; i++ ) printf("No=%s Mark=%d\n", a[i].num,a[i].s); fun ( a, &m ); printf ("***** THE RESULT *****\n"); printf ("The lowest : %s , %d\n",m.num, m.s); NONO( ); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *rf, *wf ; STU a[N], m ; int i ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 10; i++) fscanf(rf, "%s %d", a[i].num, &a[i].s) ; fun(a, &m) ; fprintf (wf, "The lowest : %s, %d\n", m.num, m.s) ; fclose(rf) ; fclose(wf) ; }
1.(1)[N] (2)t[i][j] (3)t[j][i] 2. double fun(int m) for (i=100;i<=m;i+=100) 3. void fun(STU a[], STU *s) { STU min; int i; min=a[0]; for (i=1;i<N;i++) if (min.s>a[i].s) min=a[i]; *s=min; }
第29套
1.程序填空题
给定程序中已建立一个带头结点的单向链表,链表中各结点按结点数据域中的数据从小到大顺序链接。函数fun的功能是:把形参x的值放入一个新结点并插入到链表中,插入后各结点仍保持从小到大顺序排列。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> #include <stdlib.h> #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 && x>p->data) { /**********found**********/ q=___2___; p=p->next; } s->next=p; /**********found**********/ q->next=___3___; } SLIST *creatlist(int *a) { SLIST *h,*p,*q; int i; h=p=(SLIST *)malloc(sizeof(SLIST)); for(i=0; i<N; i++) { q=(SLIST *)malloc(sizeof(SLIST)); q->data=a[i]; 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; } while(p!=NULL); printf("->End\n"); } } int main() { SLIST *head; int x; int a[N]={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); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:将s所指字符串中出现的与t1所指字符串相同的子串全部替换成t2所指字符串,所形成的新串放在w所指的数组中。在此处,设t1和t2所指字符串的长度相同。
例如,当s所指字符串为:abcdabfab,t1所指字符串为:ab,t2所指字符串为:99,运行后w所指数组中的内容为:99cd99f99。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #include <string.h> void fun(char *s,char *t1,char *t2,char *w) { char *p , *r, *a; strcpy( w, s ); while (*w) { p = w; r = t1; /************found************/ while (r) if (*r == *p ) { r++; p++; } else break; if ( *r == '\0' ) { a = w; r = t2; while ( *r ) { /************found************/ *a = *r; a++; r++ } w += strlen(t2) ; } else w++; } } int main() { char s[100],t1[100],t2[100], w[100]; printf("\nPlease enter string S:"); scanf("%s", s); printf("\nPlease enter substring 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 : %s\n", w); } else printf("Error : strlen(t1) != strlen(t2)\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符所形成的新串放在t所指数组中。
例如,当s所指字符串中的内容为:ABCDEFGHIJK,在t所指数组中的内容应为:BDFHJ。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <string.h> void NONO(void); void fun(char *s, char t[]) { } int main() { char s[100], t[100]; printf("\nPlease enter string S:"); scanf("%s", s); fun(s, t); printf("\nThe result is: %s\n", t); NONO(); return 0; } void NONO(void) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ char s[100], t[100] ; FILE *rf, *wf ; int i ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for (i = 0 ; i < 10 ; i++) { fscanf(rf, "%s", s) ; fun(s, t) ; fprintf(wf, "%s\n", t) ; } fclose(rf) ; fclose(wf) ; }
1.(1)x (2)p (3)s 2. while (*r) *a = *r; a++; r++; 3. void fun(char *s, char t[]) { int i,j; for (i=0,j=0;s[i]!='\0';i++) if (i%2!=0) t[j++]=s[i]; t[j]='\0'; }
第30套
1.程序填空题
给定程序中,函数fun的功能是:将s所指字符串中的所有数字字符移到所有非数字字符之后,并保持数字字符串和非数字字符串原有的先后顺序。
例如,形参s所指的字符串为:def35adh3kjsdf7,执行结果为:defadhkjsdf3537。
请在下划线处填入正确的内容并将下划线删除,使程序得出正确的结果。
注意:不得增行或删行,也不得更改程序的结构!
#include <stdio.h> void fun(char *s) { int i, j=0, k=0; char t1[80], t2[80]; for(i=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') { /**********found**********/ t2[j]=s[i]; ___1___; } else t1[k++]=s[i]; t2[j]=0; t1[k]=0; /**********found**********/ for(i=0; i<k; i++) ___2___; /**********found**********/ for(i=0; i<___3___; i++) s[k+i]=t2[i]; } int main() { char s[80]="ba3a54j7sd567sdffs"; printf("\nThe original string is : %s\n",s); fun(s); printf("\nThe result is : %s\n",s); return 0; }
2.程序修改题
给定程序中,函数fun的功能是:找出100至n(不大于1000)之间三位数字相等的所有整数,把这些整数放在s所指数组中,个数作为函数值返回。
请改正函数fun中指定部位的错误,使它能得出正确的结果。
注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。
#include <stdio.h> #define N 100 int fun(int *s, int n) { int i,j,k,a,b,c; j=0; for(i=100; i<n; i++) { /**************found**************/ k=n; a=k%10; k/=10; b=k%10; k/=10; /**************found**************/ c=k%10 if( a==b && a==c ) s[j++]=i; } return j; } int main() { int a[N], n, num=0, i; do { printf("\nEnter n( <=1000 ) : "); scanf("%d",&n); } while(n > 1000); num = fun( a,n ); printf("\nThe result :\n"); for(i=0; i<num; i++) printf("%5d",a[i]); printf("\n\n"); return 0; }
3.程序设计题
编写函数fun,它的功能是:计算并输出给定10个数的方差。
例如,给定的10个数为95.0、89.0、76.0、65.0、88.0、72.0、85.0、81.0、90.0、56.0,输出为s=11.730729。
注意:请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。
#include <stdio.h> #include <math.h> void NONO(void); double fun(double x[10]) { } int main() { double s, x[10]={95.0,89.0,76.0,65.0,88.0,72.0,85.0,81.0,90.0,56.0}; int i; printf("\nThe original data is :\n"); for(i=0;i<10;i++) printf("%6.1f",x[i]); printf("\n\n"); s=fun(x); printf("s=%f\n",s); NONO(); return 0; } void NONO(void) {/* 请在此函数内打开文件,输入测试数据,调用 fun 函数,输出数据,关闭文件。 */ FILE *rf, *wf ; int i, j ; double s, x[10] ; rf = fopen("in.dat","r") ; wf = fopen("out.dat","w") ; for(i = 0 ; i < 5 ; i++) { for(j = 0 ; j < 10 ; j++) fscanf(rf, "%lf", &x[j]) ; s = fun(x) ; fprintf(wf, "%f\n", s) ; } fclose(rf) ; fclose(wf) ; }
1.(1)j++ (2)s[i]=t1[i] (3)j 2. k=i; c=k%10; 3. double fun(double x[10]) { double s,avg; int i; s=0.0; for (i=0;i<10;i++) s+=x[i]; avg=s/10; s=0.0; for (i=0;i<10;i++) s+=(x[i]-avg)*(x[i]-avg); s=sqrt(s/10); return s; }