C语言期中考试试题详解_第1页
C语言期中考试试题详解_第2页
C语言期中考试试题详解_第3页
C语言期中考试试题详解_第4页
C语言期中考试试题详解_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、浙江大学2010-2011学年春夏学期程序设计基础及实验课程期中考试试卷(a)考试日期: 2011 年 5 月 4 日,考试时间: 90 分钟诚信考试,沉着应考,杜绝违纪。考生姓名: 学号: 所属院系: _(注意:答题内容必须写在答题卷上,写在本试卷上无效)试题一、单选题(每小题2分,共20分)1. 以下正确的字符常量是_。a412b255c08d【解答】a 八进制412超出了8位二进制所能表示的范围03ff;b 255是一个合法的整数,可以表示一个字节的值;c 8不是一个合法的八进制数字;d 是转义字符,表示单个单引号字符本身,所以。字符常量缺少右单引号。2. 假设有定义:float x=1

2、6/5/2.0, y=16/5.0/2; 则 x 和 y 的值分别为_。a1.5 1.6b1.6 1.6c1.5 1.5d1.6 1.5【解答】16/5/2.0 è (16/5)/2.0 è 3/2.0 è 1.516/5.0/2 è (16/5.0)/2 è 3.2/2 è 1.63. 下列语句中, _ 将输出%d。aprintf(“%d”);bprintf(“%d”);cprintf(“%d”);dprintf(“%d”)【解答】a%d表示输出十进制整型量,但缺少相应的输出表达式,故输出结果是随机值;b%表示输出一个%符号本身,d

3、是普通字符,原样输出,所以输出%d;c%表示符号%,%d表示输出十进制整型值,故输出结果是随机值;d%表示输出符号%本身,%d表示输出十进制整型值。4. 下列程序段输出结果为 _。int x=1, y=012;printf(“%d”,y*x+);a12b10c20d24【解答】x+表达式的值是1,y*x+ è y*1 è y è 012 è 105. 下列程序段输出结果为 _。int a=1,b=2,c=2,t;while(a<b<c) t=a; a=b; b=t; c-;printf(“%d,%d,%d”,a,b,c);a1,2,0b2,1

4、,0c1,2,1d2,1,1【解答】a=1,b=2,c=2(1) 表达式a<b<c è 1<2<2 è 1 < 2 è 1条件成立,则执行循环体,结果为:a=2,b=1,c=1(2) 表达式a<b<c è 2<1<1 è 0 < 1 è 1条件成立,则执行循环体,结果为:a=1,b=2,c=0(3) 表达式a<b<c è 1<2<0 è 1 < 0 è 0条件不成立,循环结束。6. 在下图中,阴影部分区域可用表达式_

5、来表示。 x a b ca(x<=a)&&(x>=b)&&(x<=c)b(x<=a)|(b<=x<=c)c(x<=a)|(x>=b)&&(x<=c)d(x<=a)&&(b<=x<=c)【解答】(x<=a)| (x >=b) && (x <= c) è (x<=a)| (x>=b) && (x <= c)7. 下列程序段输出结果为 _。int x = -3, y = 2; if(x&g

6、t;y); x = -x; if(x<y) y = -y; printf("x=%d,y=%dn", x, y);ax=3,y=-2bx=3,y=2cx=-3,y=2dx=-3,y=-2【解答】x=3,y=2;请注意:if(x>y);8. 对于循环while(!e) 语句,!e等价于_。ae=0be!=0ce=1;de!=1【解答】!ee=0e!=0e=1e!=1e为011001e 为非00010/10/19. 循环 for(i=0, j=5; +i!=-j; ) printf(“%d %d”, i, j); 将执行_。a6次b3次c0次d无限次【解答】(1)

7、i=0, j=5: +i è 1 , -j è 4, i=1,j=4, 1 != 4成立;打印;i=1, j=4;(2) i=1,j=4: +i è 2 , -j è 3, i=2,j=3, 2 != 3成立;打印;i=2, j=3;(3) i=2,j=3: +i è 3, -j è 2, i = 3, j=2, 3 != 2成立;打印;i=3,j=2;(4) 10. 下列程序段执行后s值为_。int i=5, s=0;do if (i%2) continue; else s+=i; while (-i);a15b9c6d以上均不是【

