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

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

2021-02-14 10:06 作者:朝颜晚扶桑  | 我要投稿

1.程序填空题

程序的功能是计算 ,例如,输入参数3,结果为10。

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

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

#include <stdio.h>

long fun(int n)

{

int I;

long f;

f=___1___;

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

f=___2___;

return f;

}

main()

{

long s;

int k,n;

printf("Please input the data:");

scanf("%d",&n);

s=___3___;

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

s=___4___;

printf("the resutl is : %ld\n",s);

}

【答案】

(1)1

(2)f*i

(3)0

(4)s+fun(k) 

2.程序修改题

在给定程序中,函数fun的功能是:先从键盘上输入一个3行3列的矩阵的各个元素的值,然后输出主对角线元素之积。

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

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

#include <stdio.h>

int fun()

{

int a[3][3],mul;

int I,j;

mul=1;

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

{

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

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

scanf("%d",&a[i][j]);

}

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

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

mul=mul*a[i][j];

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

}

main()

{

fun();

}

【答案】

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

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

(2)将mul=mul*a[i][j];改为:

mul=

Chapter_8

mul*a[i][i];

3.程序设计题

请编写函数fun(),其功能是:计算正整数n所有因子(1和n除外)之和作为函数值返回。

例如:n=256时,函数值为254。

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

#include <stdio.h>

int fun(int n)

{

 

}

main()

{

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

}

【答案】

int fun(int n)

{

int s=0,i;

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

if(n%i==0)

s+=i;

return s;

}

1.程序填空题

请补充main函数,该函数的功能是:从键盘输入一组整数,使用条件表达式找出最大的整数。当输入的整数为-1时结束。

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

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

#include <stdio.h>

#include <conio.h>

#define NUM 100

main()

{

int n[NUM];

int i=-1;

int MAX=-1;

printf("\nInsert integer with the '-1' as end: \n");

do

{

i++;

printf("n[%d]=",i);

scanf("%d",___1___);

MAX=___2___n[i] : MAX;

}while(___3___);

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

}

【答案】

(1)&n[i] (2)MAX<n[i]? (3)n[i]!=-1 

2.程序修改题

在给定程序中,函数fun()的功能是:为一个偶数寻找两个素数,这两个素数之和等于该偶数,并将这两个素数通过形参指针传回主函数。

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

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

#include <stdio.h>

#include <math.h>

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

{

int I,j,d,y;

for(i=3;i<=a/2;i=i+2)

{

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

y=1

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

if(i%j==0) y=0;

if(y==1)

{

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

d=a-I;

for(j=2;j<=sqrt((double)d);j++)

if(d%j==0) y=0;

if(y==1) { *b=I; *c=d; }

}

}

}

main()

{

int a,b,c;

do

{ printf("Input a: ");

scanf("%d",&a);

}while(a%2);

fun(a,&b,&c);

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

}

【答案】

(1)将y=1 改为:y=1;

(2)将d=a-I;改为:d=a-i;

3.程序设计题

请编写一个函数fun(char *s),函数的功能是把 s串中的内容逆置。

例如,s串中原有的字符串为:abcdefg,则调用该函数后的内容为:gfedcba。

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

#include <string.h>

#include <stdio.h>

#define N 81

fun(char*s)

{

 

}

main()

{

char a[N];

printf( "Enter a string : " );

gets(a);

printf( "The original string is : " );

puts(a);

fun(a);

printf("\n");

printf( "The string after modified : ");

puts(a);

}

【答案】

fun(char *s)

{

char b[N];

int i=0,j;

memset(b,0,N);

for(j=strlen(s)-1;j>=0;j--)

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

strcpy(s,b);

}

1.程序填空题

请补充fun函数,该函数的功能是求不超过给定自然数的各奇数之和。例如,输入34,则输出结果为289。

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

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

#include <stdio.h>

int fun(int n)

{

int I,sum;

sum=___1___;

for(i=1;___2___;i+=2)

sum+=I;

return sum;

}

main()

