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

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

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

1.程序填空题

请补充函数fun,该函数的功能是建立一个带头结点的单向链表并输出到文件file.dat和屏幕上,各结点的值为对应的下标,链表的结点数及输出的文件名作为参数传入。

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

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

#include<stdio.h>

#include<stdlib.h>

typedef struct s

{

int data;

struct s *next;

}NODE;

void fun(int n,char *filename)

{

NODE *h,*p,*s ;

FILE *f;

int I;

h=p=(NODE *)malloc(sizeof(NODE));

h->data=0;

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

{

s=(NODE *)malloc(sizeof(NODE));

s->___1___;

___2___;

p=___3___;

}

p->next=NULL;

if((f=fopen(filename,"w"))==NULL)

{

printf("Can not open file.dat!");

exit(0);

}

p=h;

fprintf(f,"THE LIST\n");

printf("THE LIST\n");

while(p)

{

fprintf(f,"%3d",p->data);

printf("%3d",p->data);

if(p->next!=NULL)

{

fprintf(f,"->");

printf("->");

}

p=p->next;

}

fprintf(f,"\n");

printf("\n");

fclose(f);

p=h;

while(p)

{

s=p;

p=p->next;

free(s);

}

}

main()

{

char *filename="file.dat";

int n;

printf("\nPlease input n:");

scanf("%d",&n);

fun(n,filename);

}

【答案】

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

