欢迎光临散文网 会员登陆 & 注册

全国计算机等级考试二级C语言练习题(九)

2021-02-13 09:28 作者:朝颜晚扶桑  | 我要投稿

1.程序填空题

请补充函数fun(),该函数的功能是把数组aa中的偶数元素按原来的先后顺序放在原数组后面。

例如,输入“33、67、42、58、25、76、85、16、41、56”,输出结果“33、67、25、85、41、42、58、76、16、56”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

void fun(int aa[])

{

int I,j=0,k=0;

int bb[N];

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

{

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

if(___1___)

bb[k++]=aa[i];

else

aa[j++]=aa[i];

}

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

for(i=0;___2___;i++,j++)

aa[j]=bb[i];

}

main()

{

int I;

int aa[N]={33,67,42,58,25,76,85,

16,41,56};

system("cls");

printf("\n***original list***\n");

for(i=0;i<N;i++) printf("%4d",aa[i]);

fun(aa);

printf("\n***new list***\n ");

for(i=0;i<N;i++) printf("%4d",aa[i]);

}

【答案】

(1)aa[i]%2==0 (2)i<k 

2.程序修改题

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

A1=1,A2=1/(1+A1),A3=1/(1+A2),…,

An=1/(1+A(n-1))

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

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

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

int fun(int n)

{

float A=1; int I;

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

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

A=1.0/(1+A);

return A;

}

main()

{

int n;

system("cls");

printf("Please enter n: ");

scanf("%d",&n);

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

}

【答案】

(1)将 int fun(int n) 改为:

float fun(int n)

(2)将 for(i=2;i<n;i++) 改为:

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

3.程序设计题

N名学生的成绩已在主函数中放入一个带头节点的链表结构中,h指向链表的头节点。请编写函数fun(),它的功能是:求出平均分,由函数值返回。

例如,若学生的成绩是85、76、69、91、72、64、87,则平均分应当是78.625。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdlib.h>

#include <stdio.h>

#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<N)

{

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

}

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

}

【答案】

double fun(STREC *h)

{

double av=0.0;

STREC *p=h->next;

while(p!=NULL)

{

av=av+p->s;

p=p->next;

}

return av/N;

1.程序填空题

请补充main函数,该函数的功能是:把一维数组中的元素逆置。结果仍然保存在原数组中。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

main()

{

int I,j,t;

int bb[N];

system("cls");

for(i=0;i<N;i++) bb[i]=I;

printf("\n***original list***\n");

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

printf("%4d",bb[i]);

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

for(___1___;j<=I;___2___)

{ t=bb[j]; bb[j]=bb[i]; bb[i]=t; }

printf("\n*** new list ***\n");

for(i=0;i<N;i++) printf("%4d",bb[i]);

}

【答案】

(1)j=0,--i (2)j++,i-- 

2.程序修改题

下列给定程序中,函数fun()的功能是:计算整数n的阶乘。

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

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

#include <stdio.h>

#include <windows.h>

double fun(int n)

{

double result=1.0;

while(n>1&&n<170)

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

result*=--n;

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

return;

}

main()

{

int n;

system("cls");

printf("Enter an integer: ");

scanf("%d",&n);

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

}

【答案】

(1)将 result*=--n; 改为:result*=n--;

(2)将 return; 改为:return result;

3.程序设计题

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

例如,若字符串中的内容为****A*BC*DEF*G* ******,删除后,字符串中的内容则应当是****A*B C*DEF*G。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <stdio.h>

#include <conio.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);

}

【答案】

void fun (char *a)

{

while(*a!='\0')

a++;

a--;

while(*a=='*')

a--;

*(a+1)='\0';

}

1.程序填空题

请补充函数fun(),该函数的功能是:把数组aa中元素下标为偶数的元素按从小到大重新保存在原数组中,其他元素位置不变。

例如,输入“33、67、42、58、25、76、85、16、41、56”,则输出“25、67、33、58、41、76、42、16、85、56”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

void fun(int aa[])

