版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第1部分《C语言程序设计》习题解答1.1第1章习题解答1.选择题(1)在计算机上可以直接运行的程序是()。A.高级语言程序 B.汇编语言程序C.机器语言程序 D.C语言程序【答案】C【解析】机器语言是直接面向机器的,可以直接运行,其他语言都需要编译。(2)一个C语言程序由()。A.若干函数组成 B.若干过程组成C.若干主程序组成 D.若干子程序组成【答案】A【解析】C语言程序由一个主函数和零个以上(含零个)非主函数构成。(3)C语言不具有的特点是()。A.具有结构化的控制语句B.数据类型丰富C.语法限制不太严格,程序设计自由度大D.在可移植性上,C语言比其他语言差【答案】D【解析】C程序的可移植性好,这是C语言的一个主要特点。(4)以下叙述不正确的是()。A.一个C语言程序可由一个或多个函数组成B.一个C语言程序必须包含一个主函数C.C语言程序的基本组成单位是函数D.在C语言程序中,注释说明只能位于一条语句的后面【答案】D【解析】在C语言程序中,注释说明可以位于程序中任意合适的位置。(5)以下叙述正确的是()。A.C语言比其他语言高级B.C语言可以不用编译就能被计算机识别和执行C.C语言以接近英语国家的自然语言和数学语言作为语言的表达形式D.C语言出现最晚,所以具有其他语言的一切优点【答案】C【解析】“C语言以接近英语国家的自然语言和数学语言作为语言的表达形式”,这是C语言的定义。(6)编译C语言程序时,程序中的注释部分将()。A.不参加编译,也不会出现在目标程序中B.参加编译,但不会出现在目标程序中C.不参加编译,但会出现在目标程序中D.参加编译,并会出现在目标程序中【答案】A【解析】C语言程序中的注释不参加程序的编译与运行。2.填空题(1)计算机语言的发展经历了____________、____________和____________阶段。【答案】机器语言汇编语言高级语言(2)C语言既适合编写____________,也适合编写应用软件。【答案】系统软件(3)简单地说,设计和调试C语言程序要经过____________、____________、____________和____________4个阶段。【答案】编辑编译链接执行3.编程题(1)编写一个简单的C语言程序,使得在屏幕上显示下列信息。***************************************************Cisveryfun.****************************************************【参考源程序】#include<stdio.h>intmain(){printf("***************************************************\n");printf("Cisveryfun.\n");printf("****************************************************\n");return0;}(2)编写一个简单的C语言程序,使得在屏幕上显示下列信息。****************【参考源程序】#include<stdio.h>intmain(){printf("*\n");printf("**〖JP〗*\n");printf("****〖JP〗*\n");printf("******〖JP〗*\n");return0;}1.2第2章习题解答1.选择题(1)选出可以作为C语言用户标识符的一组标识符()。A.void,define,WORD B.A3_B3,_123,abcC.FOR,-abc,Case D.2a,Do,Sizeof【答案】B【解析】C语言中的标识符只能由字母、数字和下划线3种字符组成,第一个字符只能是字母或下划线,且不允许是系统关键字。(2)下列运算符优先级最高的是()。A.关系运算符 B.赋值运算符C.算术运算符 D.逻辑运算符【答案】C【解析】上述4种运算符中,算术运算符的优先级最高。(3)sizeof(float)是()。A.一种函数调用 B.一个不合法的表示形式C.一个整型表达式 D.一个浮点表达式【答案】C【解析】sizeof()用来获取一个数据或数据类型在内存中所占空间的字节数,它的结果返回值为字节数,即为整型值。(4)下列字符串常量不正确的是()。A.'abc' B."12'12" C."0" D.""【答案】A【解析】字符串常量指用双引号括起来的若干字符。(5)下列4个选项均是合法整型常量的是()。A.160,-0xffff,011B.-0xcdf,01a,0xeC.-01,986,012,0668D.-0x48a,2e5,0x【答案】A【解析】本题主要考查十进制、八进制、十六进制实型数据的表达方式。(6)以下选项中不属于C语言类型的是()。A.signedshortint B.unsignedlongintC.unsignedint D.longshort【答案】D【解析】C语言中没有longshort类型。(7)数值029是一个()。A.八进制数 B.十六进制数C.十进制数 D.非法数【答案】D【解析】C语言中,以数字0开头的数值表示八进制数,八进制数的合法字符是0~7。(8)在C语言中,要求运算数必须是整型的运算符是()。A./ B.++ C.!= D.%【答案】D【解析】取余运算(%)要求两边的运算数必须是整型。(9)当c的值不为0时,以下能将c的值赋给变量a、b的是()。A.c=b=a B.(a=c)||(b=c)C.(a=c)&&(b=c) D.a=c=b【答案】C【解析】本题主要考查逻辑运算的短路特性。(10)若有说明语句“charc='\72';”,则变量c()。A.包含1个字符 B.包含2个字符C.包含3个字符 D.说明不合法,c的值不确定【答案】A【解析】转义字符代表一个字符常量。(11)设有说明“charw;intx;floaty;doublez;”,则表达式“w*x+z-y”值的数据类型为()。A.float B.char C.int D.double【答案】D【解析】混合运算表达式的数据类型为其中精度最高的运算量的数据类型。(12)长整型数据在内存中的存储形式是()。A.ASCII码 B.原码C.反码 D.补码【答案】D【解析】任何整型数据在内存中的存储形式都是补码。(13)字符型常量在内存中的存储形式是()。A.ASCII码 B.BCD码C.内部码 D.十进制码【答案】A【解析】字符型常量在内存中采用ASCII码形式存储。(14)若x、i、j和k都是int型变量,则计算表达式“x=(i=4,j=16,k=32)”后x的值为()。A.4 B.16 C.32 D.52【答案】C【解析】考查逗号表达式的运算规则。逗号表达式的值为最后一个表达式的值。(15)若有代数式,则下列C语言表达式不正确的是()。A.a/b/c*e*3 B.3*a*e/b/cC.3*a*e/b*c D.a*e/c/b*3【答案】C【解析】3*a*e/b*c对应的代数式为。(16)表达式“109!=99”的值是()。A.1 B.非空值 C.0 D.true【答案】A【解析】关系表达式的值为0或1,其中0表示假,1表示真。(17)若变量t为double类型,表达式“t=1,t*5”,则t的值为()。A.1 B.6.0 C.2.0 D.1.0【答案】D【解析】该题是问t的值,而不是表达式的值,故为1.0。(18)表示关系“x<=y<=z”的C语言表达式为()。A.(x<=y)&&(y<=z) B.(x<=y)AND(y<+z)C.(x<=y<=y) D.(x<=y)&(y<=z)【答案】A【解析】多于一个关系运算符的表达式,在C语言中应该用逻辑运算符连接。(19)在C语言中,int、char和short三种类型数据所占用的内存()。A.均为2字节 B.由用户自己定义C.由所用机器的字长决定 D.是任意的【答案】C【解析】C语言中各种类型数据所占内存字节数是由所用机器的字长决定的。(20)下列程序的执行结果是()。#include<stdio.h>voidmain(){inti=2;printf("%d,%d\n",++i,--i);}A.1,1 B.2,1 C.1,2 D.2,2【答案】B【解析】printf语句是从右向左计算输出表达式的值。(21)字符串常量"\\\22a,0\n"的长度是()。A.8 B.7 C.6 D.5【答案】C【解析】该题主要考查转义字符的使用。(22)下列叙述错误的是()。A.在C语言程序中,逗号运算符的优先级最低B.在C语言程序中,APH和aph是两个不同的变量C.若变量a和b的类型相同,在计算了赋值表达式“a=b”后,b中的值将放入a中,而b中的值不变D.当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值【答案】D【解析】当从键盘输入数据时,对于实型变量也可以输入整型值,只不过接收进来之后自动在末尾加“.0”。(23)下列叙述正确的是()。A.C语言中既有逻辑类型也有集合类型B.C语言中没有逻辑类型但有集合类型C.C语言中有逻辑类型但没有集合类型D.C语言中既没有逻辑类型也没有集合类型【答案】D【解析】C语言中既没有逻辑类型也没有集合类型。2.填空题(1)已知“intx=6;”,则执行语句“x+=x-=x*x;”后x的值是____________。【答案】-60(2)若w=1,x=2,y=3,z=4,则条件表达式“w>x?w:y<z?y:z”的结果是____________。【答案】3(3)若“intm=5,y=2;”,则计算表达式“y+=y-=m*=y”后y的值是____________。【答案】-16(4)在C语言中,一个int型数据在内存中如果占2字节,则int型数据的取值范围为____________。【答案】-32768~32767(5)已知字母a的ASCII码为十进制数97,且设ch为字符型变量,则表达式“ch='a'+'8'-'3'”的值为____________。【答案】f(6)若x和n均为int型变量,且x和n的初值均为5,则计算表达式“x+=n++”后x的值为____________,n的值为____________。【答案】106(7)若有定义“inta=2,b=3;floatx=3.5,y=2.5;”,则表达式“(float)(a+b)/2+(int)x%(int)y”的值为____________。【答案】3.500000(8)下列程序的输出结果是____________。#include<stdio.h>intmain(){intk=2,i=2,m;m=(k+=i*=k);printf("%d,%d\n",m,i);return0;}【答案】6,4(9)以下程序的执行结果是____________。#include<stdio.h>intmain(){inta,b,c;a=b=1;c=a++-1;printf("%d,%d,",a,c);c+=-a+++(++b||++c);printf("%d,%d\n",a,c);return0;}【答案】2,0,3,-1(10)以下程序的执行结果是____________。#include<stdio.h>intmain(){intn=023;printf("%d\n",--n);return0;}【答案】18(11)以下程序的执行结果是____________。#include<stdio.h>voidmain(){inti=10;printf("%d,%d,%d",--i,--i,i--);}【答案】8,9,10(12)以下程序的执行结果是____________。#include<stdio.h>voidmain(){shortinta=-32768,b;b=a-1;printf("a=%d,b=%d",a,b);}【答案】a=-32768,b=32767(13)以下程序的执行结果是____________。#include<stdio.h>voidmain(){intx=042,y=067,z;z=(x>>2)&(y<<3);printf("%d\n",z);}【答案】8(14)以下程序的执行结果是____________。#include<stdio.h>voidmain(){intx=10,y=9;inta,b,c;a=(--x==y++)?--x:++y;b=x++;c=y;printf("%d,%d,%d\n",a,b,c);}【答案】8,8,10(15)以下程序输入123456789,其输出结果是____________。#include<stdio.h>voidmain(){inta,b;floatf;scanf("%2d%*2d%2d%f",&a,&b,&f);printf("%d,%d,%f\n",a,b,f);}【答案】12,56,789.0000001.3第3章习题解答1.选择题(1)C语言的if语句中,用做判断的条件表达式为()。A.任意表达式 B.逻辑表达式C.关系表达式 D.算术表达式【答案】A【解析】在C语言中,任意类型的表达式都可以用做类型判断,判断的标准是:零值为假,非零值为真。(2)若希望当x的值为奇数时,表达式的值为真,x的值为偶数时,表达式的值为假,则以下不能满足要求的表达式是()。A.x%2==1 B.x%2C.!(x%2) D.!(x%2==0)【答案】C【解析】表达式“!(x%2)”与题意刚好相反。(3)已知x=12,y=10,执行语句“y=x>12?x+1:x-1;”后y的值为()。A.13 B.11 C.0 D.10【答案】B【解析】本题主要考查C语言中唯一一个三目运算符,即关系运算符的使用。(4)已知a=1、b=2、c=3、d=4、m=2、n=2,执行语句“(m=a>b)&&(n=c>d);”后n的值为()。A.1 B.2 C.3 D.4【答案】B【解析】本题主要考查逻辑与运算符的短路特性。(5)下列程序运行后输出()。#include<stdio.h>intmain(){intx=10,y=20,z=30;if(x>y)z=x;x=y;y=z;printf("%d,%d,%d",x,y,z);return0;}A.x=10,y=20,z=30 B.x=20,y=30,z=30C.x=20,y=30,z=10 D.x=20,y=30,z=20【答案】B【解析】如果不是复合语句,if只与其下的第一条语句构成条件结构。(6)下列程序()。#include<stdio.h>intmain(){inta=5,b=0,c=0;if(a=b+c)printf("111\n");elseprintf("222\n");return0;}A.有语法错误 B.输出111C.不能输出 D.输出222【答案】D【解析】if语句中的条件表达式为一个赋值表达式,其值为0,故运算结果为222。(7)下列程序运行后输出()。#include<stdio.h>intmain(){intm=1;if(m++>1)printf("%d",m);elseprintf("%d",m--);return0;}A.0 B.1 C.2 D.3【答案】C【解析】该题主要考查自增、自减运算符的位置,若“++”在后,则先取其当前值参与运算,之后再自增1。(8)若x=4、y=-2、z=5,则表达式“++x-y+z++”的值为()。A.10 B.11 C.12 D.13【答案】12【解析】因为“++”在前,所以“++x”得到5,减去y之后得到7,因为“++”在后,所以“z++”先取z当前的值参与计算,之后得到结果为12。(9)下列程序的输出结果为()。#include<stdio.h>intmain(){intx=12;while(x--);printf("%d",x);return0;}A.-1 B.0 C.11 D.1【答案】A【解析】因为循环的条件表达式为“x--”,所以当循环条件不成立时,x的值为0,随后x的值再自减1,故输出x的值为-1。(10)C语言允许if…else语句嵌套使用,规定else总是和()配对。A.之前最近的if B.第1个ifC.缩进位置相同的if D.之前最近的且尚未配对的if【答案】D【解析】本题考查在嵌套的if结构中需要重点掌握的规则。(11)下列程序执行后的输出结果是()。#include<stdio.h>intmain(){inti=1,j=2,k=3;if(i++==1&&(++j==3||k++==3))printf("%d%d%d",i,j,k);return0;}A.123 B.234C.223 D.233【答案】D【解析】该题主要考查自增运算符与逻辑运算符的结合,重点是逻辑运算符的短路性质。(12)下列叙述正确的是()。A.break语句只能用于switch语句中B.在switch语句中必须使用defaultC.break语句必须与switch语句中的case配对使用D.在switch语句中不一定使用break语句【答案】D【解析】在switch语句中,break语句不是必须的项。(13)当从键盘输入32时,下列程序的输出结果为()。#include<stdio.h>intmain(){intx,y;scanf("%d",&x);y=0;if(x>=0){if(x>0)y=1;}elsey=-1;printf("%d",y);return0;}A.0 B.1 C.-1 D.不确定值【答案】B【解析】本题主要考查嵌套的if语句的作用。(14)对于下列程序的判断正确的是()。#include<stdio.h>intmain(){intx=3,y=0,z=0;if(x=y+z)printf("****");elseprintf("####");return0;}A.有语法错误不能通过编译B.输出****C.可以通过编译,但是不能通过链接,因而不能运行D.输出####【答案】D【解析】if语句的条件表达式为赋值表达式,其值为0。(15)对于下列程序段的描述正确的是()。inta=10;while(a=0)a=a-1;A.循环体语句执行10次 B.循环体语句一次也不执行C.循环是无限循环 D.循环体语句仅执行一次【答案】B【解析】循环条件为假,所以一次也不执行。(16)语句“while(!A);”中的表达式“!A”等价于()。A.A==0 B.A==1 C.A!=0 D.A!=1【答案】A【解析】作为循环条件时,!A等价于A==0,A等价于A!=0。(17)下列程序的运行结果是()。#include<stdio.h>intmain(){inta=1,b=2,c=4,t;while(a<b<c){t=a;a=b;b=t;c--;}printf("%d,%d,%d",a,b,c);return0;}A.2,1,3 B.2,1,4 C.1,2,0 D.1,2,2【答案】C【解析】重点理解循环中的条件表达式“a<b<c”与数学上的关系表达式的区别。(18)下列程序的执行结果是()。#include<stdio.h>voidmain(){inta=0,i;for(i=1;i<5;i++){switch(i){case0:case3:a+=2;case1:case2:a+=3;default:a+=5;}}printf("%d\n",a);}A.31 B.13 C.10 D.20【答案】A【解析】循环过程中对变量a的增值情况为:8+8+10+5=31。(19)对下列程序的描述正确的是()。#include<stdio.h>intmain(){inta=3;do{printf("%d\n",a-=2);}while(!(--a));return0;}A.输出1 B.输出1和-2C.输出3和0 D.是死循环【答案】B【解析】该题主要考查自减运算符与逻辑非运算符的结合性。(20)for(表达式1;;表达式3)可理解为()。A.for(表达式1;0;表达式3)B.for(表达式1;1;表达式3)C.for(表达式1;表达式1;表达式3)D.for(表达式1;表达式3;表达式3)【答案】C【解析】for语句中,省略表达式2相当于条件永为真。(21)下列描述正确的是()。A.continue语句的作用是结束整个循环的执行B.break语句和continue语句的作用相同C.只能在循环体内使用continue语句D.从循环嵌套中退出时,只能使用goto语句【答案】C【解析】continue语句只能用于循环。(22)下列程序段不是死循环的是()。A.inti=100;while(1){i=i%100+1;if(i>100)break;}B.for(;;);C.intk=0;do{++k;}while(k<=0);D.ints=36;while(s);--s;【答案】C【解析】C选项中的循环体只执行一次就结束了,而其他都是死循环。(23)下列程序的运行结果是()。#include<stdio.h>intmain(){inti;for(i=1;i<=5;i++){if(i%2)printf("*");elsecontinue;printf("#");}printf("$\n");return0;}A.*#*#*#$ B.#*#*#*C.*#*#$ D.#*#*【答案】A【解析】本题主要考查for循环中continue语句的用法。(24)下列程序的运行结果是()。#include<stdio.h>intmain(){inti,j,x=0;for(i=0;i<2;i++){x++;for(j=0;j<=3;j++){if(j%2)continue;x++;}x++;}printf("x=%d\n",x);return0;}A.x=4 B.x=8 C.x=6 D.x=12【答案】B【解析】在双重循环结构中,continue语句只结束其所在循环的本次循环操作。(25)若w、x、y、z、m均为int型变量,则执行以下语句后的m值是()。w=1;x=2;y=3;z=4;m=(w<x)?w:x;m=(m<y)?m:y;m=(x<z)?m:z;A.1 B.2 C.3 D.4【答案】A【解析】本题主要考查条件运算符的使用,在“(表达式1)?(表达式2):(表达式3)”中,“表达式1”的值为真时取“表达式2”的值为结果,否则取“表达式3”的值为结果。(26)下列程序段()。for(t=1;t<=100;t++){scanf("%d",&x);if(x<0)continue;printf("%3d",t);}A.当x<0时整个循环结束 B.x>=0时什么也不做C.printf函数永远也不会被执行 D.最多允许输出100个非负整数【答案】D【解析】当x的值小于零时,直接进入下一次循环,只有当x的值大于等于零时才输出。2.填空题(1)在C语言中,break语句只能用于____________语句和____________语句中。【答案】switch循环(2)当a=3,b=2,c=1时,表达式“f=a>b>c”的值是____________。【答案】0(3)下列程序段的功能是从键盘输入的字符中统计数字字符的个数,用换行符结束循环。请填空。intn=0,c;c=getchar();while(____________){if(____________)n++;c=getchar();}【答案】c!='\n'c>='0'&&c<='9'(4)下列程序的功能是计算2~100的偶数的累加和。请填空。#include<stdio.h>intmain(){inti,sum=0;for(____________)sum+=i;printf("sum=%d\n",sum);return0;}【答案】i=2;i<=100;i+=2(5)下列程序的输出结果是____________。#include<stdio.h>intmain(){inta=100,x=10,y=20,ok1=5,ok2=0;if(x<y)if(y!=10)if(!ok1)a=1;elseif(ok2)a=10;a=-1;printf("%d\n",a);return0;}【答案】-1(6)下列程序运行后输出____________。#include<stdio.h>intmain(){intx=1,y=2;switch(x){case1:switch(y){case1:printf("%d",x);break;case2:printf("%d",y);break;}case2:printf("3");}return0;}【答案】23(7)下列程序的功能是找出整数的所有因子。请填空。#include<stdio.h>intmain(){intn,i;scanf("%d",&n);for(i=1;____________;i++){if(____________)printf("%3d",i);}printf("\n");return0;}【答案】i<=n/2n%i==0(8)下列程序执行后的输出结果是____________。#include<stdio.h>intmain(){inta=3;do{printf("*");a--;}while(!a==0);return0;}【答案】***(9)下列程序的执行结果是____________。#include<stdio.h>intmain(){inti=1,n=0,s=1;do{n=n+s*i;s=-s;i++;}while(i<=9);printf("%d",n);return0;}【答案】5(10)下列程序运行后输出____________。#include<stdio.h>intmain(){inta,b=19;while(a=b-1){b-=3;if(b%5==0){a++;continue;}elseif(b<5)break;a++;}printf("%d,%d\n",a,b);return0;}【答案】6,4(11)下列程序的运行结果是____________。#include<stdio.h>intmain(){inti=1;while(i<=15)if(++i%3!=2)continue;elseprintf("%d\t",i);printf("\n");return0;}【答案】2581114(12)下列程序的功能是打印100以内个位数为6且能被3整除的所有数。请填空。#include<stdio.h>intmain(){inti,j;for(i=0;____________;i++){j=i*10+6;if(____________)continue;printf("%d",j);}return0;}【答案】i<=9j%3!=0(13)下列程序的运行结果是____________。#include<stdio.h>intmain(){inti=5;do{switch(i%2){case4:i--;break;case6:i--;continue;}i--;i--;printf("%d\t",i);}while(i>0);return0;}【答案】31-1(14)下列程序的功能是计算分数数列前20项的和:。请填空。#include<stdio.h>intmain(){floats=0.0;inti,a,b,t;for(____________;i<=20;i++){s+=____________;t=a+b;b=a;a=t;}printf("s=%.2f",s);return0;}【答案】a=2,b=1,i=1(float)(a)/b(15)下列程序的功能是根据公式求e的近似值,要求精度为10-6。请填空。#include<stdio.h>intmain(){inti;doublee,new;____________;new=1.0;for(i=1;____________;i++){new/=(double)i;e+=new;}printf("e=%f\n",e);return0;}【答案】e=1.0new>=1e-63.编程题(1)从键盘输入任意一个整数,判断其是否为偶数。【参考源程序】#include<stdio.h>intmain(){intn;printf("pleaseinputanumber:\n");scanf("%d",&n);if(n%2==0)printf("Yes!");elseprintf("No!");return0;}(2)有如下函数:编写程序,使输入x时,输出相应的y值。【参考源程序】#include<stdio.h>intmain(){intx,y;printf("pleaseinputthex:\n");scanf("%d",&x);if(x<1)y=x;elseif(x>=1&&x<10)y=2*x-1;elseif(x>=10)y=3*x-1;printf("yis%d",y);return0;}(3)输入一个整数,若该数能够被3和7整除,则输出2;若只能被3和7中的一个整除,则输出1;若不能被3和7中的任意一个整除,则输出0。【参考源程序】#include<stdio.h>intmain(){intn,m;printf("pleaseinputn:\n");scanf("%d",&n);if(n%3==0&&n%7==0)m=2;elseif(n%3==0||n%7==0)m=1;elsem=0;printf("theresultis%d",m);return0;}(4)爱因斯坦的阶梯问题。爱因斯坦曾提出这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶不剩。问该阶梯至少有多少阶?编写程序解决这个问题。【参考源程序】#include<stdio.h>intmain(){inti,n=1,m=1;while(m){if(n%2==1)if(n%3==2)if(n%5==4)if(n%6==5)if(n%7==0){printf("%d",n);m=0;}n++;}return0;}(5)输出所有的水仙花数。水仙花数是一个3位整数,它的各位数字的立方和等于该数本身。【参考源程序】#include<stdio.h>intmain(){inti,a,b,c;for(i=100;i<1000;i++){a=i%10;b=i/10%10;c=i/100;if(a*a*a+b*b*b+c*c*c==i)printf("%d",i);}return0;}(6)编写程序,打印九九乘法表。【参考源程序】#include<stdio.h>intmain(){inti,j;for(i=1;i<10;i++){for(j=1;j<=i;j++)printf("%3d",i*j);printf("\n");}return0;}(7)编写程序,打印如下图形。*************************【参考源程序】#include<stdio.h>intmain(){inti,j;for(i=1;i<=4;i++){for(j=1;j<=4-i;j++)printf("");for(j=1;j<=2*i-1;j++)printf("*");printf("\n");}for(i=1;i<=3;i++){for(j=1;j<=i;j++)printf("");for(j=1;j<=7-2*i;j++)printf("*");printf("\n");}return0;}(8)用公式求π的近似值,直到最后一项的绝对值小于10-6为止。【参考源程序】#include<stdio.h>intmain(){floatsum=0.0,t=1.0,s=-1;inti=1;while(t>1e-6){s=s*(-1);t=t*s;sum+=t;t=1.0/(2*i+1);i++;}sum=sum*4;printf("%f",sum);return0;}(9)一个数如果恰好等于它的因子之和,就称其为完数。例如,6的因子为1、2、3,而6=1+2+3,因此6是完数。编写程序找出1000以内的所有完数,并按下面格式输出其因子:6itsfactorsare1,2,3。【参考源程序】#include<stdio.h>intmain(){inta,i,m;for(a=1;a<=1000;a++){for(m=0,i=1;i<=a/2;i++)if(!(a%i))m+=i;if(m==a){printf("%4ditsfactorsare",a);for(i=1;i<=a/2;i++)if(!(a%i))printf("%d",i);printf("\n");}}return0;}(10)给出任意一个不多于5位的正整数,要求如下:①求出它是几位数。②分别输出每一位数字。③按逆序输出各位数字。例如,原数为321,则输出123。【参考源程序】#include<stdio.h>intmain(){intn,m,i,a,b,c,d,e,j=0;scanf("%d",&n);m=n;while(n){j++;n/=10;}printf("%d\n",j);a=m/10000;if(a!=0)printf("%d",a);b=m%10000/1000;if(b!=0)printf("%d",b);c=m%1000/100;if(c!=0)printf("%d",c);d=m%100/10;if(d!=0)printf("%d",d);e=m%10;if(e!=0)printf("%d\n",e);n=m;while(n){i=n%10;printf("%d",i);n/=10;}return0;}1.4第4章习题解答1.选择题(1)以下有关C语言中数组的说法正确的是()。A.数组元素的数据类型可以不一致B.数组元素的个数可以不确定,允许随机变动C.可以使用动态内存分配技术定义元素个数可变的数组D.定义一个数组后就确定了它所容纳的具有相同数据类型元素的个数【答案】D【解析】C语言中一个数组所有元素的数据类型必须相同,且不存在元素个数可变的数组。(2)若有定义“inta[][3]={0,0};”,则下列描述正确的是()。A.数组a的每个元素都可得到初值0B.二维数组a的第一维的大小为4C.数组a的行数为2D.只有元素a[0][0]和a[0][1]可得到初值0,其他元素均得不到初值【答案】A【解析】二维数组初始化时,没有赋初值的数组元素的值都为0。(3)下列语句错误的是()。A.staticcharword[]={'C','h','i','n','a'};B.staticcharword[]={"China"};C.staticcharword[]="China";D.staticcharword[]='China';【答案】D【解析】单引号只能括起单个字符,不能括起一个字符串。(4)下列对一维数组a的说明正确的是()。A.inta(10); B.intn=10,a[n];C.intn; D.#defineSIZE10scanf("%d",&n);inta[SIZE];inta[n];【答案】D【解析】定义数组时,数组名后的表达式一定是一个常量表达式。(5)若有定义“inta[3][4];”,则对a的数组元素引用正确的是()。A.a[2][4] B.a[1,3]C.a[1+1][0] D.a(2)(1)【答案】C【解析】对数组元素的引用,应注意下标越界问题和使用格式与其他语言的区别。(6)对于下列程序的说法正确的是()。①main()②{③floata[10]={0.0};④inti;⑤for(i=0;i<3;i++)scanf("%d",&a[i]);⑥for(i=1;i<10;i++)a[0]=a[0]+a[i];⑦printf("%f\n",a[0]);⑧}A.没有错误 B.第③行有错误C.第⑤行有错误 D.第⑦行有错误【答案】C【解析】函数scanf()接收数据的格式不正确。(7)下列程序的运行结果是()。#include<stdio.h>voidmain(){inta[6],i;for(i=1;i<6;i++){a[i]=9*(i-2+4*(i>3))%5;printf("%2d",a[i]);}}A.-40404 B.-40403C.-40443 D.-40440【答案】C【解析】本题主要考查表达式的混合运算及对数组元素的赋值。(8)下列对C语言字符数组的描述错误的是()。A.字符数组可以存放字符串B.字符数组中的字符串可以进行整体输入/输出C.可以在赋值语句中通过赋值运算符对字符数组进行整体赋值D.字符数组的下标从0开始【答案】C【解析】不可以在赋值语句中通过赋值运算符“=”对字符数组进行整体赋值,应该使用函数strcpy()进行赋值。(9)对下列程序段的描述正确的是()。chara[3],b[]="China";a=b;printf("%s",a);A.运行后将输出China B.运行后将输出ChC.运行后将输出Chi D.编译出错【答案】D【解析】数组名是地址常量,程序运行过程中不允许修改其值。(10)判断字符串s1是否大于字符串s2,应当使用()。A.if(s1>s2) B.if(strcmp(s1,s2))C.if(strcmp(s2,s1)>0) D.if(strcmp(s1,s2)>0)【答案】D【解析】本题主要考查字符串比较函数的使用。(11)已知“charc1[]={"abcd"};charc2[]={'a','b','c','d'};”,则下列描述正确的是()。A.数组c1和数组c2等价 B.数组c1和数组c2的长度相同C.数组c1的长度大于数组c2的长度 D.以上都不对【答案】C【解析】c1的长度为字符串中字符的个数加1,所以c1的长度大于c2的长度。(12)下列程序的运行结果是()。#include<stdio.h>voidmain(){charstr[]="SSSWLIA",c;intk;for(k=2;(c=str[k])!〖KG-*2〗='\0';k++){switch(c){case'I':++k;break;case'L':continue;default:putchar(c);continue;}putchar('*');}}A.SSW* B.SW* C.SW*A D.SW【答案】B【解析】本题主要考查for循环中嵌入switch语句,以及break和continue语句的用法。(13)已知“charstring1[10]="abcde",string2[10]="xyz";”,则语句“printf("%d",strlen(strcpy(string1,string2)));”的输出结果是()。A.3 B.5 C.8 D.9【答案】A【解析】函数strcpy()主要实现字符串复制操作,包括字符串末尾的'\0'一起复制。(14)下列程序的输出结果是()。#include<stdio.h>#include<string.h>voidmain(){chars[]="\n123\\";printf("%d,%d\n",strlen(s),sizeof(s));}A.赋初值的字符串有错 B.6,7C.5,6 D.6,6【答案】C【解析】函数strlen()返回字符串的长度,函数sizeof()返回该字符串占用的内存空间长度,其中包括字符串结束标志'\0'。(15)下列程序的功能是将字符串s中所有的字符c删除,请选择填空()。#include<stdio.h>voidmain(){chars[80];inti,j;gets(s);for(i=j=0;s[i]!='\0';i++)if(s[i]!='c')____________;s[j]='\0';puts(s);}A.s[j++]=s[i] B.s[++j]=s[i]C.s[j]=s[i];j++ D.s[j]=s[i]【答案】A【解析】本题主要考查将字符串中的某个字符删除的方法。(16)下列程序的输出结果是()。#include<stdio.h>voidmain(){intb[3][3]={0,1,2,0,1,2,0,1,2},i,j,t=0;for(i=0;i<3;i++)for(j=1;j<=i;j++)t=t+b[i][b[j][j]];printf("%d\n",t);}A.3 B.4 C.1 D.9【答案】B【解析】t的值为b[1][1]、b[2][1]和b[2][2]的累加和。(17)下列程序的输出结果是()。#include<stdio.h>voidmain(){staticinta[3][3]={{1,2},{3,4},{5,6}},i,j,s=0;for(i=0;i<3;i++)for(j=0;j<=i;j++)s+=a[i][j];printf("%d\n",s);}A.18 B.19 C.20 D.21【答案】B【解析】s的值为矩阵a左下三角形元素之和。(18)下列程序的输出结果是()。#include<stdio.h>voidmain(){inti;for(i=0;i<3;i++)switch(i){case1:printf("%d",i);case2:printf("%d",i);default:printf("%d",i);}}A.011122 B.012 C.012020 D.120【答案】A【解析】本题主要考查switch语句中没有break语句的情况。2.填空题(1)若有定义“staticinta[3][4]={{1,2},{0},{4,6,8,10}};”,则初始化后a[1][2]=____________,a[2][1]=____________。【答案】06(2)在C语言中,二维数组元素在内存中的存放顺序是____________。【答案】按行序为主存放。(3)若二维数组a有m列,则在a[i][j]前的元素个数为____________。【答案】i×m+j(4)判断字符串a和b是否相等,应当使用____________。【答案】if(strcmp(a,b)==0)(5)完成下列程序,以求出矩阵a的两条对角线上的元素之和。#include<stdio.h>voidmain(){inta[3][3]={1,3,6,7,9,11,14,15,17},sum1=0,sum2=0,i,j;for(i=0;i<3;i++)for(j=0;j<3;j++)if(i==j)sum1=sum1+a[i][j];for(i=0;i<3;i++)for(____________;____________;j--)if((i+j)==2)sum2=sum2+a[i][j];printf("sum1=%d,sum2=%d\n",sum1,sum2);}【答案】j=2j>=0(6)设数组a包含10个整型元素,完成下列程序,以求出数组a中各相邻两个元素的和,并将这些和存放在数组b中,按每行3个元素的形式输出。#include<stdio.h>voidmain(){inta[10],b[10],i;for(i=0;i<10;i++)scanf("%d",&a[i]);for(____________;i<10;i++)____________for(i=1;i<10;i++){printf("%3d",b[i]);if(____________==0)printf("\n");}}【答案】i=1b[i]=a[i]+a[i-1];(i%3)(7)下面程序中的数组a包括10个整型元素,从a中第二个元素起,分别将后项减前项之差存入数组b,并按每行3个元素输出数组b。请填空。#include<stdio.h>voidmain(){inta[10],b[10],i;for(i=0;________________;i++)scanf("%d",&a[i]);for(i=1;________________;i++)b[i]=a[i]-a[i-1];for(i=1;i<10;i++){printf("%3d",b[i]);if(____________)printf("\n");}}【答案】i<10i<10i%3==0(8)下列程序可求出所有的水仙花数,请填空。提示:所谓水仙花数,是指一个三位正整数,其各位数字的立方和等于该正整数。例如,407=4×4×4+0×0×0+7×7×7,故407是一个水仙花数。#include<stdio.h>voidmain(){intx,y,z,a[8],m,i=0;printf("Thespecialnumbersare(inthearrangeof1000:\n)");for(____________;m++){x=m/100;y=____________;z=m%10;if(x*100+y*10+z==x*x*x+y*y*y+z*z*z){____________;i++;}}for(x=0;x<i;x++)printf("%6d",a[x]);}【答案】m=100;m<1000m/10-x*10a[i]=m(9)下列程序的功能是输入5个整数,找出最大数和最小数所在的位置,并把两者对调,然后输出调整后的5个数。请填空。#include<stdio.h>voidmain(){inta[5],max,min,i,j,k;for(i=0;i<5;i++)scanf("%d",&a[i]);min=a[0];for(i=1;i<5;i++)if(a[i]<min){min=a[i];____________;}max=a[0];for(i=1;i<5;i++)if(a[i]>max){max=a[i];____________;}____________;printf("\nThepositionofminis:%3d\n",k);printf("\nThepositionofmaxis:%3d\n",j);for(i=0;i<5;i++)printf("%5d",a[i]);}【答案】k=Ij=Ia[k]=ma,a[j]=min(10)下列程序的运行结果是____________。#include<stdio.h>voidmain(){inti,f[10];f[0]=f[1]=1;for(i=2;i<10;i++)f[i]=f[i-2]+f[i-1];for(i=0;i<10;i++){if(i%4==0)printf("\n");printf("%3d",f[i]);}}【答案】11235813213455(11)设数组a中的元素均为整数,下列程序是求a中偶数的个数和偶数的平均值。请填空。#include<stdio.h>voidmain(){inta[10]={1,2,3,4,5,6,7,8,9,10};intk,s,i;floatave;for(k=s=i=0;i<10;i++){if(a[i]%2!=0)____________;s+=____________;k++;}if(k!=0){ave=s/k;printf("%d,%f\n",k,ave);}}【答案】continuea[i](12)当从键盘输入18并按Enter键后,下列程序的运行结果是____________。#include<stdio.h>voidmain(){intx,y,i,a[8],j,u;scanf("%d",&x);y=x;i=0;do{u=y/2;a[i]=y%2;i++;y=u;}while(y>=1);for(j=i-1;j>=0;j--)printf("%d",a[j]);}【答案】10010(13)下列程序的功能是检查一个二维数组是否对称,即对所有i和j都有a[i][j]=a[j][i]。请填空。#include<stdio.h>voidmain(){inta[4][4]={1,2,3,4,2,2,5,6,3,5,3,7,4,6,7,4};inti,j,found=0;for(j=0;j<4;j++)for(____________;i<4;i++)if(a[j][i]!=a[i][j]){____________;break;}if(found)printf("NO");elseprintf("YES");}【答案】i=j+1found=1(14)下列程序是求矩阵a和b的乘积,结果存入矩阵c中并按矩阵形式输出。请填空。#include<stdio.h>voidmain(){inta[3][2]={2,-1,-4,0,3,1};intb[2][2]={7,-9,-8,10};inti,j,k,s,c[3][2];for(i=0;i<3;i++)for(j=0;j<2;j++){for(____________;k<2;k++)s+=____________;c[i][j]=s;}for(i=0;i<3;i++){for(j=0;j<2;j++)printf("%6d",c[i][j]);____________;}}【答案】k=s=0a[i][k]*b[k][j]printf("\n")(15)下列程序的运行结果是____________。#include<stdio.h>voidmain(){chara[2][6]={"Sun","Moon"};inti,j,len[2];for(i=0;i<2;i++){for(j=0;j<6;j++)if(a[i][j]=='\0'){len[i]=j;break;}printf("%6s:%d\n",a[i],len[i]);}}【答案】Sun:3Moon:43.编程题(1)有15个数按由大到小的顺序放在一个数组中,输入一个数,要求用折半查找法找出该数是数组中的第几个元素。若该数不在数组中,则输出“无此数!”。【参考源程序】#include<stdio.h>intmain(){intx[10],i,t,low=0,high=9,mid;for(i=0;i<10;i++)scanf("%d",&x[i]);printf("inputthesearchnumber:");scanf("%d",&t);while(low<=high){mid=(low+high)/2;if(x[mid]==t){printf("%d",mid);break;}if(x[mid]>t)low=mid+1;elsehigh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北山公园施工方案(3篇)
- 厅堂营销改进方案(3篇)
- 团建活动策划方案专升本(3篇)
- 地砖清洁施工方案(3篇)
- 复合砌块施工方案(3篇)
- 天桥防腐施工方案(3篇)
- 安宁庭院施工方案(3篇)
- 导医-应急预案(3篇)
- 2026年湖北十堰市中小学教师招聘考试试卷及答案
- 2026年黑龙江省黑河市社区工作者考试卷附答案
- 向日葵病虫害虫害图片
- 2023浙江工业大学机械原理习题答案
- 中国铁塔股份有限公司代维单位星级评定方案2017年
- 江苏如东1100MW海上风电项目陆上换流站工程环评报告
- 《安全运动促健康》课件
- 日管控、周排查、月调度记录表
- 江苏省无锡市江阴市2023年事业单位考试A类《职业能力倾向测验》临考冲刺试题含解析
- GB/T 5752-2013输送带标志
- GB/T 3146.1-2010工业芳烃及相关物料馏程的测定第1部分:蒸馏法
- GB/T 31087-2014商品煤杂物控制技术要求
- GB/T 30812-2014燃煤电厂用玻璃纤维增强塑料烟道
评论
0/150
提交评论