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

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

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

1.程序填空题

请补充main函数,该函数的功能是:输出一个3×3的矩阵,要求必须使用行指针表示输出变量。

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

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

#include <stdio.h>

main()

{

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

int (*p)[3],j,I;

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

p=___1___;

system("cls");

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

{

printf("\n\n");

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

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

printf("%4d",___2___);

}

}

【答案】

(1)array (2)*(*(p+i)+j) 

2.程序修改题

下列给定程序中,函数fun()的功能是:首先把b所指字符串中的字符按逆序存放,然后将a所指字符串中的字符和b所指字符串中的字符,按排列的顺序交叉合并到c所指数组中,过长的剩余字符接在c所指数组的尾部。

例如,当a所指字符串中的内容为abcdefg,b所指字符串中的内容为1234时,c所指数组中的内容应该为a4b3c2d1efg;而当a所指字符串中的内容为1234,b所指字符串中的内容为abcdefg时,c所指数组中的内容应该为1g2f3e4dcba。

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

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

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <windows.h>

void fun(char *a,char *b,char *c)

{

int I,j; char ch;

i=0; j=strlen(b)-1;

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

while(i>j)

{

ch=b[i];b[i]=b[j];b[j]=ch;

i++;j--;

}

while(*a||*b)

{

if(*a){*c=*a; c++; a++;}

if(*b){*c=*b; c++; b++;}

}

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

*c=o;

}

main()

{

char s1[100],s2[100],t[200];

system("cls");

printf("Enter s1 string: ");

scanf("%s",s1);

printf("Enter s2 string: ");

scanf("%s",s2);

fun(s1,s2,t);

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

}

【答案】

(1)将while(i>j) 改为:while(i<j)

(2)将*c=o; 改为:*c='\0'; 

3.程序设计题

请编写函数fun(),该函数的功能是:实现B=A+A′,即把矩阵A加上A的转置,存放在矩阵B中。计算结果在main()函数中输出。

例如,输入下面矩阵:

1 2 3

4 5 6

7 8 9

其转置矩阵为:

1 4 7

2 5 8

3 6 9

则程序输出:

2 6 10

6 10 14

10 14 18

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

#include <stdio.h>

#include <conio.h>

#include <windows.h>

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;

system("cls");

fun(a,t);

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

{

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

printf("%7d",t[i][j]);

printf("\n");

}

【答案】

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

{

int i,j;

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

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

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

}

1.程序填空题

请补充main函数,该函数的功能是:把字符串str1中的非空格字符拷贝到字符串str2中。

例如,若str1=“glad to see you!”,则str2=“gladto seeyou!”。

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

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

#include <stdio.h>

#include <windows.h>

#define N 80

main()

{

static char str1[N]="glad to see you!";

char str2[N];

int i=0,j=0;

system("cls");

printf("\n***** str1*****\n ");

puts(str1);

while(str1[i])

{

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

if(___1___)

str2[j++]=str1[i];

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

___2___;

}

printf("\n***** str2 *****\n ");

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

printf("%c",str2[i]);

}

【答案】

(1)str1[i]!=' ' (2)i++ 

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

{

ch=aa[i];

j=i-1;

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

while((j>=0)||(ch>aa[j]))

{

aa[j+1]=aa[j];

j--;

}

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

aa[j]=ch;

}

}

main()

{

char a[N]="JRTYDFKLIOPQWEGHMNBVCUASXZ";

int I;

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

insert(a);

printf("The string after sorting: %s\n",

a);

}

【答案】

(1)将while((j>=0)||(ch>aa[j])) 改为:

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

(2)将aa[j]=ch; 改为:aa[j+1]=ch; 

3.程序设计题

请编写一个函数void fun(char orig[],char result[],int flg),其功能是:删除一个字符串中指定下标的字符。其中,orig指向原字符串,删除后的字符串存放在result所指的数组中,flg中存放指定的下标。

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

#include <stdio.h>

#include <conio.h>

