
第一章习题
1.选择题
(1)C语言程序的执行总是从( A )开始。
A.main函数的入口 B.编译预处理命令
C.源程序的第一个函数 D.源程序的第一行语句
(2)在C语言的源程序中,主函数的位置( C )。
A.必须在编译预处理命令的后面 B.必须在源程序的最后
C.任意 D.必须在源程序的开头
(3)下列变量名中合法的是( C )。
A. B.C.Tom B.3a6b
C._6a7b D.$ABC
(4)下面两对用户定义标识符哪个可读性更强:( C )
A.checkquality B.salarytotal
C.check_quality C.sal_ary_tot_al
(5)C程序是由( D )组成。
A.若干个过程 B.若干子程序
C.一个主程序和若干子程序 D.若干函数
2.填空题
(1)一个函数一般由两部分组成,它们分别是_函数首部______和__函数体____。
(2)编译预处理命令___是_____(填“是”或“不是”)C语言文本的一部分。
(3)一个C语言程序至少应包含一个__主函数或main()__。
(4)C语言的标准输入函数是_scanf()__,标准输出函数是___printf()____。
(5)函数体用___{______符号开始,用_____}______符号结束。
(6)注释的开始和结束标志分别为__/*____和____*/____。为增强程序的__可读性___,应该为程序写上清晰的注释。
3.编程题:参考本章例题,编写一个C程序,输出以下信息。
**********************
*The data is *
* 2005-03-23 *
**********************
程序如下:
#include Void main() {printf(“**********************\\n”); printf(“*The data is *\\n”); printf(“* 2005-03-23 *\\n”); printf(“**********************\\n”); } 第二章习题 1.选择题 (1)设int m=10 ,则下列表达式的值不等于零的有( A F )。 A.1%2 B. m=10/11.0 C. m==8 D. 2/3 E. ~m&m F. ~(m|m) G. !m H.m^m (2)设有int m=11,则表达式( B )使整型变量n的值为1。 A.n=m%3 B.n=m-1<11? 1.0:3.0 C.n=m/12 D.n=11-m (3)设有int x=10,y=3;则下列表达式值为1的是( D )。 A.!(y==x/3) B. y!=x%7 C. x>0&&y<0 D.x!=y||x>=y (4)有如下定义 long m; char c; float x; double y; 则表达式2L+3*y+m*2+c+x*m*3的值的类型为( D )。 A.long B. char C. float D.double (5)’a’在内存中占( A )个字节,“a”在内存中占( B )个字节。 A. 1 B. 2 C. 3 D.4 (6)设int x=25;则表达式(x&20 >>1)|(x>10|7&x^33)的值为( F )。 A.35 B. 43 C. 11 D. 3 F.41 2.填空题 (1)若int类型占2个字节,则long型数据占_4_字节,short类型占_2_字节,unsigned int占__2__字节,float类型占__4__字节。 (2)若有float x,执行表达式语句 x= 8.7+123.7*6-‘a’%7;后,x的值为__744.900024___。 (3)欲将一个16位二进制的整型变量的高8位清零,而只保留低8位,可用的方法__与八进制数377按位与即可______。 (4)下面程序段的输出结果为___0___。 Int a=1,b=2,c=3; printf(“%d\\n”,a=b==c); (5)有如下语句,则输出输出结果为__k1=-1,k2=65535____。 int k=-1; printf(“k1=%d,k2=%u”,k,k); 3.阅读程序,写出输出结果 (1) # include main () { char c1=‘H’,c2=c1+32; printf(“%o,%x,%d\\n”,c1,c1,c1); printf(“%c,%2d\\n”,c2,c2); } 输出结果为: 110,48,72 H,104 (2) # include main() { int x=432; float f=69.20; char c; c=f-2; printf(“%c,”,c); x+=f; printf(“%d,”,x); f=c+x; printf(“%4.3f\\n”,f); } 输出结果为: C,501,568.000 第三章习题 1.选择题 (1)结构化程序设计的三种基本结构是( A )。 A.顺序结构、选择结构、循环结构 B.顺序结构、转移结构、递归结构 C.嵌套结构、选择结构、递归结构 D.嵌套结构、循环结构、顺序结构 (2)C语言中,逻辑“真”等价于( C )。 A.大于零的数 B.大于零的整数 C.非零的数 D.非零的整数 (3)有程序段; int a; scanf(“%d”,&a); if(!a) printf(“continue”); 则if语句中的!a等价于( B )。 A. a!=0 B.a==0 C.a>0 D.a>=0 (4)若有int x,y;且x=20,则以下关于for循环语句的正确判断为( A ) for(y=20;x!=y;++x,y++)printf(“--\n”); A.循环体一次也不执行 B.循环体只执行一次 C.死循环 D.输出---— (5)有程序段; int x=20; do{ x/=2 }while(x--); 请问此循环执行( A )次 A. 4 B.3 C.5 D.不确定 (6)下列说法中不正确的是 ( A )。 A.switch语句中必须使用break语句。 B.switch后的括号中可以为任何表达式。 C.case后只能是常量或常量表达式。 D.以上结论不都正确。 (7)下面选项中与if(a)等价的是( B ) A.if(a==0) B.if(a!=0) C.if(a=0) D.if(a==1) (8)有如下程序段: int k ,m; k=5,m=1; switch (k) { case 1:m++; case 5:m*=3; case 9:m+=4;break; case 11:m+=1; default:m+=3; } printf(“%d\\n”,m); 则输出结果是( B )。 A.10 B.7 C.3 D.11 2.程序填空题 (1)求各位数为7且能被3整除的6位数的个数。 # include“stdio.h” main() { long int i; int count; count=_____0______; for(i=_100007___;i<99999;__i++_____) if(__(i%10==7)&&(i%3==0)_______) count++; printf(“count=%d\\n”,count); } (2)本程序判断某年(year)是否是闰年。 # include”stdio.h” main() { int year; printf(“please input year:”); scanf(“%d”,&year); if((year%4==0__&&__year%100!=0)__||__year%400==0) printf(“a leap year.\\n”); } (3)编程用公式:4(1-1/3+1/5-1/7+...)计算圆周率,精度要求为10-5(注:其中sign代表当前项符号(1表示+或-1表示-))。 # include # include void main() { int sign=1; float Pi=0,item=1,k=3; while(fabs(item)___)=1E-5________;) { pi+=item; sign*=-1; item=__sign/k______; k_+=2_________; } pi=__pi*4_______; printf(“pi=%f\\n”,pi); } 3.编程题 (1)请使用if...eles if...eles语句改写下面的程序。 # include void main() { int mark; printf(“input the mark of a student(0scanf(“%d”,&mark); mark=mark/10; switch(mark) { case 9:printf(“A\\n”);break; case 8:printf(“B\\n”);break; case 7:printf(“C\\n”);break; case 6:printf(“D\\n”);break; default:printf(“E\\n”);break; } } 结果为: # include void main() { int mark; printf(“input the mark of a student(0scanf(“%d”,&mark); if (mark/10==9) printf(“A\\n”); else if (mark/10==8) printf(“B\\n”); else if (mark/10==7) printf(“C\\n”); else if (mark/10==6) printf(“D\\n”); else printf(“E\\n”); } (2)从键盘上输入四个整数,输出其中最小的一个。 结果为: #include void main() { int a,b,c,d,min; scanf(“%d,%d,%d,%d”,&a,&b,&c,&d); min=a; if (min>b) min=b; if (min>c) min=c; if (min>d) min=d; printf(“min=%d\\n”,min); } (3)求12/(1+1)+22/(2+1)+32/(3+1)+...+n2/(n+1)的值,其中n的值由用户输入确定(注:请使用两种以上的不同循环分别编写本题)。 结果为: 方法一: #include main() {int n,i=1; float sum=0; scanf(“%d”,&n); while(i<=n) { sum=sum+i*i/(i+1.0) i++; } Printf(“sum=%f\\n”,sum); } 方法二: #include main() {int n,i=1; float sum=0; scanf(“%d”,&n); do { sum=sum+i*i/(i+1.0) i++; } while(i<=n); Printf(“sum=%f\\n”,sum); } 方法三: #include main() {int n,i; float sum=0; scanf(“%d”,&n); for(i=1;i<=n;i++) { sum=sum+i*i/(i+1.0) } Printf(“sum=%f\\n”,sum); } (4)输入一串字符,将其中的空格和数字删除后输出。 结果为: #include main() {char c; while(c=getchar()!=’\n’) if(!((c==’ ‘)||(c>=48&&c<=57))) Putchar(c); } } (5)本程序为某批发店计算应收货款总额。贷款总额等于单价乘以发货数量,而单价随发货数量的增加而降低。具体规定如下: 基本单价为10元。 购买数量(n) 当1~5件时,优惠x%,x=n-1; 当6~20件时,优惠x%,x=4+(n-5)*0.4; 当21~50件时,优惠x%,x=10+(n-20)*0.15; 当51~300件时,优惠x%,x=14.5+(n-50)*0.03; 当300件以上时,优惠x%,x=22. 当用户输入购买的数量时,程序计算并输出单价和货款总额。 结果为: #include void main() { int n; float price=10,r_price,p_sum; printf(“Please input number:\\n”); scanf(“%d”,&n); if (n<=5) {r_price=price*(100-(n-1))/100;} else if(n<=20) {r_price=price*(100-(4+(n-5)*0.4))/100;} else if(n<=50) {r_price=price*(100-(10(n-20)*0.15))/100;} else if(n<=300) {r_price=price*(100-(14.5+(n-50)*0.03))/100;} else {r_price=price*(100-22)/100;} printf(“Price=%f,Sum=%f”,r_price,n*r_price); }