{

int a;

do

{

printf("\nPlease enter natural numbers a:");

scanf("%d",&a);

}while(a<=0);

printf("\n不超过给定自然数%d的各奇数之和为%d\n",a,fun(a));

}

【答案】

(1)0 (2)i<=n

2.程序修改题

给定程序中,函数fun的功能是:把m(1≤m≤10)个字符串连接起来,组成一个新串,放入pt中。

例如,把3个串“abc”、“CD”、“EF”串连起来,结果是“abcCDEF”。

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

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

#include <stdio.h>

#include <string.h>

int fun(char str[][10],int m, char *pt)

{

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

int k,i;

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

{

q=strlen(str[k]);

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

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

pt[i]=str[k];

pt+=q;

pt[0]=0;

}

}

main()

{

int n,h;

char s[10][10],p[120];

printf("Please enter n:");

scanf("%d",&n); gets(s[0]);

printf("Please enter %d string:\n", n);

for(h=0;h<n;h++) gets(s[h]);

fun(s, n, p);

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

}

【答案】

(1)将int k,i; 改为:int k,q,i;

(2)将pt[i] = str[k]; 改为:

pt[i] = str[k][i]

3.程序设计题

请编写函数fun,用来求出数组的最小元素在数组中的下标并存放在k所指的存储单元中。

例如,输入如下整数:

234 345 753 134 436 458 100 321 135 760

则输出结果为6,100。

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

int fun(int *s,int t,int *k)

{

 

}

main()

{

int a[10]={234,345,753,134,436,458,

100,321,135,760},k;

system("cls");

fun(a,10,&k);

printf("%d,%d\n",k,a[k]);

}

【答案】

int fun(int *s,int t,int *k)

{

int i; *k=0;

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

if(s[*k]>s[i]) *k=i;

return s[*k];

}

1.程序填空题

在给定程序中,函数fun的功能是计算score中m个人的平均成绩aver,将低于aver的成绩放在below中,通过函数名返回人数。

例如,当score={10,20,30,40,50,60,70,80,90},m=9时,函数返回的人数应该是4,below= {10,20,30,40}。

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

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

#include <stdio.h>

#include <string.h>

int fun(int score[],int m,int below[])

{

int I,j=0;

float aver=0.0;

for(i=0; i<m; i++) aver+=score[i];

aver/=(float)m;

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

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

if(score[i]<aver)___1___;

return j;

}

main()

{

int I,n,below[9];

int score[9]={10,20,30,40,50,60,70,80,90};

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

n=fun(___2___);

printf("Below the average score are: " );

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

printf("%d ",below[i]);

}

【答案】

(1)below[j++]=score[i]

(2)score, 9, below

2.程序修改题

在给定程序中,函数fun的功能是:从键盘上输入的每个单词的第一个字母变为大写字母,输入时各单词必须用空格隔开,用“.”结束输入。

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

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

#include <stdio.h>

int fun(char *c,int status)

{

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

if(*c==' ') return 1;

else

{

if(status&&*c<='z'&&*c>='a')

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

*c+='a'-'A';

return 0;

}

}

main()

{

int flag=1;

char ch;

do

{

ch=getch();

flag=fun(&ch, flag);

putchar(ch);

}while(ch!='.');

}

【答案】

(1)将if(*c=' ') return 1;改为:

if(*c==' ') return 1;

(2)将*c += 'a' - 'A'; 改为:

*c += 'A' - 'a';

3.程序设计题

给定程序的功能是:删除一个字符串中指定的字符。设有如下的字符串:turbo c and borland vc++,从键盘上输入任一个字符,然后从上述字符串中删除所有该字符。

例如,输入字符n,则删除后变为turbo c ad borlad vc++。

如果输入了字符串中不存在的字符,则字符串照原样输出。(区分大小写)删除字符的操作通过一个函数来实现,请编写该函数的代码。

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

#include <stdio.h>

int fun(char s[], int c)

{

 

}

main()

{

static char str[]="turbo c and Borland

c++";

char ch;

printf("Enter a char to be deleted: ");

scanf("%c", &ch);

fun(str, ch);

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

}