#define NUM 100

void fun(char orig[],char result[],int flg)

{

 

}

main()

{

char s1[NUM],s2[NUM];

int flg;

FILE *out;

printf("Please Input s1:\n");

gets(s1);

printf("Input want to deleted:");

scanf("%d",&flg);

fun(s1,s2,flg);

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

fun("test String",s2,9);

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

fprintf(out,"%s",s2);

fclose(out);

}

【答案】

int n,m=0;

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

if(n!=flg)

{

result[m]=orig[n];

m++;

}

result[m]='\0';

1.程序填空题

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

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

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

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

if(___1___)

bb[i][j]=1;

else

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

___2___;

}

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)i==0||i==n-1||j==0||j==n-1

或 i==0||j==0||i==n-1||j==n-1

或 j==0||i==0||j==n-1||i==n-1

(2)bb[i][j]=0

2.程序修改题

给定程序中,函数fun()的功能是:找出一个大于给定整数m且紧随m的素数,并作为函数值返回。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

int fun(int m)

{

int I,k;

for(I=m+1; ;I++)

{ for(k=2;k<I;k++)

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

if(I%k!=0)

break;

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

if(k<I)

return(I);

}

}

main()

{

int n;

system("cls");

printf("Please enter n: ");

scanf("%d",&n);

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

}

【答案】

(1)将if(i%k!=0) 改为:if(i%k==0)

(2)将if(k<i) 改为:if(k>=i) 

3.程序设计题

已知学生的记录由学号和学习成绩构成,N名学生的数据已存入a结构体数组中。请编写函数fun(),该函数的功能是:找出成绩最高的学生记录,通过形参返回主函数(规定只有一个最高分)。

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

#include <stdio.h>

#include <string.h>

#include <conio.h>

#include <windows.h>

#define N 10

typedef struct ss /*定义结构体*/

{ char num[10];

int s;

}STU;

fun(STU a[],STU *s)

{

 

}

main()

{ STU a[N]={{"A01",81},{"A02",89},

{"A03",66},{"A04",87},{"A05",77},

{"A06",90},{"A07",79},{"A08",61},

{"A09",80},{ "A10",71}},m;

int I;

system("cls");

printf("*****The original data*****");

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

printf("No=%sMark=%d\n",a[i].num,

a[i].s);

fun(a,&m);

printf("***THE RESULT***\n");

printf("The top :%s, %d\n",m.num,m.s);

}

【答案】

fun(STU a[],STU *s)

{

int i;

*s=a[0];

for(i=0;i<N;i++)/*找出成绩最高的学生记录*/

if(s->s<a[i].s)

*s=a[i];

}

1.程序填空题

请补充main函数,该函数的功能是:把一个整数插入到一个已经按从小到大排序的数组中。插入后,数组仍然有序。

例如,在数组bb[N]={12,23,31,44,51,63,71,79,85,95}中插入93,结果为bb[N]={11,21,31,41,51,61,71,79,81,93,95}

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

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

#include <stdio.h>

#include <windows.h>

#define N 10

main()

{

int I,j;

int n;

int bb[N+1]={12,23,31,44,51,63,71,79,85,95};

system("cls");

printf("Input n \n");

scanf("%d",&n);

printf("\nn=%d ",n);

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

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

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

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

{

if(n<=bb[i])

{

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

for(j=N;___1___;j--)

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

___2___;

bb[j]=n;

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

___3___;

}

}

if(i==N)

bb[i]=n;

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

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

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

}

【答案】

(1)j>i (2)bb[j]=bb[j-1] (3)break

2.程序修改题

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

y=1/(100×100)+1/(200×200)+1/(300×300)+…

+1/(m×m)

例如,若m=2000,则应输出0.000160。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

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

fun(int m)

{ double y=0,d;

int I;

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

for(I=100,I<=m,I+=100)

{

d=(double)I*(double)I;

y+=1.0/d;

}

return(y);

}

main()

