c语言程序上级考试答案,[转载]计算机C语言二级上级考试套题(二)

第5套

1. 程序填空题

请补充函数fun,该函数的功能是:判断某一个年份是否为闰年。

例如,1900年不是闰年,2004是闰年。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#include

int fun(int n)

{

int flag=0;

if(n%4==0)

{

if (【1】)

flag=1;

}

if (【2】)

flag=1;

return【3】;

}

void main()

{

int year;

system("CLS");

printf("Input the year:");

scanf("%d",&year);

if (fun(year))

printf("%d is a leap year. n",year);

else

printf("%d is not a leap year.n",year);

}

2.

程序改错题

下列给定程序中函数fun的功能是:计算n!。例如,给n输入5,则输出120.000000。

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

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

试题程序:

#include 

#include 

double fun(int n)

{ double result =1.0;

if n==0

return 1.0;

while(n>1&&n<170)

result=n--;

return result;

}

void main()

{

int n;

printf("Input N:");

scanf("%d",&n);

printf("nn%d!=%lfn",n,fun(n));

}

3.

程序设计题

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

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

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

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

{

}

void main()

{

int a,b;

long c;

FILE *out;

printf("Input a ,b: ");

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

fun(a,b,&c);

printf("The result is :%ldn",c);

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

fun(a+11,b+22,&c);

fprintf(out,"%ldn",c);

fclose(out);

}

【参考答案】:1. 程序填空题(1)

n%100!=0或n%100

(2)

n%400==0 (3) flag

2. 程序改错题

(1)错误:if

n==0 正确:if(n==0)

(2)错误:result

=n--; 正确:result *=n--;

3. 程序设计题

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

{

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

}

第6套

程序填空题:

请补充函数fun,函数fun的功能是求n的阶乘。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

long fun(int n)

{

if (【1】)

return(n*fun(【2】));

return【3】;

}

void main()

{

printf("10!=%ldn",fun(10));

}

程序改错题

下列给定的程序中,函数fun的功能是:计算并输出k以内最大的10个能被13或17整除的自然数之和。k的值由主函数传入,若k的值为500,则函数的值为4622。

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

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

试题程序:

#include

#include

#include

int fun(int k)

{ int m=0,mc=0, j;

while((k>=2)&&(mc<10))

{

if((k%13=0)||(k%17=0))

{ m=m+k;mc++;}

k--;

return m;

}

void main()

{system("CLS");

printf("%dn ",fun(500));

}

程序设计题

请编写函数fun,它的功能是计算:

s=(ln(1)+ln(2)+ln(3)+…+ln(m))0.5

在C语言中可调用log(n)函数求ln(n)。

例如,若m的值为20,则fun函数值为6.506583。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

#include

#include

double fun(int m)

{

}

void main()

{

FILE *wf;

system("CLS");

printf("%fn ",fun(20));

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

fprintf(wf,"%f",fun(20));

fclose(wf);

}

【参考答案】:1.程序填空题:(1)n>1或1

2.程序改错题:(1)错误:if((k%13=0)||(k%17=0))

正确:if((k%13==0)||(k%17==0))

(2)错误:缺少大括号 正确:加 }

3.程序设计题:double fun(int m)

{

int

i;

double

s=0.0;

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

s=s+log(i);

return

sqrt(s);

}

第7套

1.程序填空题

请补充函数fun,该函数的功能是:整除x且是偶数的数,把这些数保存在数组bb中,并按从大到小的顺序输出。

例如当x=20时,依次输出:20 10 4 2。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

#include

#include

void fun(int k,int bb[])

{

int I;

int j=0;

for(【1】;I<=k;I++)

{

if(【2】)

bb[j++]=I;

}

printf("nn");

for(I=【3】;I>=0;I--)

printf("%d ",bb[I]);

}

void main()

{

int k=1;

int bb[100];

system("CLS");

printf("nPlease input X=");

scanf("%d",&k);

fun(k,bb);

}

2程序改错题

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

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

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

试题程序:

#include

#include

#include

double fun(int m)

{double y=1.0;

int I;

for(I=2;I

y-=1/(I*I);

return(y);

}

void main()

{int n=5;

system("CLS");

printf("nThe result is %1fn", fun(n));

}

3.程序设计题

编写函数fun,它的功能是:求n以内(不包括n)同时能被5与11整除的所有自然数之和的平方根s,并作为函数值返回。

例如,n为1000时,函数值应为s=96.979379。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include 

#include 

#include 

#include 

double fun(int n)

{

}

void main()

{

FILE *wf;

system("CLS");

printf("s=%fn", fun(1000));

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

fprintf(wf,"%f",fun(1000));

fclose(wf);

}

【参考答案】:

1.程序填空题:(1)i=1

(2)k%i==0&&i%2==0

(3)--j或j-1

2.22.程序改错题:(1)错误:for(i=2;i

正确:for(i=2;i<=m;i++)

(2)错误:y-=1/(i*i);

正确:y-=1.0/(i*i);

3.程序设计题:double fun(int n)

{double s=0.0;

int

i;

for(i=0;i

if(i%5==0&&i%11==0)

s=s+i;

s=sqrt(s);

return

s;

}

第8套

1.程序填空题:

请补充函数fun,它的功能是:计算并输出n(包括n)以内所有能被3或7整除的自然数的倒数之和。

例如,在主函数中从键盘给n输入30后,输出为:s=1.226323。

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的横线上填入所编写的若干表达式或语句。

试题程序:

#include

double fun(int n)

{

int I;

double sum=0.0;

for(I=1;【1】;I++)

if(I%3==0【2】I%7==0)

sum+=【3】/I;

return sum;

}

void main()

{

int n;

double s;

printf("nInput n:");

scanf("%d",&n);

s=fun(n);

printf("nns=%fn",s);

}

2.程序改错题:在主函数中从键盘输入若干个数放入数组中,用0结束输入并放在最后一个元素中。下列给定程序中,函数fun的功能是:计算数组元素中值为正数的平均值(不包括0)。例如,数组中元素的值依次为39,-47,21,2,-8,15,0,则程序的运行结果为19.250000。

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

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

试题程序:

#include

#include

double fun(int x[])

{

int sum=0.0;

int c=0, I=0;

while(x[I]!=0)

{

if(x[I]>0)

{

sum+=x[I];

c++;

}

I++;

}

sum=sumc;

return sum;

}

void main()

{

int x[1000];

int i=0;

system("CLS");

printf("nPlease enter some data(end with 0)

:");

do

{

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

}while(x[i++]!=0);

printf("%fn",fun(x));

}

3 程序设计题:

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

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

注意:部分源程序给出如下。

请勿改动main函数和其他函数中的任何内容,仅在函数fun的花括号中填入所编写的若干语句。

试题程序:

#include

#include

#include

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

{

}

void main()

{

FILE *wf;

int m, n, zz[100];

system("CLS");

printf("nPlease enter an integer number

between 10 and 100: ");

scanf("%d",&n);

fun(n,&m,zz);

printf("nnThere are %d non-prime numbers

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

for(n=0;n

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

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

fun(17,&m,zz);

for(n=0;n

fprintf(wf,"%4d",zz[n]);

fclose(wf);

}

【参考答案】:1.程序填空题:(1)i<=n (2)|| (3)1.0或(double)1

2.程序改错题:(1)错误:int

sum=0.0; 正确:double sum=0.0;

(2)错误:sum=c; 正确: sum/=c;

3.程序设计题:void fun(int m, int *k, int xx[])

{

int

i,j,n=0;

for(i=4;i

{for(j=2;j

if(i%j==0) break;

if(j

}

*k=n;

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值