全国计算机二级C题库第81--90套

 

 

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

 

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

 

81套:

给定程序中,函数fun的功能是:在形参s所指字符串中的每个数字字符之后

插入一个*号。例如,形参s所指的字符串为:def35adh3kjsdf7。执行结果为:

def3*5*adh3*kjsdf7*

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

果。

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

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

给定源程序:

#include

void fun(char *s)

{ int i, j, n;

for(i=0; s[i]!='\0'; i++)

 

 

 

 

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

if(s[i]>='0' ___1___ s[i]<='9')

{ n=0;

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

while(s[i+1+n]!= ___2___) n++;

for(j=i+n+1; j>i; j--)

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

s[j+1]= ___3___;

s[j+1]='*';

i=i+1;

}

}

main()

{ char s[80]="ba3a54cd23a";

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

fun(s);

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

}

解题思路:

第一处:判断是数字,应该使用“与”,所以应填:&&

第二处:判断字符串是否是字符串结束符,所以应填:'\0'

第三处:如果当前字符是数字字符,则把当前字符以后的所有字符往后一个位置,所以应

填:s[j]

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

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

    1    1     1          1

y = 1 + ----- + ----- + ----- + …… + -----

       2*2  3*3   4*4        m*m

例如,若 m 中的值为: 5,则应输出:1.463611

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

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

给定源程序:

#include

double fun ( int m )

{ double y = 1.0 ;

int i;

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

for(i = 2 ; i < m ; i++)

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

y += 1 / (i * i) ;

return( y ) ;

}

main( )

{ int n = 5 ;

printf( "\nThe result is %lf\n", fun ( n ) ) ;

}

解题思路:

 

 

 

 

第一处:使用for循环计算公式,必须计算到m,所以应改为for(i=2; i<=m; i++)

第二处:在除法运算中,如果除数和被除数都是整数,所以所除结果也是整数,因此应改

y+=1./(i*i)

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

请编写函数fun, 函数的功能是:实现B=A+A', 即把矩阵A加上A的转置, 存放

在矩阵B中。计算结果在 main 函数中输出。

例如,输入下面的矩阵: 其转置矩阵为:

1 2 3 1 4 7

4 5 6 2 5 8

7 8 9 3 6 9

程序输出:

2 6 10

6 10 14

10 14 18

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

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

你编写的若干语句。

给定源程序:

#include

void fun ( int a[3][3], int b[3][3])

{

}

main( ) /* 主程序 */

{ int a[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}, t[3][3] ;

int i, j ;

fun(a, t) ;

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

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

printf("}", t[i][j]) ;

printf("\n") ;

}

NONO () ;

}

解题思路:

本题考察考生如何实现矩阵的转置,然后执行两个矩阵中的元素值相加生成一个新的矩阵。

矩阵转置实现上就是原行元素值变为列元素值,原列元素值变为行元素值。

参考答案:

void fun ( int a[3][3], int b[3][3])

{

int c[3][3] ;

int i, j ;

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

for(j = 0 ; j < 3 ; j++) {

c[i][j] = a[j][i] ; /* 矩阵的转置 */

b[i][j] = a[i][j] + c[i][j] ;

}

}

 

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

82套:

给定程序中,函数fun的功能是:找出100999之间(含100999)所有整数

中各位上数字之和为xx为一正整数)的整数,然后输出;符合条件的整数个数作

为函数值返回。

例如,当x值为5时,100999之间各位上数字之和为5的整数有:104113

122131140203212221230302311320401410500。共有15

个。当x值为27时,各位数字之和为27的整数是:999。只有1个。

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

果。

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

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

给定源程序:

#include

fun(int x)

{ int n, s1, s2, s3, t;

n=0;

t=100;

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

while(t<=__1__){

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

s1=t; s2=(__2__); s3=t/100;

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

if(s1+s2+s3==__3__)

{ printf("%d ",t);

n++;

}

t++;

}

return n;

}