{

int n=2000;

system("cls");

printf("The result is %1f\n",fun(n));

}

【答案】

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

(2)将for(i=100,i<=m,i+=100) 改为:

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

3.程序设计题

请编写函数fun(),其功能是:将所有大于1小于整数m的非素数存入xx所指数组中,非素数的个数通过k传回。

例如,输入17,则应输出4 6 8 9 10 12 14 15 16。

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

void fun(int m,int *k,int xx[])

{

 

}

main()

{

int m,n,zz[100];

system("cls");

printf("Please enter an integer number

between 10 and 100: ");

scanf("%d",&n);

fun(n,&m,zz);

printf("There are %d non-prime numbers

less than %d: ",m,n);

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

printf("\n %4d",zz[n]);

}

【答案】

void fun(int m,int *k,int xx[])

{

int i,j,n=0;

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

{

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

if(i%j==0) break;

if(j<i) xx[n++]=i;

}

*k=n;

}

1.程序填空题

请补充main函数,该函数的功能是:把一个二维字符数组每行字符串最大的字符拷贝到字符数组s中。

例如,如果str[3]={"efjh","efknls","owys"},则s="jsy"。

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

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

#include <stdio.h>

#include <windows.h>

main()

{

int i=0;

char *str[3]={"efjh","efknls","owys"};

char **p;

char s[8];

system("cls");

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

___1___;

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

{

s[i]=*p[i];

while(*p[i])

{

if(s[i]<*p[i])

s[i]=*p[i];

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

___2___;

}

}

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

___3___;

printf(" new string \n");

puts(s);

}

【答案】

(1)p=str (2)p[i]++ (3)s[i]='\0'

2.程序修改题

下列给定程序中,函数fun()的功能是:将字符串p中所有字符复制到字符串b中,要求每复制3个字符之后插入一个空格。例如,在调用fun()函数之前给字符串a输入ABCDEFGHIJK,调用函数之后,字符串b中的内容则为ABC DEF GHI JK。

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

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

#include <stdio.h>

void fun(char *p,char *b)

{

int I,k=0;

while(*p)

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

{ i=1;

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

while(i<3||*p)

{

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("The string after insert space:");

puts(b); printf("\n\n ");

}

【答案】

(1)将i=1; 改为:i=0;

(2)将while(i<3||*p) 改为:while(i<3&&*p)

(3)将b[k]= ' '; 改为:b[k++]=' '; 

3.程序设计题

学生的记录由学号和成绩组成,N名学生的数据已在主函数中放入结构体数组s中,请编写函数fun(),它的功能是:按分数的高低排列学生的记录,高分在前。

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

#include <stdio.h>

#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},{"GA001",91},

{"GA007",72},{"GA008",64},{"GA006",87},

{"GA015",85},{"GA013",91},{"GA012",64},

{"GA011",66},{"GA017",64},{"GA018",64},

{"GA016",72}};

int I;

FILE *out;

fun(s);

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

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

{

if((i)%4==0) /*每行输出4个学生记录*/

printf("\n");

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

}

printf("\n");

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

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

{

if((i)%4==0&&i)

fprintf(out,"\n");

fprintf(out,"%4d",s[i].s);

}

fprintf(out,"\n");

fclose(out);

}

【答案】

int fun(STREC a[])

{

int i,j;

STREC t;

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

for(j=0;j<N-1;j++)

if(a[j].s<a[j+1].s)

{ t=a[j]; a[j]=a[j+1]; a[j+1]=t; }

}

1.程序填空题

请补充main函数,该函数的功能是:从键盘输入若干字符放到一个字符数组中,当按回车键时结束输入,最后输出这个字符数组中的所有字符。

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

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

#include <stdio.h>

#include <ctype.h>

#include <windows.h>

main()

{

int i=0;

char s[81];

char *p=s;

system("cls");

printf("Input a string \n");

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

{

s[i]=getchar();

if(s[i]=='\n')

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

___1___;

}

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

s[i]=___2___;

printf("display the string \n");

while(*p)

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

putchar(___3___);

}

【答案】

(1)break (2)′\0′ (3)*p++ 

2.程序修改题

在给定程序中,函数fun()的功能是:输入的两个数中较小的数。

例如:输入5、10,结果为min is 5。

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

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

#include <stdio.h>

#include <conio.h>

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

int fun(int x,y)

{

int z;

z=x<y?x:y;

return(z);

}

main()

{

int a,b,c;

scanf("%d,%d\n",&a,&b);

c=fun(a,b);

printf("min is %d",c);

}

【答案】

将int fun(int x, y) 改为:

int fun(int x,int y)

3.程序设计题

编写函数fun,其功能是统计一个长度为2的字符串在另一个字符串中出现的次数。例如,假定输入的字符串为asdasasdfgasdaszx67asdmklo,子字符串为as,则应当输出6。

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

#include <conio.h>

#include <stdio.h>

#include <string.h>

#include <windows.h>

int fun(char *str,char *substr)

{

 

}

main()

{

char str[81],substr[3];

int n;

system("cls");

printf("输入主字符串: ");

gets(str);

printf("输入子字符串: ");

gets(substr);

puts(str);

puts(substr);

n=fun(str,substr);

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

}

【答案】

int fun(char *str, char *substr)

{

int i,j=0;

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

if(str[i]==substr[0]&&

str[i+1]==substr[1])

j++;

return j;

}

1.程序填空题

请补充main函数,该函数的功能是:从键盘输入两上字符串并分别保存在字符数组str1和str2中,用字符串str2替换字符串str1前面的所有字符。注意str2的长度不大于str1,否则需要重新输入。

例如,如果输入str1=“abced”,str2=“fk”,则输出“fkced”。

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

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

#include <stdio.h>

#include <string.h>

#include <windows.h>

main()

{

char str1[81],str2[81];

char *p1=str1,*p2=str2;

system("cls");

do

{

printf("Input str1 \n");

gets(str1);

printf("Input str2 \n");

gets(str2);

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

}while(___1___ );

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

while(___2___)

*p1++=*p2++;

printf("Display str1 \n");

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

puts(___3___);

}

【答案】

(1)strlen(str1)<strlen(str2) (2)*p2 (3)str1

2.程序修改题

下列给定程序中,函数fun()的功能是:应用递归算法求某数a的平方根。求平方根的迭代公式如下:

 

例如,2的平方根为1.414214。

请改正程序中的错误,使其能得出正

Chapter_5

确的结果。

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

#include <math.h>

#include <stdio.h>

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

fun(double a,double x0)

{

double x1,y;

x1=(x0+a/x0)/2.0;

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

if(fabs(x1-x0)>0.00001)

y=fun(a,x1);

else y=x1;

return y;

}

main()

{

double x;

printf("Enter x: "); scanf("%lf",&x);

printf("The square root of %lf is %1f\n",

x, fun(x,1.0));

}

【答案】

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

double fun(double a,double x0)

(2)将 if(fabs(x1-x0)>0.00001) 改为:

if(fabs(x1-x0)>=0.00001)

3.程序设计题

下列程序定义了N×N的二维数组,并在主函数中自动赋值。请编写函数fun(),功能为:使数字右上半三角元素中的值乘以m。

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

a=1 9

2 7

则返回主程序后a数组的值应为

2 18

2 14

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

#include <conio.h>

#include <stdio.h>

#include <stdlib.h>

#include <windows.h>

#define N 5

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

{

 

}

main()

{

int a[N][N],m, I, j;

system("cls");

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

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

{

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

{

a[i][j]=rand()%20;

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

}

printf("\n");

}

do

m=rand()%10;

while(m>=3); /*产生一个小于3的随机数*/

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

fun(a,m);

printf("THE RESULT\n");

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

{

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

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

printf("\n");

}

}

【答案】

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]=a[i][j]*m;

}


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

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