【答案】

int fun(char s[],int c)

{

char *p=s;

int i=0;

while(*p)

{

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

p++;

}

s[i]=0;

}

1.程序填空题

给定程序的功能是求出能整除x且不是偶数的各整数,并放在数组pp中,这些除数的个数由n返回。

例如,若x的值为30,则有4个数符合要求,它们是1、3、5、15。

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

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

#include <stdio.h>

void fun(int x,int pp[],int *n)

{

int I,j=0;

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

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

if(___1___ ) pp[j++]= I;

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

___2___;

}

main()

{

int x,aa[1000],n,I;

printf("Enter an integer number:\n");

scanf("%d",&x);

fun(x,aa,&n);

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

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

printf("\n");

}

【答案】

(1)(x%i)==0 (2)*n=j

2.程序修改题

在给定程序中,函数fun的功能是:输入两个双精度数,函数返回他们的平方根的和值。

例如,输入:22.993612和84.57629812

输出:y = 13.991703。

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

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

#include <stdio.h>

#include <math.h>

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

double fun(double *a,double *b);

{

double c;

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

c=sqrt(*a+*b);

return c;

}

main()

{

double a,b,y;

printf("Enter a, b : ");

scanf("%lf%lf",&a,&b);

y=fun(&a,&b);

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

}

【答案】

(1)将double fun (double *a, double *b); 改为:

double fun (double *a, double *b)

(2)将c = sqrt( *a +*b ); 改为:

c = sqrt( *a ) + sqrt( *b );

3.程序设计题

请编写一个函数void fun(int bb[], int *n, int y),其中*n表示bb数组中元素的个数。

函数的功能是:删除bb中所有值为y的元素。Bb数组元素中的值和y的值由主函数通过键盘读入。

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

#include <stdio.h>

#define M 20

void fun(int bb[],int *n,int y)

{

 

}

main()

{

int aa[M],n,y,k;

printf("Please enter n : ");

scanf("%d", &n);

printf("Enter%d positive number :",n);

for(k=0;k<n;k++) scanf("%d",&aa[k]);

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

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

printf("%5d",aa[k]);

printf("Enter a number to deleted: " );

scanf("%d",&y);

fun(aa,&n,y);

printf("The data after deleted %d :",y);

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

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

printf("\n");

}

【答案】

void fun(int bb[],int *n,int y)

{

int i, m=0;

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

{ if(bb[i]!=y) bb[m++]=bb[i]; }

*n=m;

}

1.程序填空题

函数fun的功能是:统计长整数n的各个位上出现数字1、2、3的次数,并通过外部(全局)变量c1、c2、c3返回主函数。例如:当n=123114350时,结果应该为:c1=3 c2=1 c3=2。

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

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

#include <stdio.h>

int c1,c2,c3;

void fun(long n)

{

c1=c2=c3=0;

while(n)

{

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

___1___(n%10)

{

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

case 1: c1++; ___2___;

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

case 2: c2++;___3___;

case 3: c3++;

}

n/=10;

}

}

main()

{

long n=123114350L;

fun(n);

printf("The result :\n");

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

}

【答案】

(1)switch (2)break; (3)break;

2.程序修改题

下列给定程序中,函数fun的功能是:把主函数中输入的3个数,最大的放在x中,最小的放在z中。

例如,输入的数为:1 2 3,输出结果应当是:x=3.0,y=2.0,z=1.0。

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

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

#include <stdio.h>

void fun(float *p,float *q,float *s)

{

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

float *a;

if(*p<*q)

{

a=*p;

*p=*q;

*q=a;

}

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

if(*s<*p)

{

a=*s;

*s=*p;

*p=a;

}

if(*q<*s)

{

a=*q;

*q=*s;

*s=a;

}

}

main()

{

float x,y,z;

printf("Input x y z:");

scanf("%f%f%f",&x,&y,&z);

printf("x=%4.1f,y=%4.1f,z=%4.1f\n\n",x,y,z);

fun(&x,&y,&z);

printf("x=%4.1f,y=%4.1f,z=%4.1f\n\n",x,y,z);

}

