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

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

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

1.程序填空题

请补充main函数,该函数的功能是:把1~100间的所有素数保存在数组aa中,然后输出这些素数并计算它们的和。

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

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

#include <stdio.h>

main()

{

int n,I,j,k,flag,sum;

int aa[50];

sum=0; k=0;

system("cls");

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

{

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

___1___;

for(j=2;j<i&&flag;j++)

if(i%j==0)

{

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

___2___;

}

if(flag)

{

sum+=I;

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

___3___;

}

}

printf("\n*** prime number ***\n");

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

{

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

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

}

printf("\nsum=%d",sum);

}

【答案】

(1)flag=1 (2)flag=0 (3)aa[k++]=i 

2.程序修改题

下列给定程序中,函数fun()的功能是:根据输入的3个边长(整型值),判断能否构成三角形?若能构成等边三角形,则返回3;若是等腰三角形,则返回2;若能构成三角形则返回1;若不能,则返回0。

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

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

#include <math.h>

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

{

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

{

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

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

return 1;

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

return 2;

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

else return 3;

}

else return 0;

}

main()

{

int a,b,c,shape;

printf("Input a,b,c: ");

scanf("%d%d%d",&a,&b,&c);

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

shape=fun(a,b,c);

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

}

【答案】

(1)将 return 1; 改为:return 3;

(2)将 else return 3; 改为:else return 1; 

3.程序设计题

请编写函数fun(),该函数的功能是:移动字符串中的内容,移动的规则是把第1~m个字符平移到字符串的最后,把第m+1到最后的字符移到字符串的前部。

例如,字符串中原有的内容为ABCDEFGHIJK,m的值为3,移动后字符串中的内容应该是DEFGHI JKABC。

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

#include <stdio.h>

#include <string.h>

#define N 80

void fun(char *w,int m)

{

 

}

main()

{

char a[N]="ABCDEFGHIJK";

int m;

printf("The origina string :\n");

puts(a);

printf("\nEnter m: ");

scanf("%d",&m);

fun(a,m);

printf("The string after moving :\n");

puts(a);

printf("\n\n");

}

【答案】

void fun(char *w,int m)

{

int i,j;

char t;

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

{

t=w[0];

for(j=1;w[j]!='\0';j++)

w[j-1]=w[j];

w[j-1]=t; /*将第1个字符放到

最后一个字符中*/

}

}

1.程序填空题

请补充main函数,该函数的功能是:计算三名学生学科的平均成绩。

例如,当score[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}}时,五门学科的平均分为:84.5 89.5 85.3 86.3 86.3。

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

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

#include <stdio.h>

#include <windows.h>

#define N 3

#define M 5

main()

{

int I,j;

static float score[N][M]={{83.5,82,86,65,67},{80,91.5,84,99,95},{90,95,86,95,97}};

static float bb[N];

system("cls");

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

bb[i]=0.0;

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

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

{

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

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

bb[j]+=score[i][j];

}

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

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

printf("subject%d\taver age=%5.1f",i+1, ___3___);

return 0;

}

【答案】

(1)N (2)M (3)bb[i]/N

2.程序修改题

在给定程序中,函数fun()的功能是:求k!(k<12),所有阶乘的值作为函数值返回。例如:若k=10,则应输出3628800。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

long fun(int k)

{

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

if k>0

return(k*fun(k-1));

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

else if(k=0)

return 1;

}

main()

{

int k=10;

system("cls");

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

}

【答案】

(1)将 if k>0 改为:if (k>0)

(2)将 else if(k=0) 改为:else if(k==0)

3.程序设计题

请编写函数fun(),该函数的功能是:移动一维数组中的内容,若数组中有n个整数,要求把下标从0到p(p≤n-1)的数组元素平移到数组的最后。

例如:一维数组中的原始内容为1、2、3、4、5、6、7、8、9、10、11、12、13、14、15,p的值为3。移动后,一维数组中的内容应为5、6、7、8、9、10、11、12、13、14、15、1、2、3、4。

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

#include <stdio.h>

#define N 80

void fun(int *w,int p,int n)

{

 

}

main()

{

int a[N]={1,2,3,4,5,6,7,8,9,10,

11,12,13,14,15};

int I,p,n=15;

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

for(I=0;I<n;I++) printf("%3d",a[I]);

printf("\nEnter p: ");

scanf("%d",&p);

fun(a,p,n);

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

for(I=0;I<n;I++) printf("%3d",a[I]);

printf("\n\n");

}

【答案】

void fun(int *w, int p, int n)

{

int i,j,t;

for(i=0;i<=p;i++) /*循环左移p+1次*/

{

t=w[0];

for(j=1;j<n;j++) /*实现循环左移*/

w[j-1]=w[j];

w[j-1]=t;

}

}

