知ing

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

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

Pluto. 上传

查看本书

48套: 

给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。 

例如,形参s所指的字符串为:abs5def126jkm8,程序执行后的输出结果为:22。 

请在程序的下划线处填入正确的内容并把下划线删除使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

#include <string.h> 

#include <ctype.h> 

int fun(char *s) 

{ int sum=0; 

while(*s) { 

/**********found**********/ 

if( isdigit(*s) ) sum+= *s- __1__ ; 

/**********found**********/ 

__2__; 

/**********found**********/ 

return __3__ ; 

main() 

{ char s[81]; int n; 

printf("\nEnter a string:\n\n"); gets(s); 

n=fun(s); 

printf("\nThe result is: %d\n\n",n); 

解题思路: 

本题是把字符串中是数字字符转换成对应的数值并进行累加。 

第一处:'0'字符对应的ASCII值是48,因此数字字符转换成对应数值时只要减去48,即是该数字字符对应的数值,所以应填:48。 

第二处:到字符串下一个位置,所以应填:s++。 

第三处:返回累加和sum,所以应填:sum。 

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

给定程序MODI1.C中函数fun的功能是:计算小于形参k的最大的10个能被1317整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622。 

请改正程序中的错误,使程序能输出正确的结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

int fun( int k ) 

{ int m=0, mc=0, j ; 

while ((k >= 2) && (mc < 10)) 

/************found************/ 

if ((k%13 = 0) || (k%17 = 0)) 

{ m = m+ k; mc++; } 

k--; 

return m; 

/************found************/ 

 

_____ 

main ( ) 

printf("%d\n", fun (500)); 

解题思路: 

第一处:判断相等的条件是==,而不是=,所以只能在比较处再添加一个=。 

第二处:经过编译可知,"{""}"没有配对,所以在横线处加上"}"。 

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

编写函数fun,它的功能是:求小于形参n同时能被37整除的所有自然数之和的平方根,并作为函数值返回。 

例如若n1000时,程序输出应为:s = 153.909064。 

注意部分源程序在文件PROG1.C文件中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <math.h> 

#include <stdio.h> 

double fun( int n) 

main() /* 主函数 */ 

printf("s =%f\n", fun ( 1000) ); 

NONO(); 

解题思路: 

本题是求小于形参n同时能被37整除的所有自然数之和的平方根,并作为函数值返回。 

参考答案: 

double fun( int n) 

 

double sum=0.0; 

int i; 

for(i=21; i<=n; i++) 

if((i % 3==0) && (i % 7==0)) sum+=i; 

return sqrt(sum) ; 

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



49套: 

给定程序中,函数fun的功能是:将形参s所指字符串中所有ASCII码值小于97 的字符存入形参t所指字符数组中,形成一个新串,并统计出符合条件的字符个数作为函数值返回。 

例如,形参s所指的字符串为:Abc@1x56*,程序执行后t所指字符数组中的字符串应为:A@156*。 

请在程序的下划线处填入正确的内容并把下划线删除使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

int fun(char *s, char *t) 

{ int n=0; 

while(*s) 

{ if(*s < 97) { 

/**********found**********/ 

*(t+n)= __1__ ; n++; } 

/**********found**********/ 

 

__2__ ; 

*(t+n)=0; 

/**********found**********/ 

return __3__ ; 

main() 

{ char s[81],t[81]; int n; 

printf("\nEnter a string:\n"); gets(s); 

n=fun(s,t); 

printf("\nThere are %d letter which ASCII code is less than 97: %s\n",n,t); 

解题思路: 

本题是根据条件组成新的字符串并统计出符合条件的个数n。 

第一处:把符合条件的当前字符存放到t字符串中,所以应填:*s。 

第二处:到字符串下一个位置,所以应填:s++。 

第三处:返回符合条件的字符个数n,所以应填:n。 

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

给定程序MODI1.C中函数 fun 的功能是:由形参给定n个实数,输出平均值,并统计在平均值以上(含平均值)的实数个数。 

例如,n8,输入:193.199,195.673,195.757,196.051,196.092,196.596, 196.579,196.763 

所得平均值为:195.838745,在平均值以上的实数个数应为:

请改正程序中的错误,使程序能输出正确的结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#include <stdio.h> 

int fun(float x[], int n) 

/************found************/ 

int j, c=0, float xa=0.0; 

for (j=0; j<n; j++ ) 

xa += x[j]/n; 

printf("ave =%f\n",xa); 

for (j=0; j<n; j++ ) 

/************found************/ 

if (x[j] => xa) 

c++; 

return c; 

main ( ) 

{ float x[100] = {193.199, 195.673, 195.757, 196.051, 196.092, 196.596, 196.579, 196.763}; 

printf("%d\n", fun (x, 8)); 

解题思路: 

第一处:两种类型变量定义之间应该用分号,所以应改为:int j, c=0; float xa=0.;。 

第二处:在C语言中,大于等于应表达为>=。 

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

编写函数fun,其功能是:根据以下公式求P的值,结果由函数值带回。m为两个正整数且要求m > n。 

m! 

P = ─── 

n!(m-n)! 

例如:m12n8时,运行结果为495.000000。 

注意部分源程序在文件PROG1.C文件中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

float fun(int m, int n) 

main() /* 主函数 */ 

printf("P=%f\n", fun (12,8)); 

NONO(); 

解题思路: 

本题是计算阶乘。 

参考答案: 

#include <stdio.h> 

long jc(int m) 

long s=1; 

int i ; 

for(i=1;i<=m;i++) s=s*i ; 

return s; 

 

float fun(int m, int n) 

float p; 

p=1.0*jc(m)/jc(n)/jc(m-n) ; 

return p; 

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




50套: 

给定程序中,函数fun的功能是:N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在左下三角元素中,右上三角元素置为0。例如,若N=3,有下列矩阵: 

1 2 3 

4 5 6 

7 8 9 

计算结果为1 0 0 

6 5 0 

10 14 9 

请在程序的下划线处填入正确的内容并把下划线删除,使程序得出正确的结果。 

注意:源程序存放在考生文件夹下的BLANK1.C中。 

不得增行或删行,也不得更改程序的结构! 

给定源程序: 

#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; 

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"); 

解题思路: 

第一处:形参t的定义,整数数组其宽度为N,所以应填:[N]。 

第二处:对称元素相加,其结果仍存放在左下三角元素中,所以应填:t[i][j]。 

第三处:右上三角元素置为0,所以应填:t[j][i]。 

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

给定程序MODI1.C中函数fun的功能是:计算函数F(x,y,z)=(x+y)/(x-y)+(z+y)/(z-y)的值。其中xy的值不等,zy的值不等。 

例如,当x的值为9y的值为11z的值为15时,函数值为 -3.50。 

请改正程序中的错误,使它能得出正确结果。 

注意:不要改动main函数,不得增行或删行,也不得更改程序的结构。 

给定源程序: 

#include <stdio.h> 

#include <math.h> 

#include <stdlib.h> 

/************found************/ 

#define FU(m,n) (m/n) 

float fun(float a,float b,float c) 

{ float value; 

value=FU(a+b,a-b)+FU(c+b,c-b); 

/************found************/ 

Return(Value); 

 

main() 

{ float x,y,z,sum; 

printf("Input x y z: "); 

scanf("%f%f%f",&x,&y,&z); 

printf("x=%f,y=%f,z=%f\n",x,y,z); 

if (x==y||y==z){printf("Data error!\n");exit(0);} 

sum=fun(x,y,z); 

printf("The result is : %5.2f\n",sum); 

解题思路: 

第一处:define定义错误,所以应改为:#define FU(m,n) ((m)/(n))。 

第二处:return错写成Return,变量value错写成Value。 

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

规定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字符串中的前导*号全部删除,中间和尾部的*号不删除。 

例如,字符串中的内容为:*******A*BC*DEF*G****,删除后,字符串中的内容应当是:A*BC*DEF*G****。在编写函数时,不得使用C语言提供的字符串函数。 

注意部分源程序在文件PROG1.C中。 

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入你编写的若干语句。 

给定源程序: 

#include <stdio.h> 

void fun( char *a ) 

main() 

{ char s[81]; 

printf("Enter a string:\n");gets(s); 

fun( s ); 

printf("The string after deleted:\n");puts(s); 

NONO(); 

解题思路: 

本题是考察字符串的操作。 

1. 利用循环扫描出字符串左边第1个字符不是'*'的字符。 

2. 再利用循环把以后的字符依次移动原字符串首地址开始存放。 

3. 最后给字符串a加上结束符。 

参考答案: 

void fun( char *a ) 

int j=0; 

char *p = a ; 

while(*p == '*') p++ ; 

while(*p) { 

a[j++] = *p ; 

p++; 

a[j]=0 ; 

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



查看更多