【答案】

(1)将float *a;改为:float a;

(2)将if(*s<*p)改为:if(*s>*p)

3.程序设计题

请编写函数fun,其功能是:计算并输出给定数组(长度为5)中每相邻两个元素的平均值的平方根之和。

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

#include <stdio.h>

#include <math.h>

double fun(double a[5])

{

 

}

main()

{

double f,c[5]={4.0,22.0,35.0,46.0,18.0};

int I;

FILE *out;

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

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

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

printf("\n\n");

f=fun?;

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

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

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

fclose(out);

}

【答案】

double sum=0.0;

int i,j=1;

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

if(j<=4)

{

sum+=sqrt((a[i]+a[i+1])/2.0);

j++;

}

return sum;

1.程序填空题

给定程序的功能是把s串中所有的字符前移一个位置,串中的第一个字符移到最后。

例如:s串中原有的字符串为:Mn.123xyZ,则调用该函数后,s串中的内容为:n.123xyZM。

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

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

#include <stdio.h>

#define N 81

fun(char *s)

{

char b[N];

fprintf(b,"%s%c",s+1,*s);

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

___1___;

}

main()

{

char a[N];

printf( "Enter a string : " );

gets(a);

printf("The original string is : " );

puts(a);

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

___2___;

printf("The string after modified : ");

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

___3___;

}

【答案】

(1) s[0] (2)fun(a); (3)puts(a) 

2.程序修改题

给定程序中,函数Creatlink的功能是创建带头结点的单向链表,并为各结点数据域赋0~m-1的值。

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

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

#include <stdio.h>

#include <stdlib.h>

typedef struct aa

{ int data;

struct aa *next;

}NODE;

NODE*Creatlink(int n,int m)

{

NODE *h=NULL,*p,*s;

int I;

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

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

h=p;

p->next=NULL;

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

{

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

s->data=rand()%m;

s->next=p->next;

p->next=s;

p=p->next;

}

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

return p;

}

outlink(NODE *h)

{

NODE *p;

p=h->next;

printf("THE LIST :\n HEAD ");

while(p)

{

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

p=p->next;

}

printf("\n");

}

main()

{

NODE *head;

head=Creatlink(8,22);

outlink(head);

}

【答案】

(1)将p=(NODE)malloc(sizeof(NODE)); 改为:

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

(2)将return p; 改为:return h;

3.程序设计题

请编写函数fun(),它的功能是,根据下列式子计算s,计算结果作为函数值返回;n通过形参传入:

例如:若n的值为15时,函数的值为:1.875000

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

#include <stdio.h>

float fun(int n)

{

 

}

main()

{

int n;

float s;

printf("\n读入一个正整数N:");

scanf("%d",&n);

s=fun(n);

printf("计算结果是: %f\n",s);

}

【答案】

float fun(int n)

{

int i,j,t; float s=0;

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

{

t=0;

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

s=s+1.0/t;

}

return s;

}

1.程序填空题

给定程序中,函数fun的功能是:有N×N矩阵,以主对角线为对称线,对称元素相加并将结果存放在下三角元素中,右上三角元素置为0。

例如,若N=4,有下列矩阵:

21 12 13 24

25 16 47 38

29 11 32 54

42 21 33 10

计算结果为:

21 0 0 0

37 16 0 0

42 58 32 0

66 59 87 10

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

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

#include <stdio.h>

#define N 4

void fun(int (*a)___1___)

{

int I,j;

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

{

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

{

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

___3___=0;

}

}

}

main()

{

int I,j,a[][N]={21,12,13,24,25,16,47,38,29,11,32,54,42,21,33,10};

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

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

{

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

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

printf("\n");

}

fun(a);

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

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

{

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

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

printf("\n");

}

}

【答案】

(1)[N] (2)a[i][j] (3)a[j][i]

2.程序修改题

在给定程序中,函数fun的功能是:将s所指字符串中位于奇数位置的字符或ASCII码为偶数的字符放入t所指数组中(规定第一个字符放在第0位中)。

