春答案.docx
- 文档编号:23843634
- 上传时间:2023-05-21
- 格式:DOCX
- 页数:15
- 大小:23.49KB
春答案.docx
《春答案.docx》由会员分享,可在线阅读,更多相关《春答案.docx(15页珍藏版)》请在冰豆网上搜索。
春答案
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)); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 答案
![提示](https://static.bdocx.com/images/bang_tan.gif)