{

int I,j,t;

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

{

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

for(___1___;j<N;j=j+2)

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

if(___2___)

{ t=aa[j]; aa[j]=aa[i]; aa[i]=t; }

}

}

main()

{

int I;

int aa[N]={33,67,42,58,25,76,85,16,41,56};

system("cls");

printf("\n***original list***\n");

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

printf("%4d",aa[i]);

fun(aa);

printf("\n***new list***\n");

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

printf("%4d",aa[i]);

}

【答案】

(1)j=i或j=i+2 (2)aa[i]>aa[j]

2.程序修改题

给定程序中,函数fun()的功能是:使数组中的元素的值增加10倍。

改正其中的错误,使其能得出正确的结果。

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

#include <stdio.h>

#include <conio.h>

int m[10];

void fun(void)

{

int j;

printf("In subfunc after calling\n");

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

{

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

printf("%3d",m[j]*10);

}

}

main()

{

int I;

printf("In main before calling\n");

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

{ m[i]=I; printf("%3d",m[i]); }

fun();

printf("In main after calling\n");

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

printf("%3d",m[i]);

getch();

}

【答案】

将 printf("%3d",m[j]*10); 改为:

printf("%3d",m[j]=m[j]*10); 

3.程序设计题

函数fun的功能是:将形参b所指数组中的前半部分元素的值和后半部分元素的值对换。形参n中存放数组中数据的个数,若n为奇数,则中间的元素不动。

例如,若a所指数组中的数据依次为:11 22 33 1 44 55 66,则调换后为:44 55 66 1 11 22 33。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。

#include <stdio.h>

#define M 7

void fun(int b[],int n)

{

 

}

main()

{

int x[M]={11,22,33,1,44,55,66},I;

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

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

printf("%4d ",x[i]);

printf("\n");

fun(x,M);

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

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

printf("%4d ",x[i]);

printf("\n");

}

【答案】

int j,temp,p;

p=(n%2==0) ? n/2:n/2+1;

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

{

temp=b[j];

b[j]=b[p+j];

b[p+j]=temp;

}

1.程序填空题

请补充main函数,该函数的功能是:打印出1~1000中满足个位数字的立方等于其本身的数。本题的结果为:1 64 125 216 729

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

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

#include <stdio.h>

#include <windows.h>

main()

{

int I,g;

system("cls");

for(I=1;I<1000;I++)

{

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

g=___1___;

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

if(___2___)

printf("%4d",I);

}

}

【答案】

(1)i%10 (2)g*g*g==i 

2.程序修改题

在给定程序中,函数fun()的功能是:从3个红球、5个白球、6个黑球中任意取出8个作为一组进行输出。在每组中,可以没有黑球,但必须要有红球和白球。组合数作为函数值返回。正确的组合数应该是15。程序中i的值代表红球数,j的值代表白球数,k的值代表黑球数。

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

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

#include <stdio.h>

int fun()