例如,字符串中的数据为:AABBCCDDEEFF,则输出应当是:ABBCDDEFF。

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

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

#include <stdio.h>

#include <string.h>

#define N 80

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

{

int I,j=0;

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

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

if(i%2 && s[i]%2==0)

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

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

t[j]=0

}

main()

{

char s[N],t[N];

printf("Please enter string s : ");

gets(s);

fun(s,t);

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

}

【答案】

(1)将if(i%2 && s[i]%2==0) 改为:

if(i%2||s[i]%2==0)

(2)将t[j]=0 改为:t[j]=0;

3.程序设计题

函数fun的功能是:把a数组中的n个数的平方值,与b数组中逆序的n个数的平方值一一对应相减,结果存放在c数组中。

例如,当a数组中的值是:1、3、5、7、8,b数组中的值是:2、3、4、5、8

调用该函数后,c中存放的数据是:-63、-16、9、40、60

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

#include <stdio.h>

void fun(int a[],int b[],int c[],int n)

{

 

}

main()

{

int I,a[100]={1,3,5,7,8},

b[100]={2,3,4,5,8},c[100];

fun(a,b,c,5);

printf("The result is: ");

for(i=0;i<5;i++) printf("%d ",c[i]);

printf("\n");

}

【答案】

void fun(int a[],int b[],int c[],int n)

{

int i;

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

c[i]=a[i]*a[i]-b[n-1-i]*b[n-1-i];

}

1.程序填空题

给定程序的功能是:调用fun函数建立班级通讯录。通讯录中记录每位学生的编号、姓名和电话号码。班级的人数和学生的信息从键盘读入,每个人的信息作为一个数据块写到名为myfile5.dat的二进制文件中。

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

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

#include <stdio.h>

#include <stdlib.h>

#define N 5

typedef struct

{ int num;

char name[10];

char tel[10];

}STYPE;

void check();

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

___1___fun(STYPE *std)

{

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

___2___fp; int I;

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

return(0);

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

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

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

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

fclose(fp);

return(1);

}

main()