{

*c=a/10*1000+a%10*10+b/10*100+b%10;

2.程序修改题

下面程序中函数fun的功能是:将长整数s中每个十进制位上为奇数的数取出,形成一个新数在t中,t中数字顺序按原整数中数字的逆序排列。

例如,当s=87653142时,t=1357。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

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

void fun(long s,long t)

{

int d;

*t=0;

while(s>0)

{

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

d=s/10;

if(d%2==1)

*t=*t*10+d;

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)将void fun(long s, long t) 改为:

void fun(long s, long *t)

(2)将d = s/10; 改为:d = s%10; 

3.程序设计题

给定程序中,函数fun的功能是:将两个两位数的正整数a、b合并形成一个整数放在c中。合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上,b数的十位和个位数依次放在c数的百位和个位上。

例如,当a=45,b=12。调用该函数后,c=4152。

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

#include <stdio.h>

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

}

【答案】

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

{

*c=a/10*1000+a%10*10+b/10*100+b%10;

}

1.程序填空题

给定程序中,函数fun的功能是计算下式:

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

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

#include <stdio.h>

double fun(double e)

{

int I; double s,x;

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

s=0; i=___1___;

x=1.0;

while(x>e)

{

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

___2___;

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

x=(2*i-1)*(2*i+1)/(___3___*(2*i));

s=s+x;

}

return s;

}

main()

{

double e=1e-6;

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

【答案】

(1)0

(2)i++

(3)(2.0*i)或(float)(2*i)或 (double)(2*i)

2.程序修改题

给定程序中,函数fun的功能是:判断ch中的字符是否与str所指串中的某个字符相同;若相同,什么也不做,若不同,则将其插在串的最后。

请改正程序中的错误,使其能进行正确的操作。

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

#include <stdio.h>

#include <string.h>

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

void fun(char str,char ch)

{

while(*str&&*str!=ch) str++;

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

if(*str==ch)

{

str[0]=ch;

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

str[1]='0';

}

}

main()

{

char s[81],c ;

printf("Please enter a string:\n");

gets(s);

printf("Please enter the character to

search: ");

c=getchar();

fun(s,c);

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

}

【答案】

(1)将void fun(char str,char ch) 改为:

void fun(char *str,char ch )

(2)将if(*str==ch) 改为:if(*str!=ch)

(3)将str[1]='0'; 改为:str[1]='\0'; 

3.程序设计题

下列程序定义了N×N的二维数组,并在主函数中赋值。请编写函数fun,函数的功能是:求出数组周边元素的平均值并作为函数值返回给主函数中的变量r。

例如,若c数组中的值为:

则返回主程序后r的值应为4.625000。

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

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 3

double fun(int b[][N])

{

 

}

main()

{

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

int I,j;

FILE *out;

double r;

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

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

{

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

{

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

}

printf("\n");

}

r=fun?;

printf("THE RESULT\n");

printf("The r is %lf\n",r);

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

fprintf(out,"%lf",r);

fclose(out);

}

【答案】

int i,j,k=0;

double r=0.0;

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

{

r+=b[0][j];

k++;

}

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

{

r+=b[N-1][j];

k++;

}

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

{

r+=b[i][0];

k++;

}

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

{

r+=b[i][N-1];

k++;

}

return r/=k;

1.程序填空题

给定程序中,函数fun的功能是:计算x所指数组中N个数的平均值(规定所有数均为正数),平均值通过形参返回主函数,将小于平均值且最接近平均值的数作为函数值返回,在主函数中输出。

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

主函数中输出:m=30.0

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

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

#include <stdlib.h>

#define N 10

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

{

int I,j;

double d,s=0;

for(i=0;i<N;i++) s=s+x[i];

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

___1___=s/N;

d=32767;

for(i=0;i<N; 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; i<N; i++)

{ x[i]=rand()%50;

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

printf("\n");

m=fun(x,&av);

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

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

printf("\n");

}

【答案】

(1)*av (2)i (3)x[j] 或(x[j])

2.程序修改题

给定程序中,fun函数的功能是:求s = aa…aa - … - aaa - aa – a(此处aa…aa表示n个a,a和n的值在1至9之间)。

例如a=3,n=6,则以上表达式为:

s=333333 - 33333 - 3333 - 333 - 33 – 3

其值是:296298

a和n是fun函数的形参,表达式的值作为函数值传回main函数。

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

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

#include <stdio.h>

long fun(int a,int n)

{

int j;

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

long s=0,t=1;

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

t=t*10+a;

s=t;

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

{

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

t=t%10;

s=s-t;

}

return(s);

}

main()

{

int a,n;

printf("\nPlease enter a and n:");

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

printf("The value of function is:%ld\n",

fun(a,n));

}

【答案】

(1)将long s=0,t=1; 改为:long s=0,t=0;

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

3.程序设计题

请编写一个函数void fun(char *tt, int pp[]),统计在tt所指字符串中'a'到'z' 26个小写字母各自出现的次数,并依次放在pp所指数组中。

例如,当输入字符串:abcdefgabcdeabc 后,程序的输出结果应该是:

3 3 3 2 2 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

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

#include <stdio.h>

#include <string.h>

void fun(char *tt,int pp[])

{

 

}

main()

{

char aa[1000];

int bb[26],k,n;

printf("Please enter a char string:");

scanf("%s", aa);

fun(aa,bb);

for(k=0;k<26;k++) printf("%d",bb[k]);

printf("\n");

}

【答案】

void fun(char *tt,int pp[])

{

int n;

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

pp[n]=0;

while(*tt!='\0')

{

if(*tt>='a' && *tt <='z')

pp[*tt-'a']++;

tt++;

}

}

1.程序填空题

给定程序中,函数fun的功能是:调用随机函数产生20个互不相同的整数放在形参a所指数组中(此数组在主函数中已置0)。

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

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

#include <stdlib.h>

#define N 20

void fun(int *a)

{

int I,x,n=0;

x=rand()%20;

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

while (n<___1___)

{

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

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

if(x==a[i])___2___;

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

if(i==___3___){a[n]=x; n++;}

x=rand()%20;

}

}

main()

{

int x[N]={0},I;

fun(x);

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

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

{

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

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

}

printf("\n\n");

}

【答案】

(1)20 或 N (2)break (3)n

2.程序修改题

用二分法求方程2x3-4x2+3x-6 =0在区间[m,n]上的根。例如,若给m输入-100,给n输入90,则函数求得的一个根值为2.000。

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

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

#include <stdio.h>

#include <math.h>

double funx(double x)

{return(2*x*x*x-4*x*x+3*x-6);}

double fun(double m,double n)

{

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

int r;

r=(m+n)/2;

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

while(fabs(n-m)<0.001)

{

if(funx?*funx(n)<0) m=r;

else n=r;

r=(m+n)/2;

}

return r;

}

main()

{

double m,n,root;

printf("Enter m n : \n");

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

root=fun(m,n);

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

}

【答案】

(1)把int r; 改为:double r;

(2)将while(fabs(n-m)<0.001) 改为:

while(fabs(n-m)>0.001)

3.程序设计题

假定输入的字符串中只包含字母和*号。请编写函数fun,它的功能是:除了字符串前导和尾部的*号之外,将串中其他*号全部删除。形参h已指向字符串中第一个字母,形参p已指向字符串中最后一个字母。在编写函数时,不得使用C语言提供的字符串函数。

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

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

#include <stdio.h>

void fun(char *a,char *h,char *p)

{

 

}

main()

{

char s[81],*t,*f;

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

gets(s);

t=f=s;

while(*t)t++;

t--;

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

while(*f=='*')f++;

fun(s,f,t);

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

puts(s);

}

【答案】

void fun( char *a,char *h,char *p )

{

char *q=h;

int n=0;

while(q<=p)

{ if(*q!='*') h[n++]=*q; q++; }

while(*q)

{ h[n++]=*q; q++; }

h[n]='\0';

}

1.程序填空题

给定程序中,函数fun的功能是:将a所指3×5矩阵中第k列的元素左移到第0列,第k列以后的每列元素依次左移,原来左边的各列依次绕到右边。

例如,有下列矩阵:

1 2 3 4 5

1 2 3 4 5

1 2 3 4 5

若k为2,程序执行结果为

3 4 5 1 2

3 4 5 1 2

3 4 5 1 2

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

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

#include <stdio.h>

#define M 3

#define N 5

void fun(int (*a)[N],int k)

{

int I,j,p,temp;

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

for(p=1;p<=___1___;p++)

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

{

temp=a[i][0];

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

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

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

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

a[i][N-1]=___3___;

}

}

main()

{

int x[M][N]={{1,2,3,4,5},{1,2,3,4,5},{1,2,3,4,5}},I,j;

printf("The array before moving:\n");

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

{

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

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

printf("\n");

}

fun(x,2);

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

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

{

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

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

printf("\n");

}

}

【答案】

(1)k (2)N-1 (3)temp

2.程序修改题

给定程序中,函数fun的功能是:求整数x的y次方的低3位值。

例如,整数5的6次方为15625,此值的低3位值为625。

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

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

#include <stdio.h>

long fun(int x,int y,long *p)

{

int I;

long t=1;

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

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

t=t*x;

*p=t;

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

t=t/1000;

return t;

}

main()

{

long t,r;

int x,y;

printf("\nInput x and y: ");

scanf("%ld%ld",&x,&y);

t=fun(x,y,&r);

printf("x=%d,y=%d,r=%ld,last=%ld\n",

x,y,r,t);

3.程序设计题

请编写函数fun,其功能是:计算并输出当x<0.97时如下多项式的值,直到|Sn - Sn-1|<0.000001为止:

例如,在主函数中从键盘给x输入0.21后,输出为:s= 1.100000。

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

#include <stdio.h>

#include <math.h>

double fun(double x)

{

 

}

main()

{

double x,s;

printf("Input x: ");

scanf("%lf",&x);

s=fun(x);

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

}

【答案】

double fun(double x)

{

int n=1;

double s0,s1=1.0,t=1.0;

do

{

s0=s1;

t=t*(0.5-n+1)*x/n;

s1=s0+t;

n++;

}while(fabs(s1-s0)>=0.000001);

return s1;

}

1.程序填空题

给定程序中,函数fun的功能是:将形参s所指字符串中的数字字符转换成对应的数值,计算出这些数值的累加和作为函数值返回。

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

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

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

#include <stdio.h>

#include <string.h>

#include <ctype.h>

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

}

【答案】

(1)'0' 或 48 (2)s++ (3)sum 或(sum)

2.程序修改题

下列给定程序中,计算如下公式的值:

函数fun的功能是:根据整型形参m的值,计算上面公式。

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

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

#include <conio.h>

#include <stdio.h>

double fun(int m)

{

double c=1.0;

int k;

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

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

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

c-=1/(k*k);

return?;

}

main()

{

int para=10;

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

}

【答案】

(1)将for(k=2;k<m;k++)改为:

for(k=2;k<=m;k++)或for(k=2;k<m+1;k++)

(2)将c-=1/(k*k);改为:c-=1.0/(k*k); 

3.程序设计题

请编写函数fun,它的功能是:将一个数字字符串转换为一个整数(不得调用C语言提供的将字符串转换为整数的函数)。

例如,若输入字符串"-1234",则函数把它转换为整数值-1234。

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

#include <stdio.h>

#include <string.h>

long fun(char *p)

{

 

}

main()

{

char s[6];

long n;

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

gets(s);

n=fun(s);

printf("%ld\n",n);

}

【答案】

long fun(char *p)

{

long t=0;

int flag=1;

if(*p=='-')

{ flag=-1; p++; }

while(*p)

{ t=t*10+(*p-'0'); p++; }

return flag*t;

}

1.程序填空题

人员的记录由编号和出生年、月、日组成,N名人员的数据已在主函数中存入结构体数组student中,且编号唯一。函数fun的功能是:找出指定编号人员的数据,作为函数值返回,由主函数输出,若指定编号不存在,返回数据中的编号为空串。

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

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

#include <stdio.h>

#include <string.h>

#define N 8

typedef struct

{

char num[10];

int year,month,day;

}STUDENT;

___1___fun(STUDENT *student,char *num)

{

int I;

STUDENT a={"000003",1979,9,1};

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

if(strcmp(___2___,num)==0)

return (___3___);

return a;

}

main()

{

STUDENT student[N]=

{

{"000001",1978,2,15},{"000002",1981,9,21},{"000003",1979,9,1},{"000004",1982,7,15},{"000005",1980,9,28},{"000006",1983,11,15},{"000007",1983,6,22},{"000008",1984,8,19}

};

STUDENT s;

char n[10]="666666";

s=fun(student,n);

if(s.num[0]==0)

{

printf("\nNot found!\n");

}

else

{

printf("\nSucceed!\n ");

printf("%s %d-%d-%d\n",s.num,s.year,s.month,s.day);

}

}

【答案】

(1)STUDENT (2)student[i].num (3)student[i]

2.程序修改题

下列给定程序中,函数fun的功能是:将s所指字符串中最后一次出现的s1所指子串替换成s2所指子串,所形成的新串放在str所指的数据中。在此处,要求s1和s2所指字符串的长度相同。

例如,当s所指字符串中的内容为abcdabfabc,s1所指子串中的内容为ab,s2所指子串中的内容为99时,则在str所指的数组中的内容为abcdabf99c。

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

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

#include <conio.h>

#include <stdio.h>

#include <string.h>

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

void fun(char*s,s1,s2,str)

{

char *p,*r,*a;

strcpy(str,s);

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

while(str)

{

p=str;

r=s1;

while(*r)

if(*r==*p)

{

r++;

p++;

}

else

{

break;

}

if(*r=='\0')

a=str;

str++;

}

r=s2;

while(*r)

{

*a=*r;

a++;

r++;

}

}

main()

{

char s[100],s1[100],s2[100],str[100];

printf("\nPlease enter string S:");

scanf("%s",s);

printf("\nPlease enter substring s1:");

scanf("%s",s1);

printf("\nPlease enter substring s2:");

scanf("%s",s2);

if(strlen(s1)==strlen(s2))

{

fun(s,s1,s2,str);

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

}

else

{

printf("\nError : strlen(s1)!=strlen(s2)\n");

}

}

【答案】

(1)将void fun(char*s,s1,s2,str)改为:void fun(char *s,char *s1,char *s2,char *str)

(2)将while(str)改为:while(*str)

3.程序设计题

函数fun的功能是:将s所指字符串中下标为偶数同时ASCII值为奇数的字符删除,s所指串中剩余的字符形成的新串放在t所指的数组中。

例如,若s所指字符串中的内容为“ABCDEFG 12345”,其中字符C的ASCII码值为奇数,在数组中的下标为偶数,因此必须删除;而字符1的ASCII码值为奇数,在数组中的下标也为奇数,因此不应当删除,其他依此类推。最后t所指的数组中的内容应是“BDF12345”。

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

#include <stdio.h>

#include <string.h>

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

{

 

}

main()

{

char s[100],t[100];

printf("\nPlease enter string S:");

scanf("%s",s);

fun(s,t);

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

}

【答案】

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

{

int k,n=0;

for(k=0; k<strlen(s); k++)

if(k%2!=0||s[k]%2!=1)

t[n++]=s[k];

t[n]='\0';

}


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

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