春答案.docx

上传人:b****7 文档编号:23843634 上传时间:2023-05-21 格式:DOCX 页数:15 大小:23.49KB
下载 相关 举报
春答案.docx_第1页
第1页 / 共15页
春答案.docx_第2页
第2页 / 共15页
春答案.docx_第3页
第3页 / 共15页
春答案.docx_第4页
第4页 / 共15页
春答案.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

春答案.docx

《春答案.docx》由会员分享,可在线阅读,更多相关《春答案.docx(15页珍藏版)》请在冰豆网上搜索。

春答案.docx

春答案

2009年春浙江省高校计算机等级考试试卷(二级C)

试题1(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序说明】输入一个正整数n,计算下列算式的前n项之和。

运行示例:

Entern:

2

Sum=0.67

【程序】

#include

main()

{intdenominator,flag,i,n;

doubleitem,sum;

printf("Entern:

");

scanf("%d",&n);

denominator=1;

(1);

sum=0;

for(i=1;

(2);i++){

(3);

sum=sum+item;

(4);

denominator=denominator+2;

}

printf("Sum=%.2f\n",sum);

}

【供选择的答案】

(1)A.flag=0B.flag=-1

C.flag=nD.flag=1

(2)A.i>=nB.i

C.i>nD.i<=n

(3)A.item=flag/denominator

B.item=1/denominator

C.item=flag*1.0/denominator

D.item=1.0/denominator

(4)A.flag=-1B.flag=0

C.flag=-flagD.flag=flag

试题2(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序说明】验证哥德巴赫猜想:

任何一个大于6的偶数均可表示为两个素数之和。

例如6=3+3,8=3+5,…,18=7+11。

将6~20之间的偶数表示成两个素数之和,打印时一行打印5组。

要求定义和调用函数prime(m)判断m是否为素数,当m为素数时返回1,否则返回0。

素数就是只能被1和自身整除的正整数,1不是素数,2是素数。

运行示例:

6=3+38=3+510=3+712=5+714=3+11

16=3+1318=5+1320=3+17

【程序】

#include

#include

intprime(intm)

{inti,n;

if(m==1)return0;/*注意:

返回0表示不是素数*/

n=sqrt(m);

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

if(m%i==0)return0;

(5)}

main()

{intcount,i,number;

count=0;

for(number=6;number<=20;number=number+2){

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

if((6)){

printf("%d=%d+%d",number,i,number-i);

count++;

if((7))printf("\n");

(8)}

}}

在本题中,函数prime(i)用来判断是不是素数。

返回0,不是素数,返回1,是素数。

【供选择的答案】

(5)A.;B.return1;

C.return0;D.elsereturn1;

(6)A.prime(i)!

=0||prime(number-i)!

=0

B.prime(i)!

=0&&prime(number-i)!

=0/*表示两个都是素数*/

C.prime(i)==0||prime(number-i)==0

D.prime(i)==0&&prime(number-i)==0

(7)A.count%5==0B.count%5!

=0

C.(count+1)%5==0D.(count+1)%5!

=0

5个就换行。

(8)A.break;B.elsebreak;

C.continue;D.;

退出内层循环。

试题3(每小题3分,共12分)

阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序说明】

输入一行字符,统计并输出其中数字字符、英文字母和其它字符的个数。

要求定义并调用函数count(s,digit,letter,other)分类统计字符串s中数字字符、英文字母和其它字符的个数,函数形参s的类型是字符指针,形参digit,letter,other的类型是整型指针,函数类型是void。

运行示例:

Entercharacters:

f(x,y)=5x+2y-6

Digit=3letter=5other=6

【程序】

#include

voidcount(char*s,int*digit,int*letter,int*other)

{(9)

while((10)){

if(*s>='0'&&*s<='9')

(*digit)++;/*等于digit++*/

elseif((*s>='a'&&*s<='z')||(*s>='A'&&*s<='Z'))

(*letter)++;/*等于letter++*/

else

(*other)++;/*等于other++*/

s++;}}

main()

{inti=0,digit,letter,other;

charch,str[80];

printf("Entercharacters:

");

ch=getchar();

while((11)){

str[i]=ch;

i++;

ch=getchar();

}

str[i]='\0';

(12);

printf("Digit=%dletter=%dother=%d\n",digit,letter,other);

}

本题的思想很简单,只不过使用了指针而已。

(9)A.intdigit=0,letter=0,other=0;

B.int*digit=0,*letter=0,*other=0;

C.digit=letter=other=0;

D.*digit=*letter=*other=0;

内容赋值为0.不是指针赋值为0.

(10)A.*s++!

='\0'B.*s++!

='\n'

C.*s!

='\0'D.*s!

='\n'

只能在A和C中选择。

但因为A在结束循环后还要移动指针S,此时已经指向了\0,再移动指针会出错,所以选择C。

(11)A.ch!

='\0'B.ch!

='\n'

C.ch=='\0'D.ch=='\n'

(12)A.count(str,&digit,&letter,&other)

B.count(&str,&digit,&letter,&other)

C.count(*str,digit,letter,other)

D.count(*str,*digit,*letter,*other)

传地址,注意str就是字符串的首地址。

由此判断其他几个选项都是错误的。

试题4(每小题3分,共12分)

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

程序1

#include

main()

{intflag=0,i;

inta[7]={8,9,7,9,8,9,7};

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

if(a[i]==7){

flag=i;

break;

}

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

flag=-1;

for(i=6;i>=0;i--)

if(a[i]==8){

break;/*注意1,跳出循环,下一句没有执行,所以flag还是-1*/

flag=i;

}

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

flag=0;

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

if(a[i]==9){

printf("%d",i);

}

printf("\n");

flag=0;

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

if(a[i]==7)flag=i;

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

}

(13)程序运行时,第1行输出(13)。

A.2B.0

C.3D.6

因为第2个元素等于7,所以flag=i=2

(14)程序运行时,第2行输出(14)。

A.4B.-1

C.0D.5

看注意1

(15)程序运行时,第3行输出(15)。

A.246B.4

C.135D.6

a[1]=9,a[3]=9.a[5]=9,所以答案是C。

(16)程序运行时,第4行输出(16)。

A.246B.2

C.135D.6

最后一个7是第7个元素,即a[6]=7,此时i=6,所以:

flag=i=6.

试题5(每小题3分,共12分)

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

intf1(intn)

{if(n==1)return1;

elsereturnf1(n-1)+n;}

intf2(intn)

{switch(n){

case1:

case2:

return1;

default:

returnf2(n-1)+f2(n-2);}}

voidf3(intn)

{printf("%d",n%10);

if(n/10!

=0)f3(n/10);}

voidf4(intn)

{if(n/10!

=0)f4(n/10);

printf("%d",n%10);}

#include

main()

{printf("%d\n",f1(4));

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

f3(123);

printf("\n");

f4(123);

printf("\n");

}

(17)程序运行时,第1行输出(17)。

A.10B.24

C.6D.1

f1(4)=4+f1(3)=4+(3+f1

(2))=4+(3+(2+f1

(1)))=4+3+2+1=10

(18)程序运行时,第2行输出(18)。

A.1B.3

C.2D.4

f2(4)=f2

(2)+f2(3)=1+(f2

(1)+f2

(2))=1+1+1=3

(19)程序运行时,第3行输出(19)。

A.123B.3

C.321D.1

第1次输出3,(123%10=3)

第2次输出2,(12%10=2)

第3次输出2,(1%10=1)

(20)程序运行时,第4行输出(20)。

A.1B.123

C.3D.321

试题6(每小题3分,共12分)

阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。

【程序】

#include

structnum{inta,b;};

voidf(structnums[],intn)

{intindex,j,k;

structnumtemp;

for(k=0;k

index=k;

for(j=k+1;j

if(s[j].b

temp=s[index];

s[index]=s[k];

s[k]=temp;}}

main()

{intcount,i,k,m,n,no;

structnums[100],*p;

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

for(i=0;i

s[i].a=i+1;

s[i].b=0;}

p=s;

count=no=0;

while(no

if(p->b==0)count++;

if(count==m){

no++;

p->b=no;

count=0;}

p++;

if(p==s+n)

p=s;}

f(s,n);

printf("%d:

%d\n",s[k-1].b,s[k-1].a);

}

(21)程序运行时,输入543,输出(21)。

A.3:

5B.2:

3

C.1:

2D.4:

1

(22)程序运行时,输入534,输出(22)。

A.3:

5B.1:

2

C.4:

3D.4:

2

(23)程序运行时,输入752,输出(23)。

A.1:

5B.6:

1

C.2:

3D.2:

4

(24)程序运行时,输入424#,输出(24)。

A.3:

3B.4:

2

C.2:

4D.4:

1

一、

通过分析以下一段程序,

for(i=0;i

s[i].a=i+1;

s[i].b=0;}

我们知道:

结构体s的最初情况是:

S[0].a=1,s[0].b=0

S[1].a=2,s[1].b=0

S[2].a=3,s[2].b=0

S[3].a=4,s[4].b=0

S[4].a=5,s[0].b=0

二、通过分析以下一段程序,

voidf(structnums[],intn)

{intindex,j,k;

structnumtemp;

for(k=0;k

index=k;

for(j=k+1;j

if(s[j].b

temp=s[index];

s[index]=s[k];

s[k]=temp;}}

我们知道,函数f是按照s[j].b的大小排序,小的在前、大的在后。

注意,排序时s[j].a也相应改变。

三、分析以下程序:

count=no=0;/*赋初值,为0*/

while(no

if(p->b==0)count++;/*2*/

if(count==m){/*3*/

no++;/*4*/

p->b=no;/*5*/

count=0;}/*6*/

p++;/*7,指针向后移动一次*/

if(p==s+n)/*8这两句的意思是,如果指到头,再返回起点*/

p=s;}

当循环进行了4次时,语句3的条件得到满足,所以语句4得到执行,no=1

此时,指针指向s[3].b,所以s[3].b=1;

注意,此后语句7继续执行,但语句8的条件不满足,所以继续,但因为语句6已经执行,所以count=0

然后,语句2再执行一次,语句8条件满足,又指向s[0].

这样,当下次语句3的条件满足时,no=2,而指针指向s[2],所以,s[2].b=2

依次类推,我们得到结构体s的最后结果:

S[0].a=1,s[0].b=5

S[1].a=2,s[1].b=4

S[2].a=3,s[2].b=2

S[3].a=4,s[4].b=1

S[4].a=5,s[5].b=3

特别应该注意的是,这里m的次数是4,而n=5,所以不匹配。

四,调用函数f对以上结构体排序后,结果如下:

S[0].a=4,s[0].b=1(注意是原来的s[4].b,所以S[0].a=4)

S[1].a=3,s[1].b=2

S[2].a=5,s[2].b=3

S[3].a=2,s[4].b=4

S[4].a=1,s[0].b=5

五.

S[k-1].b=s[3-1].b=s[2].b=3

S[k-1].a=s[3-1].a=s[2].a=5

所以,(21)题的答案是A.

其余各题类似。

试题7(28分)

(1)定义函数fact(n)计算n的阶乘:

n!

=1*2*……*n,函数形参n的类型是int,函数类型是double。

(2)定义函数cal(x,e)计算下列算式的值,直到最后一项的值小于e,函数形参x和e的类型都是double,函数类型是double。

要求调用自定义函数fact(n)计算n的阶乘,调用库函数pow(x,n)计算x的n次幂。

(3)定义函数main(),输入两个浮点数x和e,计算并输出下列算式的值,直到最后一项的值小于精度e。

要求调用自定义函数cal(x,e)计算下列算式的值。

#include

doublefact(intn)

{

intk;

doubleresult=1;

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

result*=k;

returnresult;

}

doublepow(doublex,intn)

{

intk;

doubleresult=1;

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

result*=x;

returnresult;

}

doublecal(doublex,doublee)

{

doubles=0.0;

doublet=1;

intk;

for(k=1;t>=e;k++)

{t=pow(x,k)/fact(k);

s=s+t;

}

returns;

}

voidmain()

{

intt=1;

doubles=0.0;

doublex,e;

scanf("%lf,%lf",&x,&e);

printf("s=%lf\n",cal(x,e));

}

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1