8、解答】(1) i=5,s=0: i%2è5%2è1成立:continue;-iè4, i=4;(2) i=4,s=0: i%2è4%2è0不成立:s=0+4=4;-iè3, i=3(3) i=3,s=4: i%2è3%2è1成立:continue;-iè2, i=2(4) i=2,s=4: i%2è2%2è0不成立:s=4+2=6; -iè1,i=1(5) i=1,s=6: i%2è1%2è1成立:continue;-iè 0试题二、填空题(每小

9、题2分,共20分)1. 表达式 1+4/5+15<7+4%5+(8,10) 的值为 _。【解答】1+(4/5)+15<7+4%5+(8,10) è 1+0+15<7+4%5+(8,10)è1+15<7+4%5+(8,10)è16<7+4%5+(8,10)è16<7+4+(8,10)è16<11+(8,10)è16<11+10è16<21è12. 表达式 !5 的值为 _。【解答】!5 è !(!5) è!0è1 3. 表达式 (10

10、<<1)&4 的值为_。【解答】10: 0000101010<<1: 00010100(10<<1): 111010114: 00000100&- 00000000 即 04. 假设有定义:int x=10;则表达式 0<=x<=9 的值为 _。【解答】0<=x<=9 è (0<=x)<=9 è (0<=10) <=9 è 1 <= 9 è 15. 下列 for循环语句将输出: 0 1 2 0 1 2 0 1 2. for( i=1; i<=9

11、; i+ ) printf("%2d", _);【解答】 (i-1)%36. 对于定义: int m=5, y=2; 当计算表达式y+=y-=m*=y 后,y的值为_。【解答】y+=y-=m*=y ó y += (y -= (m *=y)先计算m*=y: 由于m=5, y=2, 所以:m=m*y=5*2è10再计算y-=10: 由于y=2,所以:y = y-10=2-10è -8最后计算y += -8: 由于y=-8,所以:y = y+(-8)=(-8)+(-8)è-167. 对于char c; 若已知其值为小写字母, 则将其转换为相

12、应大写字母的表达式为_。【解答】c-a+a8. 下列语句的输出结果为_。printf("%d#%x#", 027, 27);【解答】23#1b#9. 已知字符a的ascii码为97,则下列语句的输出结果为_。printf("%c#%d#",98,c);【解答】b#99#10. 下列程序段将输出_。unsigned char x=255,y=1;switch(!x) case 0: printf("*0*#");break;case 1:switch(y) case 0: printf("*1*#");break;c

13、ase 1: printf("*2*#");break;default: printf("*3*#");【解答】*2*#*3*#试题三、程序阅读题(每小题6分,共30分)1. 下列程序将输出_。 #include <stdio.h> void swap(int x, int y) int t;t=x; x=y; y=t;return;void main(void) int a=3, b=2; swap(a, b); printf("%d#%d#", a, b);return;【解答】3#2#注:尽管在函数swap()里,形

14、参x和y的值发生了交换,但根据函数参数的传递原则“实参向形参单向传值(即x向a赋值,y向b赋值),形参的改变不影响实参”,实参变量a和b的值未发生交换!2. 下列程序将输出_。# include <stdio.h>int s; int f(int m) static int k=0; for(; k<=m; k+) s+; return s;void main(void ) int s=1;s=f(2)+f(2); printf("%d#%d#", s, f(20);return;【解答】输出结果为:6#21#注:(1)全局变量s的初始值为0; (2)在f

15、函数中,s是全局变量有效,而在main函数中,s是局部变量有效; (3)在f函数中,k是静态变量,每次函数f调用结束后,其内存单元和值仍然保留。3. 若输入:1273 <回车>,以下程序的输出结果是_。#include <stdio.h>void main(void)int n, m;scanf(“%d”, &n);m=0;while (n>0) m=m*10+n%10; n/=10;printf(“%d”, m);return;【解答】输出结果是:37214. 若输入 -6+15*3/5=<回车> , 以下程序的输出结果是_。 #includ

16、e <stdio.h> void main() int m=0, sum=0; char c, oldc='+' do c=getchar(); if(c<='9'&&c>='0') m=10*m+c - '0' else if(oldc='+')sum += m; else sum -= m; m=0; oldc=c; printf("%d#", sum); while(c!='=');return;【解答】0#-6#9#6#1#程序的意

17、思:对输入的字符串扫描,若碰到数字字符序列,求出相应的整数值m;若碰到其它字符若字符是+号,则将m值加入到sum中去;若字符不是+号,则将从sum中减去m值。5. 若输入:how are you? <回车>,以下程序的输出结果是_。#include <stdio.h>void main(void ) int word;char ch; word=0;while(ch=getchar()!='?')if(ch=' ') word=0;else if(word=0)word=1;if(ch<='z'&&c

18、h>='a') ch=ch-'a'+'a'putchar(ch);return;【解答】how are you该程序思路:碰到一个新单词,则将该单词首字母从小写改为大写,其它字符原样输出。提示:可借鉴统计单词个数程序的算法。试题四、程序填空题(每空2分,共30分)1 输入正整数n,计算s = 1/1! + 1/2! + 1/3! + + 1/n!的值。#include <stdio.h>void main( void) int j, k, n;double f, s;scanf("%d", &n);

19、(1) ; s=0.0 for (k=1 ; k<=n; k+) (2) ; f=1.0 for(j=1; (3) ; j+) j<=k (4) ; f=f*j s=s+1.0/f; printf("sum=%fn", (5) ); s return;2 输入一个整数,统计该数的位数。如:输入12534,输出5;输入-99,输出2;输入0,输出1。#include <stdio.h>void main(void)int count=0, number;scanf(“%d”, (6) ); &numberif (number < 0) number = (7) ; -numberdo number = (8) ; number/10count+; while ( (9) ); number!=0printf(“%dn”, count);return;3 下

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论