1.程序填空题

请补充main函数,该函数的功能是:输出一个N×N矩阵,要求对角线元素赋值为1,非对角线上的元素赋值为0。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

main()

{

int bb[N][N];

int I,j,n;

system("cls");

printf("Input n:\n");

scanf("%d",&n);

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

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

{

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

___1___;

if(i==j)

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

bb[i][j]=___2___;

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

if(___3___)

bb[i][j]=1;

}

printf("\n***** the result *****\n");

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

{

printf("\n\n");

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

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

}

}

【答案】

(1)bb[i][j]=0 (2)1 (3)j==n-1-i

2.程序修改题

假定整数不重复数列{97,2,7,1,2,4,-1}中的数存放在数组s中。下列给定程序中,函数fun的功能是:删除数列中值为a的元素,同时将其他元素前移。Sum中存放的是数列中元素的个数。

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

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

#include <stdio.h>

#define M 100

fun(int *x,int sum,int a)

{

int temp=0,j;

x[sum]=a;

while(a!=x[temp])

temp=temp+1;

if(temp==sum)

{

return-1;

}

else

{

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

for(j=temp;j<sum;j++)

x[j+1]=x[j];

return sum-1;

}

}

main()

{

int s[M]={97,2,7,1,2,4,-1},a,sum,j;

sum=8;

printf("The array:\n");

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

printf("%5d",s[j]);

printf("\nPlease insert data want to deleted:");

scanf("%d",&a);

printf("Delete :%d\n",a);

sum=fun(s,sum,a);

if(sum==-1)

{

printf("***Not be found!***\n\n");

}

else

{

printf("The array after delete :\n");

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

printf("%5d",s[j]);

printf("\n\n");

}

}

【答案】

void fun(STREC *p)

{

int i;

(*p).ave =0.0;

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

(*p).ave =(*p).ave +(*p).s[i];

(*p).ave =(*p).ave /N;

}

3.程序设计题

某学生的记录由学号、8门课成绩和平均分组成,学号和8门课的成绩已在主函数中给出。请编写fun()函数,它的功能是:求出该学生的平均分并放在记录的ave成员中。

例如,学生的成绩是85.5、76、69.5、85、91、72、64.5、87.5,则他的平均分应当是78.875。

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

#include <stdio.h>

#define N 8

typedef struct

{ char num[10];

double s[N];

double ave;

}STREC;

void fun(STREC *p )

{

 

}

main()

{

STREC s={"GA005",85.5,76,69.5,85,91,

72,64.5,87.5};

int I;

fun(&s);

printf("The %s's student data:\n",

s.num); /*输出学号*/

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

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

printf("\nave=%7.3f\n", s.ave);

}

【答案】

void fun(STREC *p)

{

int i;

(*p).ave =0.0;

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

(*p).ave =(*p).ave +(*p).s[i];

(*p).ave =(*p).ave /N;

}

1.程序填空题

请补充main函数,该函数的功能是:输入两个正整数m和n,求这两个数的最大公约和最小公倍数。

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

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

#include <stdio.h>

#include <windows.h>

main()

{

int a,b,n,m,t;

system("cls");

printf("Input two numbers:\n");

scanf ("%d,%d",&n,&m);

if(n<m) { a=m; b=n; }

else { a=n; b=m; }

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

while(___1___)

{

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

t=___2___

a=b;

b=t;

}

printf("greatest common divisor:%d\n",a);

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

printf("least common multiple:%d\n",___3___);

}

【答案】

(1)b!=0 (2)a%b; (3)n*m/a

2.程序修改题

在给定程序中,函数fun()的功能是:利用插入排序法对字符串中的字符按从小到大的顺序进行排序。插入法的基本方法是:先对字符串中的头两个元素进行排序,然后把第3个字符插入到前两个字符中,插入后前3个字符依然有序;再把第4个字符插入到前3个字符中,待排序的字符串已在主函数中赋予。

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

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

#include <string.h>

#include <stdio.h>

#define N 80

void insert(char *aa)

{

int I, j, n;

char ch;

n=strlen(aa);

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

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

{

c=aa[i]; j=i-1;

while((j>=0)&&(ch<aa[j]))

{ aa[j+1]=aa[j]; j--; }

aa[j+1]=ch;

}

}

main()

