分享
2016年3月计算机二级C语言题库.doc
下载文档

ID:3488867

大小:1.16MB

页数:355页

格式:DOC

时间:2024-05-09

收藏 分享赚钱
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
2016 计算机 二级 语言 题库
说明:本题库是针对2016年3月份考试的上机考试题库,本题库共有100套题目(每套题目包含3道题:一道程序填空题、一道程序修改题、一道程序设计题),真实考试的时候,考生输入准考证后计算机随机为你抽取一套考试,每个考生考试时只需考一套题目(包含三道题),但由于考试时是随机抽题,所以即使把原题库告诉大家,你也不能知道到时计算机会给你抽取哪一套题,所以大家只有把全部题库都理解才能万无一失)     二级C语言上机试题汇编 ※※※※※※※※※※※※※※※※※※※※※※※※※ 第1套: 给定程序中,函数fun的功能是:计算形参x所指数组中N个数的平均值(规定 所有数均为正数),将所指数组中小于平均值的数据移至数组的前部,大于等于平 均值的数据移至x所指数组的后部,平均值作为函数值返回,在主函数中输出平均 值和移动后的数据。 例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为: 30.500000 移动后的输出为:30 6 17 15 26 46 32 40 45 48 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdlib.h> #include <stdio.h> #define N 10 double fun(double *x) { int i, j; double av, y[N]; av=0; /**********found**********/ for(i=0; i<N; i++) av +=__1__; for(i=j=0; i<N; i++) if( x[i]<av ){ /**********found**********/ y[j]=x[i]; x[i]=-1; __2__;} i=0; while(i<N) { if( x[i]!= -1 ) y[j++]=x[i]; /**********found**********/ __3__; } for(i=0; i<N; i++)x[i] = y[i]; return av; } main() { int i; double x[N]; for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n",fun(x)); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); } 解题思路: 第一处:求出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 <stdio.h> 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]++; } } 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"); } 解题思路: 第一处:num初始化错误,应为:num[k]=0;。 第二处:由于s是指针型变量,所以应改为:switch(*s)。 *************************************************** 请编写函数 fun,函数的功能是求出二维数组周边元素之和,作为函数值返 回。二维数组中的值在主函数中赋予。 例如:二维数组中的值为 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 <stdio.h> #define M 4 #define N 5 int fun ( int a[M][N] ) { } 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; clrscr(); 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( ); } 解题思路: 本题是统计二维数组周边元素值之和,但要注意的是不要重复计算四个角上的元素值,结 果作为函数值返回。 参考答案: int fun ( int a[M][N] ) { int tot = 0, i, j ; for(i = 0 ; i < N ; i++) { tot += a[0][i] ; tot += a[M-1][i] ; } for(i = 1 ; i < M - 1 ; i++) { tot += a[i][0] ; tot += a[i][N-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 30 6 17 15 26 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdlib.h> #include <stdio.h> #define N 10 double fun(double *x) { int i, j; double s, av, y[N]; s=0; for(i=0; i<N; i++) s=s+x[i]; /**********found**********/ av=__1__; for(i=j=0; i<N; i++) if( x[i]>av ){ /**********found**********/ y[__2__]=x[i]; x[i]=-1;} for(i=0; i<N; i++) /**********found**********/ if( x[i]!= __3__) y[j++]=x[i]; for(i=0; i<N; i++)x[i] = y[i]; return av; } main() { int i; double x[N]; for(i=0; i<N; i++){ x[i]=rand()%50; printf("%4.0f ",x[i]);} printf("\n"); printf("\nThe average is: %f\n",fun(x)); printf("\nThe result :\n",fun(x)); for(i=0; i<N; i++) printf("%5.0f ",x[i]); printf("\n"); } 解题思路: 第一处:计算N个数的平均值,所以应填:s/N。 第二处:利用for循环语句,把数组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.。 请改正程序中的错误,使程序能得出正确的结果。 注意:不要改动 main 函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include <ctype.h> #include <string.h> /************found************/ include <stdio.h> /************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 chrstr[81]; printf( "\nPlease enter an English text line: " ); gets( chrstr ); printf( "\n\nBefore changing:\n %s", chrstr ); upfst( chrstr ); printf( "\nAfter changing:\n %s\n", chrstr ); } 解题思路: 第一处:包含头文件的标识错误,在include前漏写了#。 第二处:由于传入的参数是字符串,所以应为upfst(char *p)。 *************************************************** 程序定义了N×N的二维数组,并在主函数中赋值。请编写函数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 1| 则返回主程序后s的值应为: 3.375。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include <stdio.h> #include <stdlib.h> #define N 5 double fun ( int w[][N] ) { } main ( ) { int a[N][N]={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; i<N; i++ ) { for ( j =0; j<N; j++ ) { printf( "%4d", a[i][j] ); } printf("\n"); } s = fun ( a ); printf ("***** THE RESULT *****\n"); printf( "The sum is : %lf\n",s ); NONO( ); } 解题思路: 本题是统计二维数组周边元素值的平均值,但要注意的是不要重复计算四个角上的元素值。 参考答案: double fun ( int w[][N] ) { int i, j, n=0; double sum=0; for ( i =0; i<N; i++ ) { sum+=w[0][i]+w[N-1][i]; n+=2; } for ( i =1; i<N - 1; i++ ) { sum +=w[i][0]+w[i][N-1]; n+=2; } return sum/n; } ※※※※※※※※※※※※※※※※※※※※※※※※※ 第22套: 给定程序中,函数fun的功能是:将自然数1~10以及它们的平方根写到名为 myfile3.txt的文本文件中,然后再顺序读出显示在屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <math.h> #include <stdio.h> int fun(char *fname ) { FILE *fp; int i,n; float x; if((fp=fopen(fname, "w"))==NULL) return 0; for(i=1;i<=10;i++) /**********found**********/ fprintf(___1___,"%d %f\n",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 %f\n",n,x); fscanf(fp,"%d%f",&n,&x); } fclose(fp); return 1; } main() { char fname[]="myfile3.txt"; fun(fname); } 解题思路: 本题要求所求出的数写入到指定的文件中保存。程序中共有三处要填上适当的内容,使程 序能运行出正确的结果。 第一处:int fprintf(FILE *stream, const char *format [,argument, …]); 因此本处 只能填写文件流的变量fp。 第二处:由于文件打开写操作,所以必须要关闭,因此,只能填写关闭文件的函数 fclose(fp)。 第三处:由于本题要把刚写入文件中的数据重新显示出来,读方式已经给出,但没有给出 文件名,所以本处只能写文件名变量fname或者直接给出文件名"myfile3.dat"。 *************************************************** 给定程序MODI1.C中fun函数的功能是:将n个无序整数从小到大排序。 请改正程序中的错误,使它能得出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> #include <stdlib.h> fun ( int n, int *a ) { int i, j, p, t; for ( j = 0; j<n-1 ; j++ ) { p = j; /************found************/ for ( i=j+1; i<n-1 ; i++ ) if ( a[p]>a[i] ) /************found************/ t=i; if ( p!=j ) { t = a[j]; a[j] = a[p]; a[p] = t; } } } putarr( int n, int *z ) { int i; for ( i = 1; i <= n; i++, z++ ) { printf( "%4d", *z ); if ( !( i%10 ) ) printf( "\n" ); } printf("\n"); } main() { int aa[20]={9,3,0,4,1,2,5,6,8,10,7}, n=11; printf( "\n\nBefore 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。 第二处:使用临时变量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 <stdio.h> 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: %ld\n", 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); } 第02套: 给定程序中,函数fun的功能是:将形参n所指变量中,各位上为偶数的数去 除,剩余的数按原来从高位到低位的顺序组成一个新的数,并通过形参指针n传回 所指变量。 例如,输入一个数:27638496,新的数:为739。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> 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 long n=-1; while(n>99999999||n<0) { printf("Please input(0<n<100000000): "); scanf("%ld",&n); } fun(&n); printf("\nThe result is: %ld\n",n); } 解题思路: 第一处:t是通过取模的方式来得到*n的个位数字,所以应填:10。 第二处:判断是否是奇数,所以应填:0。 第三处:最后通形参n来返回新数x,所以应填:x。 *************************************************** 给定程序MODI1.C中函数 fun 的功能是:计算n!。 例如,给n输入5,则输出120.000000。 请改正程序中的错误,使程序能输出正确的结果。 注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 给定源程序: #include <stdio.h> 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("\n\n%d! =%lf\n\n", n, fun(n)) ; } 解题思路: 第一处:条件语句书写格式错误,应改为:if (n==0)。 第二处:语句后缺少分号。 *************************************************** 请编写一个函数fun,它的功能是:将一个数字字符串转换为一个整数(不得 调用C语言提供的将字符串转换为整数的函数)。例如,若输入字符串"-1234",则 函数把它转换为整数值 -1234。函数fun中给出的语句仅供参考。 注意: 部分源程序存在文件PROG1.C文件中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填 入你编写的若干语句。 给定源程序: #include <stdio.h> #include <string.h> long fun ( char *p) { /* 以下代码仅供参考 */ int i, len, t; /* len为串长,t为正负标识 */ long x=0; len=strlen(p); if(p[0]=='-') { t=-1; len--; p++; } else t=1; /* 以下完成数字字符串转换为一个数字 */ return x*t; } main() /* 主函数 */ { char s[6]; long n; printf("Enter a string:\n") ; gets(s); n = fun(s); printf("%ld\n",n); NONO ( ); } NONO ( ) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s[20] ; long n ; fp = fopen("c:\\test\\in.dat","r") ; wf = fopen("c:\\test\\out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", s) ; n = fun(s); fprintf(wf, "%ld\n", n) ; } fclose(fp) ; fclose(wf) ; } 解题思路: 本题是将一个数字字符串转换为一个整数。 参考答案: #include <stdio.h> #include <string.h> long fun ( char *p) { /* 以下代码仅供参考 */ int i, len, t; /* len为串长,t为正负标识 */ long x=0; len=strlen(p); if(p[0]=='-') { t=-1; len--; p++; } else t=1; /* 以下完成数字字符串转换为一个数字 */ while(*p) x = x*10-48+(*p++); return x*t; } main() /* 主函数 */ { char s[6]; long n; printf("Enter a string:\n") ; gets(s); n = fun(s); printf("%ld\n",n); NONO ( ); } NONO ( ) {/* 本函数用于打开文件,输入数据,调用函数,输出数据,关闭文件。 */ FILE *fp, *wf ; int i ; char s[20] ; long n ; fp = fopen("c:\\test\\in.dat","r") ; wf = fopen("c:\\test\\out.dat","w") ; for(i = 0 ; i < 10 ; i++) { fscanf(fp, "%s", s) ; n = fun(s); fprintf(wf, "%ld\n", n) ; } fclose(fp) ; fclose(wf) ; } 注意:由于NONO( )这个函数是改卷人用的,与考生没有什么关系,故下面从第2套试题开始均省略NONO( ) ※※※※※※※※※※※※※※※※※※※※※※※※※ 第03套: 给定程序中,函数fun的功能是将形参给定的字符串、整数、浮点数写到文本 文件中,再用字符方式从此文本文件中逐个读入并显示在终端屏幕上。 请在程序的下划线处填入正确的内容并把下划线删除, 使程序得出正确的结 果。 注意:源程序存放在考生文件夹下的BLANK1.C中。 不得增行或删行,也不得更改程序的结构! 给定源程序: #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); } main() { char a[10]="Hello!"; int b=12345; double c= 98.76; fun(a,b,c); } 解题思路: 本题是考察先把给定的数据写入到文本文件中,再从该文件读出并显示在屏幕上。 第一处:定义文本文件类型变量,所以应填:FILE *。 第二处:判断文件是否结束,所以应填:fp。 第三处:显示读出的字符,所以应填:ch。 *************************************************** 给定程序MODI1.C中函数fun的功能是: 依次取出字符串中所有数字字符, 形 成新的字符串, 并取代原字符串。 请改正函数fun中指定部位的错误, 使它能得出正确的结果。 注意: 不要改动main函数, 不得增行或删行, 也不得更改程序的结构! 给定源程序: #include <stdio.h> void fun(char *s) { int i,j; for(i=0,j=0; s[i]!='\0'; i++) if(s[i]>='0' && s[i]<='9') /**********found**********/ s[j]=s[i]; /**********found**********/ s[j]="\0"; } main() { char item[80]; printf("\nEnter a string : ");gets(item); printf("\n\nThe string is : \"%s\"\n",item); fun(item); printf("\n\nThe string of changing is : \"%s\"\n",item ); } 解题思路: 第一处: 要求是取出原字符串中所有数字字符组成一个新的字符串,程序中是使用变量j 来控制新字符串的位置,所以应改为:s[j++]=s[i];。 第二处: 置新字符串的结束符,所以应改为:s[j]='\0';. *************************************************** 请编写函数fun, 函数的功能是: 将M行N列的二维数组中的字符数据, 按列的 顺序依次放到一个字符串中。 例如, 二维数组中的数据为: W W W W S S S S H H H H 则字符串中的内容应是: WSHWSHWSH。 注意:部分源程序在文件PROG1.C中。 请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入 你编写的若干语句。 给定源程序: #include <stdio.h> #define M 3 #define N 4 void fun(char s[][N], char *b) { int i,j,n=0; for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */ { } b[n]='\0'; } main() { char a[100],w[M][N]={{'W','W','W','W'},{'S','S','S','S'},{'H','H','H','H'}}; int i,j; printf("The matrix:\n"); for(i=0; i<M; i++) { for(j=0;j<N; j++)printf("%3c",w[i][j]); printf("\n"); } fun(w,a); printf("The A string:\n");puts(a); printf("\n\n"); NONO(); } 解题思路: 本题是把二维数组中的字符数据按列存放到一个字符串中。 1. 计算存放到一维数组中的位置。 2. 取出二维数组中的字符存放到一维数组(已计算出的位置)中。 参考答案: void fun(char s[][N], char *b) { int i,j,n=0; for(i=0; i < N;i++) /* 请填写相应语句完成其功能 */ { for(j = 0 ; j < M ; j++) { b[n] = s[j][i] ; n = i * M + j + 1; } } b[n]='\0'; } ※※※

此文档下载收益归作者所有

下载文档
你可能关注的文档
收起
展开