{

int I,j,k,sum=0;

printf("The result :\n");

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

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

{

for(j=1;j<=5;j++)

{

k=8-i-j;

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

if(k>=1&&k<=6)

{

sum=sum+1;

printf("red:%4d white:%4d

black:%4d\n ",I,j,k);

}

}

}

return sum;

}

main()

{

int sum;

sum=fun();

printf("sum=%4d\n",sum);

}

【答案】

(1)将for(i=0;i<=3;i++) 改为:

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

(2)将if(k>=1&&k<=6) 改为:

if((k>=1&&k<=6)&&(i!=0)&&(j!=0)||(k==0))

3.程序设计题

请编写函数fun(),其功能是:将s所指字符串中下标为偶数的字符删除,串中剩余字符形成的新串放在t所指数组中。

例如,当s所指字符串中的内容为ABCDEFGHI JK,则在t所指数组中的内容应是BDFHJ。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <windows.h>

void fun(char *s,char t[])

{

 

}

main()

{

char s[100],t[100];

system("cls");

printf("Please enter string S: ");

scanf("%s",s);

fun(s,t);

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

}

【答案】

void fun(char *s,char t[])

{

int i,j=0,k=strlen(s);

for(i=1;i<k;i=i+2)

t[j++]=s[i];

t[j]='\0';

}

1.程序填空题

请补充main函数,该函数的功能是:从键盘输入一个字符串及一个指定字符,然后把这个字符及其后面的所有字符全部删除。结果仍然保存在原串中。

例如,输入“abcdef”,指定字符为“e”,则输出“abcd”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 80

main()

{

int i=0;

char str[N];

char ch;

system("cls");

printf("Input a string:\n");

gets(str);

printf("Input a charator;\n");

scanf("%c",&ch);

while(str[i]!='\0')

{

if(str[i]==ch)

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

___1___;

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

___2___;

}

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

str[i]=___3___;

printf("\n***display string***\n");

puts(str);

}

【答案】

(1)break; (2)i++ (3)‘\0’ 

2.程序修改题

下列给定程序中,函数fun的功能是:从整数1到50之间,选出能被3整除且有一位上的数是5的数,并把这些数放在b所指的数组中,这些数的个数作为函数值返回。规定,函数中a1放个位数,a2放十位数。

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

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

#include <stdio.h>

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

int fun(int *b);

{

int j,a1,a2,i=0;

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

for(j=10;j<=50;j++)

{

a2=j/10;

a1=j-a2*10;

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

{

b[i]=j;

i++;

}

}

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

return j;

}

main()

{

int a[50],I,n;

n=fun(a);

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

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

printf("%4d",a[i]);

printf("\n");

}

【答案】

(1)将fun(int *b);改为:int fun(int *b)

(2)将for(j=10;j<=50;j++)改为:

for(j=1;j<=50;j++)

(3)将return j;改为:return i;

3.程序设计题

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

S=1/(1×2)+1/(2×3)+…+1/(n×(n+1))例如,当n=10时,函数值为0.909091。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <conio.h>

#include <stdio.h>

#include <windows.h>

double fun(int n)

{

 

}

main()

{

system("cls");

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

}

【答案】

double fun(int n)

{

int i;

double s=0.0;

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

s=s+1.0/(i*(i+1));

return s;

}

1.程序填空题

请补充main函数,该函数的功能是:输出方程组“A+B=56,A+2B=72”的一组正整数解。本题的结果是:A=40,B=16。

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

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

#include <stdio.h>

main()

{

int I,j;

system("cls");

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

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

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

if(___1___)

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

printf("A=%2d,B=%2d",___2___);

}

【答案】

(1)i+j==56&&i+2*j==72 (2)i,j

2.程序修改题

在给定程序中,函数fun()的功能是,用下面的式子求π的近似值,直到最后一项的绝对值小于指定的数(参数num)为止:

π/4≈1-1/3+1/5-1/7+…

例如,程序运行后,输入0.0001,则程序输出3.1414。

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

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

#include <math.h>

#include <stdio.h>

#include <windows.h>

float fun(float num)

{

int s;

float n,t,pi;

t=1;pi=0;n=1;s=1;

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

while(t>=num)

{

pi=pi+t;

n=n+2;

s=-s;

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

t=s%n;

}

pi=pi*4;

return pi;

}

Chapter_6

main()

{

float n1,n2;

system("cls");

printf("Enter a float number: ");

scanf("%f",&n1);

n2=fun(n1);

printf("%6.4f\n",n2);

}

【答案】

(1)将while(t>=num)改为:

while(fabs(t)>=num)

(2)将t=s%n; 改为:t=s/n; 

3.程序设计题

假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:删除字符串中所有的*号。在编写函数时,不得使用C语言中提供的字符串函数。

例如,若字符串中的内容为****A*BC*DEF*G*** ****,删除后,字符串中的内容则应当是ABCDEFG。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <conio.h>

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

}

【答案】

void fun(char *a)

{

int i,j=0;

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

if(a[i]!='*')

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

a[j]='\0';

}

1.程序填空题

请补充函数fun(),该函数的功能是把数组aa中的奇数元素按原来的先后顺序放在原数组后面。

例如,输入“33、67、42、58、25、76、85、16、41、56”,输出结果“42、58、76、16、56、33、67、25、85、41”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

void fun(int aa[])