main()

{ int x=-1;

while(x<0)

{ printf("Please input(x>0): "); scanf("%d",&x); }

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

}

解题思路:

第一处:使用while循环找出100999之间所有整数,所以应填:999

第二处:s2是求十位数字,所以应填:t/10

第三处:各位数字之和为x,所以应填:x

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

给定程序MODI1.C中函数fun的功能是:从低位开始取出长整型变量s中偶数位

上的数,依次构成一个新数放在t中。高位仍在高位,低位仍在低位。

例如,当s中的数为:7654321时,t中的数为:642

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

 

 

 

 

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

给定源程序:

#include

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

void fun (long s, long t)

{ long sl=10;

s /= 10;

*t = s % 10;

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

while ( s < 0)

{ s = s/100;

*t = s*sl + *t;

sl = sl * 10;

}

}

main()

{ long s, t;

printf("\nPlease enter s:"); scanf("%ld", &s);

fun(s, &t);

printf("The result is: %ld\n", t);

}

解题思路:

第一处:在函数fun体中,t是一个指针型变量,因此定义形参时也应定义指针。

第二处:条件应该s>0,所以应改为:while(s>0)

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

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组

s,请编写函数fun,它的功能是:按分数的高低排列学生的记录,高分在前。

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

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

你编写的若干语句。

给定源程序:

#include

#define N 16

typedef struct

{ char num[10];

int s;

} STREC;

int fun( STREC a[] )

{

}

main()