{

char a[N]="QWERTYUIOPASDFGHJKLMNBVCXZ";

int I;

printf("The original string: %s\n",a);

insert(a);

printf("The string after sorting:

%s\n\n",a);

}

【答案】

将c=aa[i]; 改为:ch=aa[i];

3.程序设计题

请编写一个函数int fun(char *str),用来删除字符串中的所有空格。

例如:输入asd af aa z67,则输出为asdafaaz67。

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

#include <stdio.h>

#include <ctype.h>

#include <conio.h>

#include <windows.h>

int fun(char *str)

{

 

}

main()

{

char str[81];

int n;

system("cls");

printf("Input a string : ");

gets(str);

puts(str);

fun(str);

printf("***str: %s\n",str);

}

【答案】

int fun (char *str)

{

int i,j=0;

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

if(str[i]!=' ')

str[j++]=str[i];

str[j]='\0';

}

1.程序填空题

请补充main函数,该函数的功能是:求1+2!+ 3!+…+N!的和。

例如,1+2!+3!+…+5! +6!的和为873。

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

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

#include <stdio.h>

#include <windows.h>

main()

{

int I, n;

long s=0, t=1;

system("cls");

printf("Input n:\n");

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

scanf("%d",___1___);

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

{

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

t=___2___;

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

s=___3___;

}

printf("1!+2!+3!...+%d!=%ld\n",n,s);

}

【答案】

(1)&n (2)t*i (3)s+t

2.程序修改题

下列给定程序中,函数fun()的功能是:输出M行N列整数方阵,然后求两条对角线上的各元素之和,返回此和数。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

#define M 5

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

int fun(int n,int xx[ ][ ])

{

int I,j,sum=0;

printf("The %d x %d matrix:\n",M,M);

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

{

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

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

printf("%4f",xx[i][j]);

printf("\n");

}

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

sum+=xx[i][i]+xx[i][n-i-1];

return(sum);

}

main()

{

int aa[M][M]={{1,2,3,4,5},{4,3,2,1,0},

{6,7,8,9,0},{9,8,7,6,5},{3,4,5,6,7}};

system("cls");

printf("The sum of all elements on 2

diagnals is %d",fun(M,aa));

}

【答案】

(1)将fun(double b,double x0)改为:

double fun(double b,double x0)

(2)将if(abs(x1-x0)>=1e-6)改为:

if(fabs(x1-x0)>=1e-6) 

3.程序设计题

请编一个函数float fun(double h),函数的功能是对变量h中的值保留两位小数,并对第三位进行四舍五入(规定h中的值为正数)。

例如:若h值为8.32433,则函数返回8.32;若h值为8.32533,则函数返回8.33。

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

#include <stdio.h>

#include <conio.h>

#include <windows.h>

float fun(float h )

{

 

}

main()

{

float a;

system("cls");

printf("Enter a: ");

scanf("%f",&a);

printf("The original data is : ");

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

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

}

【答案】

float fun(float h )

{

long t;

t=(h*1000+5)/10;

return (float)t/100;

}

1.程序填空题

请补充函数fun(),该函数的功能是:把字符串str中的字符按字符的ASCII码降序排列,处理后的字符串仍然保存在原串中,字符串及其长度作为函数参数传入。

例如,如果输入“cdefgh”,则输出为“hgfedc”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 80

void fun(char s[],int n)

{

int I, j;

char ch;

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

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

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

if(s[i]<s[j])

{

ch=s[j];

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

___2___;

s[i]=ch;

}

}

main()

{

int i=0,strlen=0;

char str[N];

system("cls");

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

gets(str);

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

{ strlen++; i++; }

fun(str,strlen);

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

puts(str);

}

【答案】

(1)i (2)s[j]=s[i] 

2.程序修改题

在给定程序中,函数fun()的功能是:将长整型数中每一位上为偶数的数依次取出,构成一个新数放在t中。高位仍在高位,低位仍在低位。例如,当s中的数为87653142时,t中的数为8642。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

void fun(long s,long *t)

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

{

int d;

long s1=1;

*t=0;

while(s>0)

{

d=s%10;

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

if(d%2=0)

{ *t=d*s1+*t; s1*=10; }

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

s\=10;

}

}

main()

{

long s,t;

system("cls");

printf("\nPlease enter s: ");

scanf("%ld",&s);

fun(s,&t);

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

}

【答案】

(1)将 int d;改为:long d;

(2)将 if(d%2=0)改为:if(d%2==0)

(3)将 s\=10;改为:s/=10; 

3.程序设计题

请编写函数fun,它的功能是:求Fibonacci数列中大于a(a>3)的最小的一个数,结果由函数返回。其中Fibonacci数列F(n)的定义为:

F(0)=0,F(1)=1

F(n)=F(m-1)+F(m-2)

例如,当a=500时,函数值为610。

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

#include <conio.h>

#include <math.h>

#include <stdio.h>

int fun(int a)

{

 

}

main()

{

int m;

FILE *out;

m=500;

printf("m=%d,F=%d\n",m,fun(m));

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

for(m=500;m<3000;m+=500)

fprintf(out,"%d\n",fun(m));

fclose (out);

}

【答案】

int x=1,y=1,z=0,i;

for(i=4;i<=a;i++)

{

if(z<a)

{

z=x+y;

x=y;

y=z;

}

else

break;

}

return z;

1.程序填空题

请补充main函数,该函数的功能是:如果数组aa的前一个元素比后一个元素小,则把它保存在数组bb中并输出。

例如:输入“40,51,62,33,35,52,48,95,66,73”,则结果输出“40,51,33,35,48,66”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

main()

{

int I,n=0;

int aa[N]={40,51,62,33,35,52,48,95,66,73};

int bb[N];

system("cls");

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

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

if(aa[i]<aa[i+1])

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

___2___;

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

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

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

printf("bb[%d]=%2d ", ___3___);

}

}

【答案】

(1)N-1 (2)bb[n++]=aa[i] (3)i,bb[i]

2.程序修改题

给定程序中,函数fun()的功能是:删除字符串s中所有空白字符(包括Tab字符、回车符及换行符)。输入字符串时用'#'结束输入。

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

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

#include <string.h>

#include <stdio.h>

#include <ctype.h>

fun(char *p)

{

int I,t;

char c[80];

for(I=0,t=0;p[I];I++)

if(!isspace(*(p+I))) c[t++]=p[I];

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

c[t]='\0';

strcpy(p,c);

}

main()

{

char c,s[80];

int I=0;

printf("Input a string: ");

c=getchar();

while(c!='#')

{

s[I]=c;I++;c=getchar();

}

s[I]='\0';

fun(s);

puts(s);

 

}

【答案】

将c[t]= "\0"; 改为:c[t]= '\0';

3.程序设计题

请编写函数fun(),该函数的功能是计算并输出:

S=1+(1+20.5)+(1+20.5+30.5)+…+(1+20.5+30.5+…+N0.5)

例如,若主函数从键盘给n输入20后,则输出为s=534.188884。

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

#include <math.h>

#include <stdio.h>

double fun(int n)

{

 

}

main()

{

int n;

double s;

printf("\nInput n: ");

scanf("%d",&n);

s=fun(n);

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

}

【答案】

double fun(int n)

{

int i;

double s=0.0,s1=0.0;

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

{

s1=s1+pow(i,0.5);

s=s+s1;

}

return s;

}

1.程序填空题

请补充main函数,该函数的功能是:从键盘输入一个长整数,如果这个数是负数,则取它的绝对值,并显示出来。例如,输入:-333,结果为:333。

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

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

#include <stdio.h>

#include <conio.h>

main()

{

long int a;

printf("Enter the data:\n");

scanf(___1___);

printf("The origial data is %ld\n",a);

if(a<0)

___2___;

printf("\n");

printf(___3___);

}

【答案】

(1)将k=n; 改为:k=i;

(2)将s[j]=i; 改为:s[j++]=i; 

2.程序修改题

在给定程序中,函数fun的功能是找出100~n(不大于1000)之间百位数字加十位数字等于个位数字的所有整数,把这些整数放在s所指的数组中,其个数作为函数值返回。

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

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

#include <stdio.h>

#define N 100

int fun(int *s,int n)

{

int I,j,k,a,b,c;

j=0;

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

{

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

k=n;

a=k%10;

k/=10;

b=k%10;

c=k/10;

if(a==b+c)

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

 

s[j]=I;

}

return j;

}

 

main()

{

int a[N],n,num=0,I;

do

{

printf("\nEnter n(<=1000):");

scanf("%d",&n);

}

while(n>1000);

num= fun(a,n);

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

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

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

printf("\n\n");

}

【答案】

(1)将k=n; 改为:k=i;

(2)将s[j]=i; 改为:s[j++]=i; 

3.程序设计题

假定输入的字符串中只包含字母和*号。请编写函数fun(),它的功能是:使字符串中前部的*号不得多余n个;若多余n个,则删除多余的*号;若少于或等于n个,则什么也不做,字符串中间和尾部的*号不删除。

例如,字符串中的内容为****A*BC*DEF*G** *****,若n的值为2,删除后,字符串中的内容则应当是**A*BC*DEF*G*******;若n的值为4,则字符串中的内容仍为****A*BC*DEF*G*******。N的值在主函数中输入。在编写函数时,不得使用C语言提供的字符串函数。

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

#include <stdio.h>

#include <conio.h>

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

【答案】

void fun(char *a,int n)

{

int i=0, k=0;

char *p, *t;

p=t=a;

while(*t=='*')

{ k++; t++; }

if(k>n)

{

while(*p)

{ a[i]=*(p+k-n); i++; p++; }

a[i]='\0';

}

}


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

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