C语言书后习题.docx
- 文档编号:27827400
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:40
- 大小:43.11KB
C语言书后习题.docx
《C语言书后习题.docx》由会员分享,可在线阅读,更多相关《C语言书后习题.docx(40页珍藏版)》请在冰豆网上搜索。
C语言书后习题
习题
第1部分表达式及三种基本结构
1、单项选择题
1)在C语言中,int、char和float三种类型数据所占用的内存。
A、均为2个字节B、分别为1、2、4个字节
C、分别为2、1、4个字节D、由变量的大小决定
2)在C语言中,错误的int类型的常数是。
A、32768B、-32766C、037D、0xAF
3)下列可以表示字符型常数的是。
A、"a"B、'\t'C、"\n"D、297
4)下列错误的转义字符是。
A、'\\'B、'\"'C、'\81'D、'\0'
5)已知chara;intb;floatc;doubled;执行语句c=a+b+c+d;后,变量c的数据类型是。
A、intB、charC、floatD、double
6)已知inti=5;执行语句i+=++i;后,i的值是。
A、6B、10C、12D、11
7)若w=1,x=2,y=3,z=4;则条件表达式w>x?
w:
y y: z的结果为。 A、4B、3C、2D、1 8)已知intx;则使用逗号运算符的表达式(x=4*5,x*5),x+25的结果为。 A、20B、100C、125D、45 9)已知a、b、c的值都为1,且均为int类型变量,则执行以下语句: ++a||++b&&++c;变量b的值为。 A、1B、2C、3D、0 10)若要求在if后一对圆括号中表示条件“a不等于0成立”,则能正确表示这一关系的表达式是。 A、a<>0B、! aC、a=0D、a 11)C语言对嵌套if语句的规定是: else总是和配对。 A、其之前最近的ifB、第一个if C、缩进位置相同的ifD、其前面最近的且尚未配对的if 12)已知x、a、b均为整型变量,则下列选项中错误的if语句是。 A、if(a=b)x++;B、if(a= 13)下列关于switch语句和break语句的结论中,正确的是。 A、break语句只能用于switch语句中 B、在switch语句中可以根据需要,使用或不使用break语句 C、在switch语句中必须使用break语句 D、break语句不能用于switch语句 14)在C语言中,判断一个量是否为"真"时,通常这个量必须是才表示逻辑值“真”。 A、1B、非0整数C、大于0的整数D、非0值 15)以下四条语句中,有语法错误的是。 A、if(a>b)m=a;B、if(a=b)m=b;C、if((a=b)>=0)m=a;D、if((a=b;)>=0)m=a; 16)程序main(){intx=5;if(x++>10)printf("%d",x);elseprintf("%d",x--);}的输出是。 A、4B、5C、6D、7 17)在下面的条件语句中(其中s1和s2表示是C语言的语句),只有一个在功能上与其它三条语句不等价,它是。 A、if(a)s1;elses2;B、if(a==0)s2;elses1; C、if(a! =0)s1;elses2;D、if(a==0)s1;elses2; 18)在循环语句的循环体中使用break和continue语句的作用分别是。 A、都是结束循环B、结束本次循环和结束循环 C、都是结束本次循环D、结束循环和结束本次循环 19)设i和s是整型变量,执行如下的语句,则输出的i和s的值为。 for(i=0,s=0;i<10;i++,s++); printf("%d,%d\n",i,s); A、0,0B、10,0C、10,10D、9,9 20)语句while(! x);中的条件等价于。 A、x==0B、x! =0C、~xD、x! =1 21)在while(x)语句中的x与下面条件表达式等价的是。 A、x==0B、x==1C、x! =1D、x! =0 22)若intx=3;且有下面的程序片段,则输出结果是。 do {printf("%d",x-=2); }while(! (--x)); A、1B、30C、1-2D、死循环 23)若i,j均为整型变量,则关于循环for(i=0,j=-1;j==1;i++,j++)printf("%d,%d\n",i,j);正确的说法是。 A、循环体只执行一次B、循环体一次也不执行 C、判断循环结束的条件不合法D、是无限循环 24)以下不是死循环的语句为。 A、for(;;x+=i);B、while (1){x++;} C、for(i=10;;i--)D、for(;(c=getchar())! ='\n';) sum+=i;printf("%c",c); 25)设有如下程序段,则以下叙述中正确的是。 intx=2002,y=2003; printf("%d\n",(x,y)); A、输出语句中格式说明符的个数少于输出项的个数 B、输出语句中格式说明符必须再增加一个%d C、输出值为2002 D、输出值为2003 2、填空题 1)设有如下说明: inti=3,j=5,m; 执行语句m=(i++)-(--j);后,m的值是,j的值是。 2)设有如下程序: voidmain() {inta=3,b=3,c; c=a+++b;printf("%d%d\n",a,c); c=a---b;printf("%d%d\n",b,c);/*减号之间有无空格结果是不同的*/ c=a+++b;printf("%d%d\n",a,c);} 该程序执行后的三行输出分别是,,。 3)设x=2.5;a=7;y=4.7;则表达式x+a%3*(int)(x+y)%2/4的值为。 4)以下程序运行的结果是。 #include voidmain() {inti,j,m,n; i=8; j=10; m=++i; n=j++; printf("%d,%d,%d,%d",i,j,m,n); } 5)若intx=600;则执行下列程序后,变量y的值是。 if(x>400) if(x<500) y=0.5*(x-400); else y=x-400; else y=0; 6)若inti=10;则执行下列程序后,变量i的正确结果是。 switch(i) {case9: i+=1; case10: i+=1; case11: i+=2; default: i+=2; } 7)以下程序的输出为。 voidmain() {inta=9,b=7,c=11; if(a>b) if(a>c)printf("%d",a);elseprintf("%d",b); printf("end");} 8)完善程序: 企业根据月销售额为销售人员发奖金。 销售额小于1万元,奖金为销售额的20%;销售额大于或等于1万元而小于2万元,低于1万元的部分按20%,高于1万元的部分按15%发奖金;销售额大于2万元而小于4万元的,低于2万元的部分仍按上述方法发奖金,高于2万元的部分按10%发奖金;销售额大于4万元而低于6万元时,高于4万元的部分按6%发奖金;销售额大于6万元而低于10万元时,高于6万元的部分按3%发奖金;当销售额大于10万元时,高于10万元的部分按2%发奖金。 #include voidmain() {floatsales; doubleprice; intn; printf("请输入月销售额: \n"); scanf("%f",&sales); if(sales>=100000) n=10; else ; switch(n) {case0: price=sales*0.2;break; case1: price=2000+(sales-10000)*0.15;break; case2: case3: price=3500+(sales-20000)*0.1;break; case4: case5: price=5500+(sales-40000)*0.06;break; case6: case7: case8: case9: price=6700+(sales-60000)*0.03;break; case10: price=7900+(sales-100000)*0.02;break; } printf("奖金是: %f\n",price); } 9)执行下列程序段后,x和i的值分别是10和。 intx,i; for(i=1,x=1;i<=50;i++) {if(x>=10)break;if(x%2==1){x+=5;continue;}x-=3;} 10)完善程序: 程序用于求100~200之间的全部素数。 程序中n的作用是累计素数的个数,该程序要求控制每行输出10个数据。 #include"math.h" voidmain() {intm,k,i,n=0; for(m=101;m<=200;m=m+2) {if(n%10==0)printf("\n"); k=sqrt(m); for(i=2;i<=k;i++) if(m%i==0); if(i>=k+1){printf("%d",m);n=n+1;} } } 11)完善程序: 已知任意一个正整数的立方都可以写成一串连续奇数的和。 例如: 13×13×13=2197=157+159+…+177+179+181,下列程序可以验证上述定理。 voidmain() {longintn,i,k,j,sum; printf("Entern="); scanf("%ld",&n); k=n*n*n; for(i=1;i {for(j=i,sum=0;sum sum+=j; if(sum==k) printf("%ld*%ld*%ld=%ld=from%ldto%ld\n",n,n,n,sum,i,j); } } 12)完善程序: 下面程序的功能是打印100以内个位数为6且能被3整除的所有数。 #include"stdio.h" voidmain() {inti,j; for(i=0;i<10;i++) {j=i*10+6; if()continue; printf("%d",j);} } 13)阅读程序,写出程序的输出结果。 #include voidmain() {intk=1;charc='A'; do {switch(c++) {case'A': k++;break; case'B': k--; case'C': k+=2;break; case'D': k=k%2;continue; case'E': k=k*2;break; default: k=k/3; } k++; }while(c<'F'); printf("k=%d\n",k); } 14)写出程序的输出结果。 #include voidmain() {inti=1; while(i<=15) if(++i%3! =2) continue; else printf("%d",i);/*该语句是否在循环中? */ printf("\n");/*该语句是否在循环中? */ } 15)编程将一个键盘输入的正整数分解质因数。 例如: 输入90,打印出90=2*3*3*5。 16)猴子吃桃问题: 几个猴子第一天摘下若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。 第二天早上又将剩下的桃子吃掉一半,又多吃了一个。 以后每天早上都吃了前一天剩下的一半多一个。 到第10天早上想再吃时,见只剩下一个桃子了。 编程求第一天共摘了多少桃子。 (提示: 采取逆向思维的方法,从后往前推断。 ) /*有1020个西瓜,第一天卖一半多两个,以后每天卖剩下的一半多两个,问几天以后能卖完? */ main() { intday=0,x1=1020,x2; while(x1) {x2=x1/2-2; x1=x2; day++; } printf("day=%d\n",day); system("pause"); } 第2部分数组 1、单项选择题 1)以下对数组的初始化方法中,正确的是。 A、inta[]='A','B','C';B、inta[5]={0,1,2,3,4,5}; C、chara={'A','B','C'};D、inta[]={0,1,2,3,4,5}; 2)若要判断两个字符串str1和str2是否相等,应选用的函数是。 A、strcat(str1,str2)B、strcpy(str1,str2) C、strcmp(str1,str2)D、strstr(str1,str2) 3)以下对字符数组初始化的方法中,错误的是。 A、charstr[]={"Hello"};B、charstr[]="Hello"; C、charstr[]={Hello};D、charstr[]={'H','e','l','l','o','\0'}; 4)若给出以下定义,则正确的叙述为。 charx[]="abcdefg"; chary[]={'a','b','c','d','e','f','g'}; A、数组x和数组y等价B、数组x和数组y的长度相同 C、数组x的长度大于数组y的长度D、数组x的长度小于数组y的长度 5)若二维数组a有m列,则在a[i][j]前的元素个数为。 A、j*m+i;B、i*m+j;C、i*m+j-1;D、i*m+j+1; 6)若已定义: intw[10];则在下面表达式中不能表示w[2]的地址的是。 A、w+2B、&w[2]C、&w[0]+2D、w+=2 7)以下对二维数组a的正确说明是。 A、inta[3][]={3,4,2,6,9,2,7,5};B、floata(3,4); C、inta[][4]={3,4,2,6,9,2,7,5};D、inta[10]={10*1}; 8)不正确的字符串赋值或赋初值方式是。 A、charstr[]={'s','t','r','i','n','g','\0'};B、charstr[7]={'s','t','r','i','n','g'}; C、charstr1[10];str1="string";D、charstr1[]="string",str2[]="12345678"; 9)若有以下说明和语句,则输出结果是。 p51 chars[12]="abook! "; printf("%.4s",s); A、abook! B、abo C、abook! □□□(□代表空格)D、因格式描述不正确,没有确定的输出 10)若有以下说明和语句,则输出的结果是。 charsp[]="\x69\082\n"; printf("%d",strlen(sp)); A、3B、1C、2D、4 11)若两个静态数组A和数组B进行如下初始化,则。 staticcharA[]="ABCDEF"; staticcharB[]={'A','B','C','D','E','F’}; A、A和B完全相同B、A和B只是长度相等 C、A和B不相同,A是字符串,不是数组D、A数组长度比B数组长 12)下列程序的输出结果是。 voidmain() {intk=3,a[2]; a[0]=k;k=a[1]*10; printf("%d\n",k); } A、10B、30C、33D、不定值 13)要定义一个连续10个字节的存储空间,以下定义正确的是。 A、charss[10];B、intss[10];C、floatss[10];D、doubless[10]; 14)有一数组intnum[][4]={11,12,13,14,15,16,17,9,8,7,6,5},执行语句scanf("%d",&num[2][3]);时键盘输入值为0,则数组中的值应为。 A、11,12,13,14,0,0,0,0,0,0,0,0B、11,12,13,14,15,16,17,9,8,7,6,0 C、11,12,13,14,15,16,17,0,8,7,6,5D、11,12,13,14,15,16,17,9,8,7,6,5 15)有一数组如下定义 inta[6]={1,2,3,4,5}; 执行for(i=0;i<6;i++) printf("%d",a[i]);输出的结果是。 A、123456B、12345随机值C、123450D、123455 16)执行以下程序,若输入数据为: abcd1234efgh,则程序的输出结果是。 voidmain() {charstr[13]; scanf("%s",str); printf("%s\n",str); } A、abcdB、abcd1234C、efghD、abcd1234efgh 17)若有声明语句“intM[10],N[3][3];”,则以下对数组元素赋值的操作中,未出现越界访问的是。 A、N[0][3]=0B、M[10]=0C、N[3][0]=0D、M[-1]=0 18)已定义一个数组str存放字符串,要从键盘上接收一串字符到str中,正确的方法是。 A、gets(str);B、gets(&str);C、scanf("%c",str);D、scanf("%s",&str); 19)有一数组charstr[60],要将windows存放到此数组的正确语句是。 A、get(str);B、scanf("%s",str);C、scanf("%s",&str);D、puts(str); 20)C语言中,存储字符串"ABC"占用的字节数(即函数sizeof(a)的值)和字符串长度(即函数strlen("ABC")的值)分别是。 A、3、4B、4、3C、3、3D、4、4 21)设有说明: “charstr[100];”,并假设已输入一个字符串至str数组中,则输出该字符串的printf函数调用语句的格式为。 A、printf("%d\n",&str);B、printf("%c\n",str); C、printf("%s\n",str);D、printf("%s\n",&str); 22)下列描述正确的是。 A、数组名就是本数组在存储空间中的起始地址 B、数组名就是一个符号,在程序中没有实际的意义 C、数组名就是存放数组中的第一个元素的存储单元 D、在程序中数组不能单独使用,必须带[]使用 23)命题“当两个字符串s1和s2相等时为真,否则为假”的C语言表达式为。 A、s1==s2B、s1=s2C、! strcmp(s1,s2)D、strcmp(s1,s2) 24)有一数组inta[8]={1,2,3,4,5,6,7,8},在执行scanf("%d",&a[a[5]%3+1]);时键盘输入值为0,则数组中的值为。 A、12045678B、12305678 C、12340678D、10345678 25)若有以下说明和语句,则输出结果是。 charstr[]="\"c: \\abc.dat\""; printf("%s",str); A、符串中有非法字符B、\"c: \\abc.dat\"C、"c: \abc.dat"D、"c: \\abc.dat 26)有以下语句: intb;charc[10];则正确的输入语句是。 A、scanf("%d%s",&b,&c);B、scanf("%d%s",&b,c); C、scanf("%d%s",b,c);D、scanf("%d%s",b,&c); 27)以下程序运行后的输出结果是。 voidmain() {intp[8]={11,12,13,14,15,16,17,18},i=0,j=0; while(i++<7) if(p[i]%2)j+=p[i]; printf("%d\n",j); } A、42B、45C、56D、60 28)以下程序运行后的输出结果是。 voidmain() { chara[7]="a0\0a0\0"; inti,j; i=sizeof(a);/*sizeof()是求a数组存储空间的库函数*/ j=strlen(a); printf("%d%d\n",i,j); } A、22B、76C、72D、62 29)以下能正确定义一维数组的选项是。 A、inta[5]={0,1,2,3,4,5}B、chara[]={0,1,2,3,4,5}; C、chara={'A','B','C'};D、inta[5]="0123"; 30)以下叙述中错误的是。 A、对于double类型数组,不可以直接用数组名对数组进行整体输入或输出 B、数组名代表的是数组所占存储区的首地址,其值不可改变 C、当程序执行中数组元素的下标超出所定义的下标范围时,系统将给出“下标越界”的出错信息 D、可以通过赋初值的方式确定数组元素的个数 31)以下能正确定义一维数组的选项是。 A、intnum[];B、#defineN100 intnum[N]; C、intnum[0…100];D、intN=100; intnum[N]; 32)若有定义语句"staticcharstr[4][12]={"thank","you","very","much! "};"则str数组中存储'\0'的数组元素有个。 A、4B、1C、31D、27 33)为了判断两个字符串s1和s2是否相等,应当使用。 A、if(s1==s2)B、if(s1=s2) C、if(strcpy(s1,s2))D、if(strcmp(s1,s2)==0) 2、填空题 1)执行以下程序段后,b[0]、b[1]、b[2]的值为。 intb[3]={0,1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 书后 习题
![提示](https://static.bdocx.com/images/bang_tan.gif)