{ STREC s[N]={{"GA005",85},{"GA003",76},{"GA002",69},{"GA004",85},

\TAB \TAB {"GA001",91},{"GA007",72},{"GA008",64},{"GA006",87},

\TAB \TAB {"GA015",85},{"GA013",91},{"GA012",64},{"GA014",91},

\TAB \TAB {"GA011",66},{"GA017",64},{"GA018",64},{"GA016",72}};

int i;FILE *out ;

fun( s );

 

 

 

 

printf("The data after sorted :\n");

for(i=0;i

{ if( (i)%4==0 )printf("\n");

printf("%s M ",s[i].num,s[i].s);

}

printf("\n");

out = fopen("c:\\test\\out.dat","w") ;

for(i=0;i

{ if( (i)%4==0 && i) fprintf(out, "\n");

fprintf(out, "M ",s[i].s);

}

fprintf(out,"\n");

fclose(out) ;

}

解题思路:

本题是按结构体中成绩s进行降序排列,其结果仍存入当前结构体中。

参考答案:

#include

#define N 16

typedef struct

{ char num[10];

int s;

} STREC;

int fun( STREC a[] )

{

STREC tmp;

int i,j;

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

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

if(a[i].s < a[j].s) {

tmp = a[i];

a[i] = a[j];

a[j] = tmp;

}

}

 

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

83套:

给定程序中,函数fun的功能是:找出100xx999)之间各位上的数字之

和为15的所有整数,然后输出;符合条件的整数个数作为函数值返回。

例如,当n值为500时,各位数字之和为15的整数有:159168177186

195249258267276285294339348357366375384393

429438447456465474483492。共有26个。

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

果。

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

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

给定源程序:

#include

fun(int x)

{ int n, s1, s2, s3, t;

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

n=__1__;

t=100;

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

while(t<=__2__)

{ s1=t; s2=(t/10); s3=t/100;

if(s1+s2+s3==15)

{ printf("%d ",t);

n++;

}

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

__3__;

}

return n;

}

main()

{ int x=-1;

while(x>999||x<0)

{ printf("Please input(0

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

}

解题思路:

第一处:符合条件的整数个数n,必须进行初始化,所以应填:0

 

 

 

 

第二处:找出x999,所以应填:x

第三处:循环控制变量t每循环一次t要加1,所以应填:t++

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

给定程序MODI1.C中函数fun的功能是:先将s所指字符串中的字符按逆序存放

t所指字符串中,然后把s所指串中的字符按正序连接到t所指串的后面。

例如:当s所指的字符串为:"ABCDE"时,

t所指的字符串应为:"EDCBAABCDE"

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

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

给定源程序:

#include

#include

void fun (char *s, char *t)

{

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

int i;

sl = strlen(s);

for (i=0; i

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

t[i] = s[sl-i];

for (i=0; i

\TAB t[sl+i] = s[i];

t[2*sl] = '\0';

}

main()

{ char s[100], t[100];

printf("\nPlease enter string s:"); scanf("%s", s);

fun(s, t);

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

}

解题思路:

第一处:变量sl没有定义。

第二处:在C语言中,字符串开始位置从0开始的,所以应改为:t[i] = s[sl-i-1];

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

函数fun的功能是: ab中的两个两位正整数合并形成一个新的整数放在

c中。合并的方式是:将a中的十位和个位数依次放在变量c的百位和个位上,b

的十位和个位数依次放在变量c的千位和十位上。

例如,当a45b=12。调用该函数后,c=1425

注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。

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

你编写的若干语句。

给定源程序:

#include

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

参考答案:

void fun(int a, int b, long *c)

{

*c=(b/10)*1000+(a/10)*100+(b)*10+(a);

}

 

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

84套:

函数fun的功能是:从三个形参abc中找出中间的那个数,作为函数值返

回。

例如,当a=3, b=5, c=4时,中数为4

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

果。

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

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

给定源程序:

#include

int fun(int a, int b, int c)

{

int t;

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

t = (a>b) ? (b>c? b :(a>c?c:___1___)) : ((a>c)?___2___ : ((b>c)?c:___3___));

return t;

}

main()

{ int a1=3, a2=5, a3=4, r;

r = fun(a1, a2, a3);

printf("\nThe middle number is : %d\n", r);

}

解题思路:

第一处:给三个数进行比较大小,所以应填:a

第二处:给三个数进行比较大小,所以应填:a

第三处:给三个数进行比较大小,所以应填:b

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

给定程序MODI1.C中函数fun的功能是: 首先将大写字母转换为对应小写字母;

若小写字母为au,则将其转换为其后的第5个字母;若小写字母为vz, 使其值减

21。转换后的小写字母作为函数值返回。例如,若形参是字母A,则转换为小写字母

f; 若形参是字母W,则转换为小写字母b

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

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

给定源程序:

#include

#include

char fun(char c)

{ if( c>='A' && c<='Z')

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

C=C+32;

 

 

 

 

if(c>='a' && c<='u')

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

c=c-5;

else if(c>='v'&&c<='z')

c=c-21;

return c;

}

main()

{ char c1,c2;

printf("\nEnter a letter(A-Z): "); c1=getchar();

if( isupper( c1 ) )

{ c2=fun(c1);

printf("\n\nThe letter \'%c\' change to \'%c\'\n", c1,c2);

}

else printf("\nEnter (A-Z)!\n");

}

解题思路:

第一处:变量c错写成大写C了。

第二处:要求转换为其后的第5个字母,所以应改为:c=c+5;

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

请编写函数fun, 其功能是: 计算并输出

例如, 在主函数中从键盘给n输入20,输出为:s=534.188884

注意: 要求n的值大于1但不大于100

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

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

你编写的若干语句。

给定源程序:

#include

#include

double fun(int n)

{

}

main()

{ int n; double s;

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

s=fun(n);

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

NONO();

}

解题思路:

本题是根据公式计算多项式的值。注意变量的取值范围。

参考答案:

double fun(int n)

{

int i;

double fac=1.0;

double sum=1.0;

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

fac+=sqrt(i);

sum+=fac;

}

return sum;

}

 

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

85套:

给定程序的功能是调用fun函数建立班级通讯录。通讯录中记录每位学生的

编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作

为一个数据块写到名为myfile5.dat的二进制文件中。

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

 

 

 

 

果。

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

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

给定源程序:

#include

#include

#define N 5

typedef struct

{ int num;

char name[10];

char tel[10];

}STYPE;

void check();

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

int fun(___1___ *std)

{

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

___2___ *fp; int i;

if((fp=fopen("myfile5.dat","wb"))==NULL)

return(0);

printf("\nOutput data to file !\n");

for(i=0; i

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

fwrite(&std[i], sizeof(STYPE), 1, ___3___);

fclose(fp);

return (1);

}

main()

{ STYPE s[10]={ {1,"aaaaa","111111"},{1,"bbbbb","222222"},{1,"ccccc","333333"},

{1,"ddddd","444444"},{1,"eeeee","555555"}};

int k;

k=fun(s);

if (k==1)

{ printf("Succeed!"); check(); }

else

printf("Fail!");

}

void check()

{ FILE *fp; int i;

STYPE s[10];

if((fp=fopen("myfile5.dat","rb"))==NULL)

{ printf("Fail !!\n"); exit(0); }

printf("\nRead file and output to screen :\n");

printf("\n num name tel\n");

for(i=0; i

{ fread(&s[i],sizeof(STYPE),1, fp);

printf("m %s %s\n",s[i].num,s[i].name,s[i].tel);

 

 

 

 

}

fclose(fp);

}

解题思路:

本题是要求把指定的学生记录输出到指定的文件中。程序中共有三处要填上适当的内容,

使程序能运行出正确的结果。

第一处:结构定义自变量,因此应填写STYPE

第二处:在所填行的下面一行,使用fopen来创建一个二进制文件,但文件流的变量名fp

已经给出,这样,此处只能填写FILE

每三处:fwrite是把变量中的内容写入指定文件中,再根据fwrite参数的使用要求,所以

只能填写文件流变量fp

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

给定程序MODI1.C中函数fun的功能是:先将在字符串s中的字符按正序存放

t串中,然后把s中的字符按逆序连接到t串的后面。

例如:当s中的字符串为:"ABCDE"时,

t中的字符串应为:"ABCDEEDCBA"

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

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

给定源程序:

#include

#include

void fun (char *s, char *t)

{ int i, sl;

sl = strlen(s);

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

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

t[i] = s[i];

for (i=0; i

\TAB t[sl+i] = s[sl-i-1];

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

t[sl] = '\0';

}

main()

{ char s[100], t[100];

printf("\nPlease enter string s:"); scanf("%s", s);

fun(s, t);

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

}

解题思路:

第一处:变量sl错写成了s1

第二处:新串t的字符串结束位置不正确,应该是两倍的sl距离。

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

函数fun的功能是:将两个两位数的正整数ab合并形成一个整数放在c中。

合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位

和个位数依次放在c数的百位和个位上。

例如,当a45b=12时,调用该函数后,c=4152

注意: 部分源程序存在文件PROG1.C中。数据文件IN.DAT中的数据不得修改。

 

 

 

 

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

入你编写的若干语句。

给定源程序:

#include

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: %d\n", c);

NONO();

}

 

解题思路:

本题是给出两个两位数的正整数分别取出各位上的数字,再按条件组成一个新数。

a十位数字的方法:a/10

a个位数字的方法:a

参考答案:

void fun(int a, int b, long *c)

{

*c=(a/10)*1000+(b/10)*100+(a)*10+(b);

}

 

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

86套:

甲乙丙丁四人同时开始放鞭炮,甲每隔t1秒放一次,乙每隔t2秒放一次,

每隔t3秒放一次,丁每隔t4秒放一次,每人各放n次。函数fun的功能是根据形参

提供的值,求出总共听到多少次鞭炮声作为函数值返回。注意,当几个鞭炮同时

炸响,只算一次响声,第一次响声是在第0秒。

例如,若t1=7t2=5t3=6t4=4n=10,则总共可听到28次鞭炮声。

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

果。

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

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

给定源程序:

#include

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

#define OK(i, t, n) ((___1___%t==0) && (i/t

int fun(int t1, int t2, int t3, int t4, int n)

{ int count, t , maxt=t1;

if (maxt < t2) maxt = t2;

if (maxt < t3) maxt = t3;

if (maxt < t4) maxt = t4;

count=1; /* count赋初值 */

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

for(t=1; t< maxt*(n-1); ___2___)

{

if(OK(t, t1, n) || OK(t, t2, n)|| OK(t, t3, n) || OK(t, t4, n) )

count++;

}

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

return ___3___;

}

main()

{ int t1=7, t2=5, t3=6, t4=4, n=10, r;

r = fun(t1, t2, t3, t4, n);

printf("The sound : %d\n", r);

}

 

 

 

 

解题思路:

第一处:根据定义的要求,所以应填:i

第二处:for循环语句的增量,所以应填:t++

第三处:返回统计次数,所以应填:count

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

给定程序MODI1.C中函数fun的功能是: 根据输入的三个边长(整型值), 判断

能否构成三角形; 构成的是等边三角形, 还是等腰三角形。若能构成等边三角形

函数返回3,若能构成等腰三角形函数返回2, 若能构成一般三角形函数返回1,

不能构成三角形函数返回0

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

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

给定源程序:

#include

#include

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

void fun(int a,int b,int c)

{ if(a+b>c && b+c>a && a+c>b) {

if(a==b && b==c)

return 3;

else if(a==b||b==c||a==c)

return 2;

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

else retrun 1

}

else return 0;

}

main()

{ int a,b,c,shape;

printf("\nInput a,b,c: "); scanf("%d%d%d",&a,&b,&c);

printf("\na=%d, b=%d, c=%d\n",a,b,c);

shape =fun(a,b,c);

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

}

解题思路:

第一处:函数有返回值,不能定义为void,所以应改为:int fun(int a,int b,int c)

第二处:语句后缺少分号。

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

请编写函数fun, 其功能是: 计算并输出3n之间(3n)所有素数的平方根

之和。

例如, 在主函数中从键盘给n输入100,输出为: sum=148.874270

注意: 要求n的值大于2但不大于100

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

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

你编写的若干语句。

给定源程序:

#include

#include

 

 

 

 

double fun(int n)

{

}

main()

{ int n; double sum;

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

sum=fun(n);

printf("\n\nsum=%f\n\n",sum);

NONO();

}

解题思路:

本题是计算并输出3n之间(3n)所有素数的平方根之和。

参考答案:

double fun(int n)

{

int i,j=0;

double s=0;

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

for (j=2; j

if (i%j == 0) break;

if (j == i) s=s+sqrt(i);

}

return s;

}

 

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

87套:

函数fun的功能是:统计长整数n的各个位上出现数字123的次数,并通过

外部(全局)变量c1c2c3返回主函数。例如:当n=123114350时,结果应该为:

c1=3 c2=1 c3=2

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

果。

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

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

给定源程序:

#include

int c1,c2,c3;

void fun(long n)

{ c1 = c2 = c3 = 0;

while (n) {

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

switch(___1___)

{

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

case 1: c1++;___2___;

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

case 2: c2++;___3___;

case 3: c3++;

}

n /= 10;

}

}

main()

{ long n=123114350L;

fun(n);

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

printf("n=%ld c1=%d c2=%d c3=%d\n",n,c1,c2,c3);

}

解题思路:

第一处:取个位数上的数,所以n就可以得到个位数。

第二处:switch条件判断中,满足条件做好后,必须使用break语句跳出选择体,所以应填:

break

 

 

 

 

第三处:同第二处。

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

给定程序MODI1.C中函数fun的功能是: 统计一个无符号整数中各位数字值为

零的个数, 通过形参传回主函数;并把该整数中各位上最大的数字值作为函数值

返回。例如, 若输入无符号整数30800, 则数字值为零的个数为3, 各位上数字值

最大的是8

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

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

给定源程序:

#include

int fun(unsigned n, int *zero)

{ int count=0,max=0,t;

do

{ t=n;

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

if(t=0)

count++;

if(max

n=n/10;

}while(n);

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

zero=count;

return max;

}

main()

{ unsigned n; int zero,max;

printf("\nInput n(unsigned): "); scanf("%d",&n);

max = fun( n,&zero );

printf("\nThe result: max=%d zero=%d\n",max,zero);

}

解题思路:

第一处:条件相等符号为==

第二处:由于zero是一个指针型变量,所以给它进行赋值时应带指针,因此应改为:

*zero=count;

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

请编写函数fun, 其功能是: 计算并输出下列多项式的值:

    1        1             1

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

       1*2      1*2*3        1*2*3*…50

例如, 在主函数中从键盘给n输入50,输出为:s=1.718282

注意: 要求n的值大于1但不大于100

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

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

你编写的若干语句。

给定源程序:

#include

double fun(int n)

 

 

 

 

{

}

main()

{ int n; double s;

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

s=fun(n);

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

NONO();

}

解题思路:

本题是根据公式计算多项式的值。注意变量的取值范围。

参考答案:

double fun(int n)

{

double s=0, t=1;

int i ;

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

t *= i;

s += 1./t;

}

return s;

}

 

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

88套:

函数fun的功能是:把形参a所指数组中的最大值放在a[0]中,接着求出a

指数组中的最小值放在a[1]中;再把a所指数组元素中的次大值放在a[2]中,把

a数组元素中的次小值放在a[3]中;其余以此类推。例如:a所指数组中的数据

最初排列为:142396587,则按规则移动后,数据排列为:

918273645。形参n中存放a所指数组中数据的个数。

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

果。

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

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

给定源程序:

#include

#define N 9

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

void fun(int ___1___, int n)

{ int i, j, max, min, px, pn, t;

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

for (i=0; i

{ max = min = a[i];

px = pn = i;

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

for (j=___3___; j

{ if (max < a[j])

{ max = a[j]; px = j; }

if (min > a[j])

{ min = a[j]; pn = j; }

}

if (px != i)

{ t = a[i]; a[i] = max; a[px] = t;

if (pn == i) pn= px;

}

if (pn != i+1)

{ t = a[i+1]; a[i+1] = min; a[pn] = t; }

}

}

main()

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

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

for (i=0; i 

 

 

 

printf("\n");

fun(b, N);

printf("\nThe data after moving :\n");

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

}

解题思路:

第一处:形参a应定义指针整型变量,所以应填:*a

第二处:外for循环每次增量应该加2

第三处:内for循环的初始值应为:i+1

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

给定程序MODI1.C中函数fun的功能是:按顺序给s所指数组中的元素赋予从2

开始的偶数,然后再按顺序对每五个元素求一个平均值,并将这些值依次存放在

w所指的数组中。若s所指数组中元素的个数不是5的倍数,多余部分忽略不计。

例如,s所指数组有14个元素,则只对前10个元素进行处理,不对最后的4

元素求平均值。

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

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

给定源程序:

#include

#define SIZE 20

fun(double *s, double *w)

{ int k,i; double sum;

for(k=2,i=0;i

{ s[i]=k; k+=2; }

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

sun=0.0;

for(k=0,i=0;i

{ sum+=s[i];

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

if(i+1%5==0)

{ w[k]=sum/5; sum=0; k++; }

}

return k;

}

main( )

{ double a[SIZE],b[SIZE/5];

int i, k;

k = fun(a,b);

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

for(i=0; i

{ if(i%5==0) printf("\n");

printf("%4.0f", a[i]);

}

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

for(i=0; i6.2f ",b[i]);

printf("\n\n");

 

 

 

 

}

解题思路:

第一处:变量名书写错误,应为sum

第二处:由于%的优先级比+优先,所以必须加上括号,因此改为:if((i+1)%5==0)

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

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组

s,请编写函数fun,它的功能是:把低于平均分的学生数据放在b所指的数组中,

低于平均分的学生人数通过形参n传回,平均分通过函数值返回。

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

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

你编写的若干语句。

给定源程序:

#include

#define N 8

typedef struct

{ char num[10];

double s;

} STREC;

double fun( STREC *a, STREC *b, int *n )

{

}

main()

{ STREC s[N]={{"GA05",85},{"GA03",76},{"GA02",69},{"GA04",85},

{"GA01",91},{"GA07",72},{"GA08",64},{"GA06",87}};

STREC h[N],t;FILE *out ;

int i,j,n; double ave;

ave=fun( s,h,&n );

printf("The %d student data which is lower than %7.3f:\n",n,ave);

for(i=0;i

printf("%s %4.1f\n",h[i].num,h[i].s);

printf("\n");

out = fopen("c:\\test\\out.dat","w") ;

fprintf(out, "%d\n%7.3f\n", n, ave);

for(i=0;i

for(j=i+1;j

if(h[i].s>h[j].s) {t=h[i] ;h[i]=h[j]; h[j]=t;}

for(i=0;i

fprintf(out,"%4.1f\n",h[i].s);

fclose(out);

}

解题思路:

本题是利用循环计算出记录结构中学生成绩的平均值,再把低于平均值的记录存放到b所指

的数组中。具体操作请看答案程序中的说明。

参考答案:

#include

#define N 8

typedef struct

 

 

 

 

{ char num[10];

double s;

} STREC;

double fun( STREC *a, STREC *b, int *n )

{

int i ;

double ave = 0.0 ;

*n = 0 ;

for(i = 0 ; i < N ; i++) ave = ave + a[i].s ;

ave /= N ; /* 计算平均值 */

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

if(a[i].s < ave) { /* 把低于平均值的记录存放到b所指的数组中 */

b[*n]=a[i] ;

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

}

return ave ; /* 返回平均值 */

}

 

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

89套:

给定程序中,函数fun的功能是:求出形参ss所指字符串数组中最长字符串的

长度,其余字符串左边用字符*补齐,使其与最长的字符串等长。字符串数组中共

M个字符串,且串长

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

果。

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

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

给定源程序:

#include

 

 

 

 

#include

#define M 5

#define N 20

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

{ int i, j, k=0, n, m, len;

for(i=0; i

{ len=strlen(ss[i]);

if(i==0) n=len;

if(len>n) {

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

n=len; ___1___=i;

}

}

for(i=0; i

if (i!=k)

{ m=n;

len=strlen(ss[i]);

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

for(j=___2___; j>=0; j--)

ss[i][m--]=ss[i][j];

for(j=0; j

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

___3___='*';

}

}

main()

{ char ss[M][N]={"shanghai","guangzhou","beijing","tianjing","cchongqing"};

int i;

printf("\nThe original strings are :\n");

for(i=0; i

printf("\n");

fun(ss);

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

for(i=0; i

}

解题思路:

第一处:使用变量k来保存第几个字符串是最长的字符串,所以应填:k

第二处:利用for循环把原字符串右移至最右边存放,字符串的长为len,所以应填:len

第三处:左边用字符*补齐,所以应填:ss[i][j]

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

给定程序MODI1.C中函数fun的功能是: 计算整数n的阶乘。请改正程序中的错

误或在下划线处填上适当的内容并把下划线删除,使它能计算出正确的结果。

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

给定源程序:

#include

double fun(int n)

{

 

 

 

 

double result=1.0;

while (n>1 && n<170)

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

result*=--n;

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

return _____;

}

main()

{

int n;

printf("Enter an integer: ");

scanf("%d",&n);

printf("\n\n%d!=%lg\n\n",n,fun(n));

}

解题思路:

第一处:--n是先减1n--是后减1。本题应该先乘以n,再减1,才正确。

第二处:返回计算结果,所以应填:result

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

编写函数fun,函数的功能是: s所指的字符串中删除给定的字符。同一字

母的大、小写按不同字符处理。

若程序执行时输入字符串为: turbo c and borland c++

从键盘上输入字符:n, 则输出后变为: turbo c ad borlad c++

如果输入的字符在字符串中不存在, 则字符串照原样输出。

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

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

你编写的若干语句。

给定源程序:

#include

#include

int fun(char s[],char c)

{

}

main()

{

static char str[]="turbo c and borland c++";

char ch;

printf("原始字符串:%s\n", str);

printf("输入一个字符:");

scanf("%c",&ch);

fun(str,ch);

printf("str[]=%s\n",str);

NONO();

}

 

解题思路:

本题是考察考生怎样在字符串中删除指定的字符,结果仍存放在原字符串中。给出的程序

是引用字符串指针pwhile循环语句以及if条件判断语句进行处理的,新字符串的位置是由i

来控制的,循环结束后,再给新字符串置字符串结束符,最后产生的新字符串形参s返回到主程

序中。

参考答案:

int fun(char s[],char c)

{

char *p = s ;

int i = 0 ;

while(*p) {

if(*p != c) s[i++] = *p ;

p++ ;

}

s[i] = 0 ;

}

 

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

90套:

函数fun的功能是:统计所有小于等于n(n>2)的素数的个数,素数的个数作

为函数值返回。

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

果。

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

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

给定源程序:

#include

int fun(int n)

{ int i,j, count=0;

printf("\nThe prime number between 3 to %d\n", n);

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

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

for (___1___; j

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

if (___2___%j == 0)

break;

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

if (___3___>=i)

{ count++; printf( count? "]":"\n]",i); }

}

return count;

}

main()

{ int n=20, r;

r = fun(n);

printf("\nThe number of prime is : %d\n", r);

}

解题思路:

第一处:素数的条件是除1和其本身外不能整除该数,所以应填:2

第二处:判断i是否素数,所以应填:i

第三处:如果内循环for中所有数都不能整除i,那么i是素数且j大于等于i,所以应填:j

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

数列中,第一项值为3, 后一项都比前一项的值增5;给定程序MODI1.C中函数

fun的功能是: 计算前n(4项的累加和;每累加一次把被4除后余2的当前累

加值放入数组中, 符合此条件的累加值的个数作为函数值返回主函数。

例如, n的值为20,该数列为3,8,13,18,23,28,……,93,98。符合此条件

的累加值应为42,126,366,570,1010

请改正函数fun中指定部位的错误, 使它能得出正确的结果。

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

给定源程序:

#include

#define N 20

int fun(int n,int *a)

{ int i,j,k,sum;

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

sum=j==0;

for(k=3,i=0;i

{ sum=sum+k;

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

if(sum%4=2)

a[j++]=sum;

}

return j;

}

main()

{ int a[N],d,n,i;

printf("\nEnter n (4

d=fun(n,a);

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

for(i=0; i

}

解题思路:

第一处:连续赋初值为0,中间使用条件相等符号了,所以应改为:sum=j=0;

第二处:条件相等符号为==

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

请编写函数fun, 其功能是: 计算并输出下列多项式的值:

例如, 在主函数中从键盘给n输入8, 输出为: s=0.662872

注意: 要求n的值大于1但不大于100

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

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

你编写的若干语句。

给定源程序:

#include

double fun(int n)

{

}

main()

{ int n; double s;

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

s=fun(n);

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

NONO();

}

 

解题思路:

本题是根据公式计算多项式的值。

参考答案:

double fun(int n)

{

int i;

double sum=0.0;

if (n>1 && n<=100) {

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

sum+=1.0/(2*i-1)-1.0/(2*i);

}

return sum;

}