知ing

二级C语言程序设计试题50套

NCRE研究组 编 / 高等教育出版社

Pluto. 上传

查看本书

20套: 

给定程序中,函数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++。 

第三处:iwhile循环体的控制变量,每做一次循环均要加1。 

*************************************************** 

给定程序MODI1.C中函数 fun 的功能是:统计字符串中各元音字母(即:AEIOU)的个数。注意:字母不分大、小写。 

例如:若输入:THIs is a boot,则输出应该是:10220。请改正程序中的错误,使它能得出正确的结果。 

注意:不要改动 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。 

例如:数组中的值为|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的功能是:将自然数110以及它们的平方根写到名为 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.Cfun函数的功能是:将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的功能是将两个两位数的正整数ab合并形成一个整数放在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); 

※※※※※※※※※※※※※※※※※※※※※※※※※ 



查看更多