C程序设计课后习题第一章习题1.选择题(1)C语言程序的执行总是从(A)开始。
A.main函数的入口 B.编译预处理命令C.源程序的第一个函数D.源程序的第一行语句(2)在C语言的源程序中,主函数的位置(C)。
A.必须在编译预处理命令的后面B.必须在源程序的最后C.任意D.必须在源程序的开头(3)下列变量名中合法的是(C)。
A. B.C.Tom B.3a6bC._6a7bD.$ABC(4)下面两对用户定义标识符哪个可读性更强:(C)A.checkqualityB.salarytotalC.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 <stdio.h>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.0C. m==8D. 2/3E. ~m&mF. ~(m|m)G. !m H.m^m(2)设有int m=11,则表达式(B)使整型变量n的值为1。
A.n=m%3B.n=m-1<11? 1.0:3.0C.n=m/12D.n=11-m(3)设有int x=10,y=3;则下列表达式值为1的是(D)。
A.!(y==x/3) B. y!=x%7C. x>0&&y<0D.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. 1B. 2C. 3D.4(6)设int x=25;则表达式(x&20 >>1)|(x>10|7&x^33)的值为(F)。
A.35B. 43C. 11D. 3 F.412.填空题(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 <stdio.h>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 <stdio.h> 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!=0B.a==0C.a>0D.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. 4B.3C.5D.不确定(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.10B.7C.3D.112.程序填空题(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<math.h># include<stdio.h>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 <stdio.h>void main(){ int mark;printf(“input the mark of a student(0<mark<100):”);scanf(“%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 <stdio.h>void main(){ int mark;printf(“input the mark of a student(0<mark<100):”);scanf(“%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”);elseprintf(“E\n”);}(2)从键盘上输入四个整数,输出其中最小的一个。
结果为:#include <stdio.h>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 <stdio.h>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 <stdio.h>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 <stdio.h>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)输入一串字符,将其中的空格和数字删除后输出。