江苏省高校计算机等级考试命题研究院 江苏省高校计算机等级考试辅导
全国计算机二级C题库第41--50套

 

本题目如果下载后发现有错误的地方,请联系网站管理员:QQ121431055

 

考试时,上机操作题目有三套,基本操作题、简单应用题、综合应用题

 

41套:

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有

数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作

为函数值返回,在主函数中输出。

例如,有10个正数:46 30 32 40 6 17 45 15 48 26,平均值为:

30.500000

主函数中输出:m=30.0

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

果。

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

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

给定源程序:

#include

#define N 10

double fun(double x[],double *av)

{ int i,j; double d,s;

s=0;

for(i=0; i

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

__1__=s/N;

d=32767;

for(i=0; i

if(x[i]<*av && *av - x[i]<=d){

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

d=*av-x[i]; j=__2__;}

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

return __3__;

}

main()

{ int i; double x[N],av,m;

for(i=0; i4.0f ",x[i]);}

printf("\n");

m=fun(x,&av);

printf("\nThe average is: %f\n",av);

printf("m=%5.1f ",m);

printf("\n");

}

解题思路:

第一处:计算好的平均值通过形参av返回,所以应填:*av

 

 

第二处:计算小于平均值且最接近平均值的位置j,所以应填:i

第三处:返回该数,所以应填:x[j]

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

给定程序MODI1.C中函数fun的功能是:根据整型形参n,计算如下公式的值。

例如,若 n=10,则应输出: 0.617977

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

注意:不要改动 main 函数,不得增行或删行,也不得更改程

序的结构!

给定源程序:

#include

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

int fun ( int n )

{ float A=1; int i;

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

for (i=2; i

A = 1.0/(1+A);

return A ;

}

main( )

{ int n ;

printf("\nPlease enter n: ") ;

scanf("%d", &n ) ;

printf("A%d=%f\n", n, fun(n) ) ;

}

解题思路:

第一处:函数的返回是浮点型数,所以应改为:float fun(int n)

第二处:for的终止条件应是i<=n

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

程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun,函数

的功能是:使数组右上三角元素中的值乘以m

例如:若m的值为2a 数组中的值为

| 1 9 7 | | 2 18 14|

a = | 2 3 8 | 则返回主程序后a数组中的值应为 | 2 6 16|

| 4 5 6 | | 4 5 12|

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

请勿改动主函数main和其它函数中的任何内容, 仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#include

#define N 5

int fun ( int a[][N], int m )

{

}

 

 

main ( )

{ int a[N][N], m, i, j;

printf("***** The array *****\n");

for ( i =0; i

{ for ( j =0; j

{ a[i][j] = rand() ; printf( "M", a[i][j] ); }

printf("\n");

}

do m = rand() ; while ( m>=3 );

printf("m = M\n",m);

fun ( a ,m );

printf ("THE RESULT\n");

for ( i =0; i

{ for ( j =0; j

printf("\n");

}

NONO ( );

}

 

解题思路:

本题是利用两重循环给二维数组右上三角元素中的值乘以m

参考答案:

int fun ( int a[][N], int m )

{

int i, j;

for(i = 0 ; i < N ; i++)

for(j = i ; j < N ; j++)

 

 

a[i][j] *= m ;

}

 

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

42套:

给定程序中,函数fun的功能是: s所指字符串中的所有数字字符移到所有

非数字字符之后,并保持数字字符串和非数字字符串原有的先后次序。例如,形

s所指的字符串为:def35adh3kjsdf7。执行结果为:defadhkjsdf3537

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

果。

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

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

 

 

给定源程序:

#include

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

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

for(i=0; i<___3___; i++) s[k+i]=t2[i];

}

main()

{ char s[80]="ba3a54j7sd567sdffs";

printf("\nThe original string is : %s\n",s);

fun(s);

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

}

解题思路:

t2是存放数字字符串,t1是存放非数字字符串。

第一处:t2存放数字字符串的位置是由j来控制的,每添加一个,j必须加1,所以应填:j++

第二处:利用for循环把t1字符串添加到原字符串s中,所以应填:s[i]=t1[i]

第三处:利用for循环把t2字符串添加到原字符串s的尾部,其中数字字符串的长度为j,所

以应填:j

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

给定程序MODI1.C中函数 fun 的功能是:用冒泡法对6个字符串按由小到大

的顺序进行排序。

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

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

给定源程序:

#include

#include

#define MAXLINE 20

fun ( char *pstr[6])

{ int i, j ;

char *p ;

for (i = 0 ; i < 5 ; i++ ) {

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

for (j = i + 1, j < 6, j++)

{

if(strcmp(*(pstr + i), *(pstr + j)) > 0)

{

 

 

p = *(pstr + i) ;

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

*(pstr + i) = pstr + j ;

*(pstr + j) = p ;

}

}

}

}

main( )

{ int i ;

char *pstr[6], str[6][MAXLINE] ;

for(i = 0; i < 6 ; i++) pstr[i] = str[i] ;

printf( "\nEnter 6 string(1 string at each line): \n" ) ;

for(i = 0 ; i < 6 ; i++) scanf("%s", pstr[i]) ;

fun(pstr) ;

printf("The strings after sorting:\n") ;

for(i = 0 ; i < 6 ; i++) printf("%s\n", pstr[i]) ;

}

解题思路:

第一处:for循环语句中缺少分号。

第二处:应该把pstr+j位置上的值赋值给*(pstr+i)上,所以应改为:

*(pstr+i)=*(pstr+j);

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

请编写函数fun,它的功能是:求出ss所指字符串中指定字符的个数,并返回

此值。

例如,若输入字符串: 123412132,输入字符为: 1,则输出:3

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#include

#define M 81

int fun(char *ss, char c)

{

}

main()

{ char a[M], ch;

printf("\nPlease enter a string:"); gets(a);

printf("\nPlease enter a char:"); ch = getchar();

printf("\nThe number of the char is: %d\n", fun(a, ch));

NONO ( );

}

 

解题思路:

本题是考察考生怎样从字符串中找出指定字符的个数。使用while循环语句来字符串是否结

束,如果没有结束,则判断当前字符是否是指定的字符,如果是指定的字符,则个数cnt1

直至字符串结束为止,最后由函数返回。

参考答案:

int fun(char *ss, char c)

{

int cnt = 0 ;

char *p = ss ;

while(*p) {

if(*p == c) cnt++ ;

p++ ;

}

return cnt ;

}

 

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

43套:

给定程序中,函数fun的功能是:在形参ss所指字符串数组中查找与形参t

指字符串相同的串,找到后返回该串在字符串数组中的位置(下标值),未找到

则返回-1ss所指字符串数组中共有N个内容不同的字符串,且串长小于M

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

果。

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

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

给定源程序:

#include

#include

#define N 5

#define M 8

int fun(char (*ss)[M],char *t)

{ int i;

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

for(i=0; i< __1__ ; i++)

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

if(strcmp(ss[i],t)==0 ) return __2__ ;

return -1;

}

main()

{ char ch[N][M]={"if","while","switch","int","for"},t[M];

int n,i;

printf("\nThe original string\n\n");

for(i=0;i

printf("\nEnter a string for search: "); gets(t);

n=fun(ch,t);

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

if(n== __3__) printf("\nDon't found!\n");

else printf("\nThe position is %d .\n",n);

}

解题思路:

本题是考察在字符串查找指定的子串。

第一处:利用for循环,从几个字符串中进行查找,程序中已经给定了N个字符串,所以应

填:N

第二处:在字符串已经找到,则返回字符串数组中的位置(下标值),所以应填:i

第三处:如果没有发现,则显示没有找到信息,所以应填:-1

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

 

 

给定程序MODI1.C中函数fun的功能是:从整数155之间,选出能被3整除、

且有一位上的数是5的那些数,并把这些数放在b所指的数组中,这些数的个数作为

函数值返回。规定,函数中a1放个位数,a2放十位数。

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

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

给定源程序:

#include

fun( int *b )

{ int k,a1,a2,i=0;

for(k=10; k<=55; k++) {

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

a2=k/1O;

a1=k-a2*10;

if((k%3==0 && a2==5)||(k%3==0 && a1==5))

{ b[i]=k; i++; }

}

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

return k;

}

main( )

{ int a[100],k,m;

m=fun( a );

printf("The result is :\n");

for(k=0; k

}

解题思路:

第一处: 取当前变量k的十位数字上的数,所以应改为:a2=k/10;

第二处: 要求统计个数并存入变量i中,最后返回i,所以应改为:return i;

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

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:将字

符串尾部的*号全部删除,前面和中间的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,删除后,字符串中的内

容应当是:****A*BC*DEF*G。在编写函数时,不得使用C语言提供的字符串函数。

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

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. 使用while循环语句和字符串指针p扫描出尾部的*号。

2. 定义两个字符串中间变量st,其中s是存放*号后面的字符串,t是存放*号字符串。

3. 最后利用字符串拷贝和连接,重新组成字符串a

参考答案:

void fun( char *a )

{

char *p = a ;

while(*p) p++ ; p-- ;

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

p++ ;

*p = 0 ;

}

 

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

44套:

函数fun的功能是进行数字字符转换。若形参ch中是数字字符'0''9',

'0'转换成'9','1'转换成'8''2'转换成'7',……,'9'转换成'0';若是其它

字符则保持不变;并将转换后的结果作为函数值返回。

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

果。

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

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

给定源程序:

#include

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

___1___ fun(char ch)

{

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

if (ch>='0' && ___2___)

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

return '9'- (ch-___3___);

return ch ;

}

main()

{ char c1, c2;

printf("\nThe result :\n");

c1='2'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

c1='8'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

c1='a'; c2 = fun(c1);

printf("c1=%c c2=%c\n", c1, c2);

}

解题思路:

第一处:要求返回处理好的字符,所以应填:char

第二处:判断该字符是否是数字,所以应填:ch<='9'

第三处:只要减去'0'ASCII值,即可得到要求的结果,所以应填:'0'

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

给定程序MODI1.C中函数fun的功能是:将p所指字符串中的所有字符复制到b

中,要求每复制三个字符之后插入一个空格。

例如,在调用fun函数之前给a输入字符串:ABCDEFGHIJK

调用函数之后,字符数组b中的内容则为:ABC DEF GHI JK

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

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

给定源程序:

#include

 

 

void fun(char *p, char *b)

{ int i, k=0;

while(*p)

{ i=1;

while( i<=3 && *p ) {

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

b[k]=p;

k++; p++; i++;

}

if(*p)

{

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

b[k++]=" ";

}

}

b[k]='\0';

}

main()

{ char a[80],b[80];

printf("Enter a string: "); gets(a);

printf("The original string: "); puts(a);

fun(a,b);

printf("\nThe string after insert space: "); puts(b); printf("\n\n");

}

解题思路:

第一处:把指针p所指的值赋值给b[k]中。

第二处:把空格字符赋值给b[k++]中,而不是一个空格的字符串。

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

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头

节点。请编写函数fun,它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是:8576698591726487, 则平均分应当

是:78.625

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

#include

#define N 8

struct slist

{ double s;

struct slist *next;

};

typedef struct slist STREC;

double fun( STREC *h )

{

}

 

 

STREC * creat( double *s)

{ STREC *h,*p,*q; int i=0;

h=p=(STREC*)malloc(sizeof(STREC));p->s=0;

while(i

{ q=(STREC*)malloc(sizeof(STREC));

q->s=s[i]; i++; p->next=q; p=q;

}

p->next=0;

return h;

}

outlist( STREC *h)

{ STREC *p;

p=h->next; printf("head");

do

{ printf("->%4.1f",p->s);p=p->next;}

while(p!=0);

printf("\n\n");

}

main()

{ double s[N]={85,76,69,85,91,72,64,87},ave;

STREC *h;

h=creat( s ); outlist(h);

ave=fun( h );

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

NONO();

}

 

解题思路:

本题是计算链表结构中成绩的平均分。具体操作请看答案程序中的说明。

参考答案:

#include

#include

 

double fun( STREC *h )

{

STREC *p=h->next; /* 由于头结点中没有存放数据 */

double av=0.0; /* 对计算成绩平均值的变量进行初始化 */

int n = 0 ;

while(p!=NULL) { /* 判断链表是否结束 */

av = av + p->s ; /* 对成绩进行累加 */

p=p->next; /* 到下一个结点位置 */

n++; /* 人数加1 */

}

av /= n ; /* 计算成绩平均值 */

return av ; /* 返回成绩平均值 */

}

 

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

45套:

函数fun的功能是:把形参a所指数组中的偶数按原顺序依次存放到a[0]

a[1]a[2]、……中,把奇数从数组中删除,偶数个数通过函数值返回。例如:

a所指数组中的数据最初排列为:914236587,删除奇数后a

所指数组中的数据为:4268,返回值为4

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

果。

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

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

给定源程序:

#include

#define N 9

int fun(int a[], int n)

{ int i,j;

j = 0;

for (i=0; i

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

if (___1___== 0) {

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

___2___ = a[i]; j++;

}

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

return ___3___;

}

main()

{ int b[N]={9,1,4,2,3,6,5,8,7}, i, n;

printf("\nThe original data :\n");

for (i=0; iprintf("\n");

n = fun(b, N);

printf("\nThe number of even %d\n", n);

printf("\nThe even :\n");

 

 

for (i=0; iprintf("\n");

}

解题思路:

第一处:判断a[i]是否是偶数,若是,则仍保留在原数组中a[j],所以应填:a[i] % 2

第二处:数组a中的元素位置由j来控制,每增加一个元素,则j1,所以应填:a[j]

第三处:返回删除奇数后a所指数组中数据的元素j,所以应填:j

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

给定程序MODI1.C中函数fun的功能是:按以下递归公式求函数值。

10 (n=1)

fun(n)=

fun(n-1)+2 (n>1)

例如,当给n输入5时,函数值为18;当给n输入3时,函数值为14

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

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

给定源程序:

#include

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

fun ( n )

{ int c;

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

if(n=1)

c = 10 ;

else

c= fun(n-1)+2;

return(c);

}

main()

{ int n;

printf("Enter n : "); scanf("%d",&n);

printf("The result : %d\n\n", fun(n));

}

解题思路:

第一处:形参n没有定义类型,所以应改为:fun (int n)

第二处:判断相等的符号是==

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

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:使字

符串中尾部的*号不得多于n;若多于n个,则删除多余的*;若少于或等于n个,

则什么也不做, 字符串中间和前面的*号不删除。

例如,字符串中的内容为:****A*BC*DEF*G*******,若n的值为4,删除后,

字符串中的内容应当是:****A*BC*DEF*G****;若n的值为7,则字符串中的内容仍

为:****A*BC*DEF*G*******n的值在主函数中输入。在编写函数时,不得使用C

语言提供的字符串函数。

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

 

 

#include

void fun( char *a,int n )

{

}

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

}

 

解题思路:

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

1. 使用while循环语句和字符串指针p扫描出尾部的*号。

2. 找出字符串最右边字母后出现'*'的第1位置。

3. 使用while循环来处理右边'*'是否大于n个,若大于,则取n'*'

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

参考答案:

void fun( char *a,int n )

{

char *p=a ;

int j=0;

while(*p) p++; p--; /* 字符串的长度 */

while(*p == '*') p--; /* 字符串右的'*' */

p++;

while(j

p++ ;

j++;

}

*p = 0 ;

 

 

}

 

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

46套:

给定程序中,函数fun的功能是:利用指针数组对形参ss所指字符串数组中的

字符串按由长到短的顺序排序,并输出排序结果。ss所指字符串数组中共有N个字

符串,且串长小于M

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

果。

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

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

给定源程序:

#include

#include

#define N 5

#define M 8

void fun(char (*ss)[M])

{ char *ps[N],*tp; int i,j,k;

for(i=0; i

for(i=0; i

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

k= __1__ ;

for(j=i+1; j

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

if(strlen(ps[k]) < strlen(__2__) ) k=j;

 

 

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

tp=ps[i]; ps[i]=ps[k]; ps[k]= __3__ ;

}

printf("\nThe string after sorting by length:\n\n");

for(i=0; i

}

main()

{ char ch[N][M]={"red","green","blue","yellow","black"};

int i;

printf("\nThe original string\n\n");

for(i=0;i

fun(ch);

}

解题思路:

本题是按字符串的长短进行排序。

第一处:外循环每循环一次,k应保存当前的i值,所以应填:i

第二处:使用内循环对i+1后面的字符串长度进行比较,所以应填:ps[j]

第三处:交换内容,所以应填:tp

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

已知一个数列从第0项开始的前三项分别为001,以后的各项都是其相邻

的前三项之和。给定程序MODI1.C中函数fun的功能是:计算并输出该数列前n项的

平方根之和。n的值通过形参传入。

例如,当n10时,程序的输出结果应为:23.197745

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

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

给定源程序:

#include

#include

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

fun(int n)

{ double sum, s0, s1, s2, s; int k;

sum = 1.0;

if (n <= 2) sum = 0.0;

s0 = 0.0; s1 = 0.0; s2 = 1.0;

for (k = 4; k <= n; k++)

{ s = s0 + s1 + s2;

sum += sqrt(s);

s0 = s1; s1 = s2; s2 = s;

}

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

return sum

}

main ( )

{ int n;

printf("Input N=");

scanf("%d", &n);

printf("%f\n", fun(n) );

 

 

}

解题思路:

第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽

略,其他必须定义返回的类型,所以要在此行前加上doublefloat

第二处:该行缺少分号。

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

编写函数fun,它的功能是计算下列级数和,和值由函数值返回。

例如,当n = 10x0.3时,函数值为1.349859

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun

的花括号中填入你编写的若干语句。

给定源程序:

#include

#include

double fun(double x , int n)

{

}

main()

{

printf("%f\n", fun(0.3,10));

NONO();

}

 

解题思路:

本题是根据给定的公式计算结果。使用for循环语句依次求出每一项的值,分别进行累加并

把结果存入变量s中,最后把s作为函数值返回。其中,jc函数是计算阶乘的。

参考答案:

#include

#include

long jc(int n)

 

 

{

long s = 1 ;

int i ;

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

return s ;

}

double fun(double x , int n)

{

double s = 1.0, y = x ;

int i ;

for(i = 1 ; i <= n ; i++) {

s += y / (double)jc(i) ;

y *= x ;

}

return s ;

}

 

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

47套:

给定程序中,函数fun的功能是:找出形参s所指字符串中出现频率最高的字

母(不区分大小写),并统计出其出现的次数。

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

letter 'a' : 3 times

letter 's' : 3 times

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

果。

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

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

 

 

给定源程序:

#include

#include

#include

void fun(char *s)

{ int k[26]={0},n,i,max=0; char ch;

while(*s)

{ if( isalpha(*s) ) {

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

ch=tolower(__1__);

n=ch-'a';

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

k[n]+= __2__ ;

}

s++;

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

if(max

}

printf("\nAfter count :\n");

for(i=0; i<26;i++)

if (k[i]==max) printf("\nletter \'%c\' : %d times\n",i+'a',k[i]);

}

main()

{ char s[81];

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

fun(s);

}

解题思路:

本题是找出字符串中出现频率最高的字母并统计出其次数。

第一处:将当前字母转换为小写字母,所以应填:*s

第二处:把该字母出现的个数累加到指定的数组中,所以应填:1

第三处:如果当前该字母出现次数大于最大次数max,那么把该次数赋值给max,所以应填:

k[n]

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

给定程序MODI1.C中函数 fun 的功能是:求S的值。

例如,当k10时,函数值应为:1.533852

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

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

给定源程序:

#include

#include

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

void fun( int k )

{ int n; float s, w, p, q;

 

 

n = 1;

s = 1.0;

while ( n <= k )

{ w = 2.0 * n;

p = w - 1.0;

q = w + 1.0;

s = s * w *w/p/q;

n++;

}

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

return s

}

main ( )

{

printf("%f\n", fun (10));

}

解题思路:

第一处:由于函数返回是实数,所以必须定义返回的类型,只有整型或无结果返回可以忽

略,其他必须定义返回的类型,所以要在此行前加上doublefloat

第二处:缺少分号。

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

编写函数fun,它的功能是:计算并输出下列级数和:

1 1 1

S = ── + ── + + ───

1×2 2×3 n(n+1)

例如,当n = 10时,函数值为:0.909091

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

double fun( int n )

{

}

main() /* 主函数 */

{

printf("%f\n", fun(10));

NONO();

}

 

解题思路:

本题是根据公式计算结果。使用for循环语句进行计算。但要注意的是:在除法运算中,如

果除数和被除数都是整数,所以所除的结果也是整数,因此1应取实数或进行实型的类型转换。

参考答案:

double fun( int n )

{

double s = 0.0 ;

int i ;

for(i = 1 ; i <= n ; i++) s = s + 1.0 / (i * (i + 1)) ;

return s ;

}

 

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

48套:

给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对

应的数值,计算出这些数值的累加和作为函数值返回。

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

22

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

果。

 

 

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

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

给定源程序:

#include

#include

#include

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个能被13

17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数值为4622

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

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

给定源程序:

#include

int fun( int k )

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

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

{

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

if ((k = 0) || (k = 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

#include

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

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,在平均值以上的实数个数应为:5

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

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

给定源程序:

#include

int fun(float x[], int n)

{

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

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

for (j=0; j

xa += x[j]/n;

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

for (j=0; 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的值,结果由函数值带回。mn

为两个正整数且要求m > n

m!

P = ───

n!(m-n)!

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

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

请勿改动主函数main和其它函数中的任何内容,仅在函数fun的花括号中填入

你编写的若干语句。

给定源程序:

#include

float fun(int m, int n)

{

}

main() /* 主函数 */

{

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

NONO();

}

 

解题思路:

本题是计算阶乘。

参考答案:

#include

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

#define N 4

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

void fun(int (*t)___1___ )

 

 

{ int i, j;

for(i=1; i

{ for(j=0; 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

{ for(j=0; jprintf("\n");

}

fun(t);

printf("\nThe result is:\n");

for(i=0; i

{ for(j=0; jprintf("\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

#include

#include

/************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

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 ;

}