秋c.docx
《秋c.docx》由会员分享,可在线阅读,更多相关《秋c.docx(11页珍藏版)》请在冰豆网上搜索。
秋c
2007年秋c
2007年秋浙江省高等学校
计算机等级考试试卷(二级C)
试题1(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】
输入2个整数lower和upper,输出一张华氏-摄氏温度转换表,华氏温度的取值范围是[lower,upper],每次增加2°F。
计算公式如下,式中:
c表示摄氏温度,f表示华氏温度。
运行示例:
Enterlower:
30
Enterupper:
35
fahrcelsius
30-1.1
320.0
341.1
【程序】
#include
main()
{intfahr,lower,upper;
doublecelsius;
printf("Enterlower:
");
scanf("%d",&lower);
printf("Enterupper:
");
scanf("%d",&upper);
printf("fahrcelsius\n");
for(fahr=lower;
(1);
(2)){
celsius=(3);
printf("%d(4)\n",fahr,celsius);}}
【供选择的答案】
(1)A、fahr<=upperB、fahrC、fahr>=upperD、fahr>upper
(2)A、fahr++B、fahr=fahr-2
C、fahr+2D、fahr=fahr+2
步长为2。
增加2
(3)A、5*(fahr-32)/9B、(5.0/9.0)*(fahr-32)
C、5/9*(fahr-32)D、5*fahr-32/9
结果应该是小数
(4)A、%6dB、%6.2fC、%6.1fD、%6.0f
保留1位小数
试题2(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】
输入2个正整数a和n,求a+aa+aaa+aa…a(n个a)之和。
要求定义并调用函数fn(a,n),它的功能是返回aa…a(n个a)。
例如,fn(3,2)的返回值是33。
运行示例:
Entera:
2
Entern:
3
sum=246
【程序】
#include
main()
{inti,n;
sn=sn+fn(a,n);
C、sn=sn+fn(i,a);D、sn=sn+fn(i,n);
循环终止次数为n,因此不能是n.否则不能累加,所以B错误。
要和/*注意1*/匹配,所以CD错误。
注意:
例如,fn(3,2)的返回值是33。
(2个3)
(7)A、tn=tn*10;B、a=a*10;
C、sn=tn*10;D、sn=sn+a*10;
这里与sn无关,所以CD错误。
如果选A,则最后是tn=330.因为返回的是tn,所以如果选择A,则tn的个位数就一定是0.这不符合题目要求。
(8)A、return;B、returnsn;
C、returna;D、returntn;
试题3(每小题3分,共12分)
阅读下列程序说明和程序,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序说明】
输入一个以回车结束的字符串(少于80个字符),删除其中除英文字母和数字字符以外的其它字符,再判断新字符串是否对称(不区分大小写字母)。
运行示例1:
Enterastring:
MadamI'mAdam
Yes
运行示例2:
Enterastring:
elephant
No
【程序】
#include
#include<(9)>
main()
{intflag,i,k,length;
charstr[80];
printf("Enterastring:
");
gets(str);
i=k=0;
while(str[i]!
='\0'){
if(isupper(str[i]))str[i]=tolower(str[i]);
if(isdigit(str[i])||isalpha(str[i])){
(10)
k++;}
i++;}
(11)
length=k;
flag=1;
for(k=0;k<=length/2;k++)
if(str[k]!
=str[length-1-k]){
(12)
break;}
if(flag)printf("Yes\n");
elseprintf("No\n");}
【供选择的答案】
(9)A、ctype.hB、string.h
C、stdlib.hD、math.h
本题是课本p114页例6.9与p122的5题的综合。
参考课本p114页最后1行。
(10)A、i++;B、str[k]=str[i];
C、str[i]=str[k];D、;
参考课本p122页倒数第4行。
(11)A、str[i]='\0';B、str[i-1]='\0';
C、str[k]='\0';D、;
参考课本p122页倒数第3行。
注意,这里的变量k就相当于课本的变量j.
(12)A、flag=1;B、flag=0;
C、;D、continue;
参考课本p115页第7行。
试题4(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序】
#include
main()
{inti,m;
scanf("%d",&m);
for(i=2;i<=m/2;i++)
if(m%i==0){
printf("%d#",i);
break;/*第8行*/
}
printf("%d",i);
}
(13)程序运行时,输入5,输出(13)。
A、3B、3#3
C、3#4D、3#5
(14)程序运行时,输入9,输出(14)。
A、3B、3#3
C、3#4D、3#5
(15)将第8行改为“continue;”后,程序运行时,输入9,输出(15)。
A、3B、3#3
C、3#4D、3#5
(16)将第8行改为“;”后,程序运行时,输入9,输出(16)。
A、3B、3#3
C、3#4D、3#5
这里就是根据程序的流程做出判断。
试题5(每小题3分,共12分)
阅读下列程序并回答问题,在每小题提供的若干可选答案中,挑选一个正确答案。
【程序】
#include
main()
{inti,j,temp;
inta[3][3]={1,2,3,4,5,6,7,8,9};/*第3行*/
voidf(int*x,int*y);
for(i=0;i<3;i++)
for(j=0;j<3;j++)
if(ifor(i=0;i<3;i++)
for(j=0;j<3;j++)
printf("%2d",a[i][j]);}
voidf(int*x,int*y)
{intt;
t=*x;*x=*y;*y=t;}
说明,函数f实现变量的交换。
/*第3行*/定义的数组是
1,2,3
4,5,6
7,8,9
(17)程序的输出是(17)。
A、321654987B、789456123
C、123456789D、147258369
/*第8行*/实现数组对角线左下与右上元素的交换。
数组变为:
1,4,7
2,5,8
3,6,9
(18)将第8行改为“f(&a[i][j],&a[j][i]);”后,程序的输出是(18)。
A、321654987B、789456123
C、123456789D、147258369
两次交换,又复原了!
所以数组没有变化。
(19)将第8行改为“if(i<2)f(&a[i][j],&a[2-i][j]);”后,程序的输出是(19)。
A、321654987B、789456123
C、123456789D、147258369
数组变为:
7,8,9
4,5,6
1,2,3
(20)将第8行改为“if(j<2)f(&a[i][j],&a[i][2-j]);”后,程序的输出是(20)。
A、321654987B、789456123
C、123456789D、147258369
试题6(每小题3分,共12分)
#include
main()
{inti,x1,x2;
inta[5]={1,2,3,4,5};
voidf1(intx,inty),f2(int*x,int*y);
x1=x2=0;
for(i=1;i<5;i++){/*语句7*/
if(a[i]>a[x1])
x1=i;
if(a[i]x2=i;}/*语句11*/
f2(&a[x1],&a[0]);
for(i=0;i<5;i++)printf("%2d",a[i]);
printf("\n");
f1(a[x2],a[1]);
for(i=0;i<5;i++)printf("%2d",a[i]);
printf("\n");
f2(&a[x2],&a[4]);
for(i=0;i<5;i++)printf("%2d",a[i]);
printf("\n");
f1(a[x1],a[3]);
for(i=0;i<5;i++)printf("%2d",a[i]);
printf("\n");
}
voidf1(intx,inty)
{intt;
t=x;x=y;y=t;}
voidf2(int*x,int*y)
{intt;
t=*x;*x=*y;*y=t;}
数组a的原始数据为:
a[5]={1,2,3,4,5}
也就是:
a[0]=1,a[1]=2,a[2]=3,a[3]=4,a[4]=5
语句7到语句11实现这样的功能:
在a[1]=2,a[2]=3,a[3]=4,a[4]=5找出最大和最小的数,所以x1=4
但是,没有比a[0]更小的数,所以x2一直没有变,x2=0
注意:
函数f1是传值方式调用,没有实现交换。
详细看课本P138.
注意:
函数f2是传址方式调用,实现交换。
详细看课本P139.
(21)程序运行时,第1行输出(21)。
A、12345B、21345
C、12354D、52341
函数f2是传址方式调用,交换a[4]和a[0]
这时:
a[5]={5,2,3,4,1}
(22)程序运行时,第2行输出(22)。
A、21345B、52341
C、25341D、12345
函数f1是传值方式调用,没有交换
这时:
a[5]={5,2,3,4,1}
(23)程序运行时,第3行输出(23)。
A、12354B、25314
C、12345D、52341
函数f2是传址方式调用,交换a[0]和a[4]
这时:
a[5]={1,2,3,4,5}
(24)程序运行时,第4行输出(24)。
A、52314B、12345
C、12354D、52341
函数f1是传值方式调用,没有交换
这时:
a[5]={1,2,3,4,5}
试题7(28分)
从n个不同的元素中,每次取出k个不同的元素,不管其顺序合并成一组,称为组合。
组合种数计算公式如下:
(1)定义函数fact(n)计算n的阶乘n!
,函数返回值类型是double。
(2)定义函数cal(k,n)计算组合种数
,函数返回值类型是double,要求调用函数fact(n)计算n的阶乘。
(3)定义函数main(),输入正整数n,输出n的所有组合种数
(1≤k≤n),要求调用函数cal(k,n)计算组合数。
#include
doublefact(doublex,intn)
{
intk;
doubleresult=1;
for(k=1;k<=n;k++)
result*=k;
returnresult;
}
doublecal(intk,intn)
{
doubleresult;
result=1.0*fact(n)/(fact(n-k)*fact(k));/*乘1.0变小数*/
returntresult;
}
voidmain()
{
intk,n;
doublecal;
scanf(”%d%d”,&k,&n);
for(k=1;k<=n;k++)
{
printf(”cal=%lf\n”,cal(k,n));
}
}