{

STYPEs[10]={{1,"aaaaa","111111"},{2,"bbbbb","222222"},{3,"ccccc","333333"},{4,"ddddd","444444"},{5,"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("OUT98.dat","rb"))==NULL)

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

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

printf("num name tel\n");

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

{

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

printf("%6d %s %s\n",

s[i].num,s[i].name,s[i].tel);

}

fclose(fp);

}

【答案】

(1)int (2)FILE *

2.程序修改题

在给定程序中,函数fun的功能是:比较两个字符串,将长的那个字符串的首地址作为函数值返回。

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

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

#include <stdio.h>

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

char fun(char *s,char *t)

{

int sl=0,tl=0;

char *ss,*tt;

ss=s; tt=t;

while(*ss)

{ sl++;

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

ss++;

}

while(*tt)

{ tl++;

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

tt++;

}

if(tl>sl) return t;

else return s;

}

main()

{

char a[80],b[80],*p,*q;

int I;

printf("Enter a string : ");

gets(a);

printf("Enter a string again : ");

gets(b);

printf("The longer is :%s\n",fun(a,b));

}

【答案】

float fun(float h)

{

long w ;

w=h*100+0.5;

return(float)w/100;

3.程序设计题

请编写一个函数float fun(float h),函数的功能是保留h小数点后两位数,并对第三位进行四舍五入。

例如:h值为8.32433,则函数返回8.320000;

h值为8.32533,则函数返回8.330000。

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

#include <stdio.h>

float fun(float h)

{

 

}

main()

{

float a;

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

w=h*100+0.5;

return(float)w/100;

}

1.程序填空题

给定程序的功能是将十进制正整数m转换成k进制(2≤k≤9)数的数字输出。例如,输入8和2,则应输出1000(即十进制数8转换成二进制表示是1000)。

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

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

#include <stdio.h>

void fun(int m,int k)

{

int aa[20],I;

for(i=0;m;i++)

{

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

aa[i]=___1___;

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

___2___;

}

for( ; I; i--)

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

printf("%d",___3___);

}

main()

{

int b,n;

printf("Please enter a number and a base:\n" );

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

fun(n, b);

}

【答案】

(1)m%k (2)m /= k (3)aa[ i-1 ]

2.程序修改题

在给定程序中,函数fun的功能是:计算s所指字符串中含有t所指字符串的数目,并作为函数值返回。

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

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

#include <stdio.h>

#include <string.h>

#define N 80

int fun(char *s,char *t)

{

int n;

char *p,*r;

n=0;

while(*s)

{ p=s;

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

R=t;

while(*r)

if(*r==*p) { r++; p++; }

else break;

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

if(*r=0)

n++;

s++;

}

return n;

}

main()

{

char a[N],b[N];

int m;

printf("Please enter string a : ");

gets(a);

printf("Please enter substring b : ");

gets(b);

m=fun(a,b);

printf("The result is : m=%d\n",m);

}

【答案】

(1)将R=t; 改为:r=t;

(2)将if(*r=0) 改为:if(*r==0)

3.程序设计题

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

例如,一维数组中的原始内容为:1,2,3,4,5,6,7,8,9,10;p的值为3。移动后,一维数组中的内容应为:5,6,7,8,9,10,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("Enter 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=0,b[N];

for(i=p+1; i<n; i++) b[j++]=w[i];

for(i=0; i<=p; i++) b[j++]=w[i];

for(i=0; i<n; i++) w[i]=b[i];

}

1.程序填空题

给定程序中,函数fun的功能是:将形参student所指结构体数组中年龄最小者的数据作为函数值返回,并在main函数中输出。

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

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

#include <stdio.h>

typedef struct

{

char name[10];

int age;

}STUDENT;

STUDENT fun(STUDENT student[],int n)

{

STUDENT min;

int I;

min=___1___;

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

if(min.age>___2___)

min=student[i];

return min;

}

main()

{

STUDENT student[3]={"alice",17,"baren",16,"caren",18};

STUDENT min;

min=fun(student,3);

printf("\nThe min age result \n");

printf("\nName : %s,Age : %d\n",___3___,min.age);

}

【答案】

(1)*student (2)student[i].age (3)min.name 

2.程序修改题

在给定程序中,函数的功能是:读入一个整数k(2≤k≤10000),打印它的所有质因子(即所有为素数的因子)。例如,若输入整数2310,则应输出:2、3、5、7、11。

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

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

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

IsPrime(int n);

{

int I,m;

m=1;

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

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

if!(n%i)

{ m=0; break; }

return(m);

}

main()

{

int j,k;

system("cls");

printf("Please enter an integer number

between 2and 10000: ");

scanf("%d",&k);

printf("\n\nThe prime factor(s) of

%dis(are): ",k);

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

if((!(k%j))&&(IsPrime(j)))

printf("\n%4d",j);

printf("\n");

}

【答案】

(1)将IsPrime(int n); 改为 IsPrime(int n)

(2)将if!(n%i) 改为 if(!(n%i))

3.程序设计题

请编写一个函数fun,其功能是:将两个字符串连接(不得使用库函数strcat),即把s2所指的字符串连接到s1所指字符串后。例如,分别输入Firststring和Secondstring则程序输出FirststringSecondstring。

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

#include <conio.h>

#include <stdio.h>

#include <windows.h>

void fun(char s1[],char s2[])

{

int I,n=strlen(s1),m=strlen(s2);

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

s1[n+I]=s2[I];

}

main()

{

char p1[80],p2[80];

system("cls");

printf("enter p1 and p2 :\n");

scanf("%s%s",p1, p2);

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

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

printf("invoke fun(p1,p2):\n");

fun(p1,p2);

printf("after invoking :\n");

printf("%s\n",p1);

}

【答案】

void fun(char s1[],char s2[])

{

int i,n=strlen(s1),m=strlen(s2);

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

s1[n+i]=s2[i];

}


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

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