{

int I,j=0,k=0;

int bb[N];

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

{

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

if(___1___)

bb[k++]=aa[i];

else

aa[j++]=aa[i];

}

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

for(i=0;i<k;___2___)

aa[j]=bb[i];

}

main()

{

int I;

int aa[N]={33,67,42,58,25,76,85,16,41,56};

system("cls");

printf("\n***original list***\n");

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

printf("%4d",aa[i]);

fun(aa);

printf("\n***new list***\n");

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

printf("%4d",aa[i]);

}

【答案】

(1)aa[i]%2!=0或aa[i]%2==1 (2)i++,j++ 

2.程序修改题

给定程序中,函数fun()的功能是:求S的值。设

S=(22/(1*3))*(42/(3*5))*(62/(5*7))*…*(2k)2/

((2k-1)*(2k+1))

例如,当k为10时,函数的值应为1.533852。

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

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

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include <windows.h>

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

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

{

【答案】

(1)将 fun(int k) 改为:double fun(int k)

(2)将 return s 改为:return s ; 

3.程序设计题

请编写函数fun,其功能是:计算并输出给定10个数的方差:

例如,给定的10个数为75.0、66.0、73.0、84.0、57.0、67.0、45.0、92.0、44.0、58.0,则输出为F=14.982990。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun()的花括号中填入所编写的若干语句。

#include <stdio.h>

#include <math.h>

double fun(double y[10])

{

 

}

main()

{

double f,y[10]={75.0,66.0,73.0,84.0, 57.0,67.0,45.0,92.0,44.0,58.0};

int I;

FILE *out;

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

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

printf("%6.1f",y[i]);

printf("\n\n");

f=fun(y);

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

out=fopen ("outfile.dat","w");

fprintf(out,"%f",f);

fclose (out);

}

【答案】

int i,j;

double f=0.0,f1=0.0;

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

f1+=y[i];

f1/=10;

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

f+=(y[j]-f1)*(y[j]-f1);

f/=10;

f=pow(f,0.5);

return f;

1.程序填空题

请补充函数fun(),该函数的功能是:返回字符数组中指定字符的个数,指定字符从键盘输入。

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

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

#include <stdio.h>

#include <windows.h>

#define N 80

int fun(char s[],char ch)

{

int i=0,n=0;

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

while(___1___)

{

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

if(___2___)

n++;

i++;

}

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

___3___;

}

main()

{

int n;

char str[N], ch;

system("cls");

printf("Input a string:\n");

gets(str);

printf("Input a character:\n");

scanf("%c",&ch);

n=fun(str,ch);

printf("\nnumber of %c:%d",ch,n);

}

【答案】

(1)s[i]或s[i]!='\0'

(2)s[i]==ch

(3)return n

2.程序修改题

下列给定程序中函数fun的功能是:传入一个整数n,计算如下公式的值:

例如,若输入5,则应输出-0.283333。

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

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

#include <conio.h>

#include <stdio.h>

double fun(int n)

{

double s=1.0;

int I;

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

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

s=1.0-1/I;

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

return n;

}

main()

{

int n;

printf("\nPlease enter 1 integer numbers:\n");

scanf("%d",&n);

printf("\n\nThe result is %lf\n",

fun(n);

}

【答案】

(1)将s=1.0-1/i;改为:s=s-1.0/i;

或:s-=1.0/i;或:s-=(double)1/i

(2)return s;

3.程序设计题

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

S=1+x+x2/2!+x3/3!+…+xn/n!

例如,当n=10、x=0.3时,函数值为1.349859。

注意:部分源程序已给出。请勿改动主函数main和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

#include <conio.h>

#include <stdio.h>

#include <math.h>

#include <windows.h>

double fun(double x,int n)

{

 

}

main()

{

system("cls");

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

}

【答案】

double fun(double x,int n)

{

int i;

double s=1.0,s1=1.0;

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

{

s1=s1*i;

s=s+pow(x,i)/s1;

}

return s;

}


全国计算机等级考试二级C语言练习题(九)的评论 (共 条)

分享到微博请遵守国家法律