C教材答案13章.docx
《C教材答案13章.docx》由会员分享,可在线阅读,更多相关《C教材答案13章.docx(16页珍藏版)》请在冰豆网上搜索。
C教材答案13章
C教材习题答案(1-3章)
习题1
一.填空题
1.C程序是由(函数)构成的,一个C程序中至少包含(main函数)。
因此,(函数)是C程序的基本单位。
2.C程序注释是由(/*)和(*/)所界定的文字信息组成的。
3.函数体一般包括(声明部分)和(执行部分)。
二.判断题
1.一个C程序的执行总是从该程序的main函数开始,在main函数最后结束。
(正确)
2.main函数必须写在一个C程序的最前面。
(错误)
3.一个C程序可以包含若干的函数。
(正确)
4.C程序的注释部分可以出现在程序的任何位置,它对程序的编译和运行不起任何作用。
但是可以增加程序的可读性。
(正确)
5.C程序的注释只能是一行。
(错误)
6.C程序的注释不能是中文文字信息。
(错误)
8.可以使用TurboC来编译和连接一个C程序。
(正确)
9.可以使用TurboC来运行一个C程序。
(正确)
10.可以使用TurboC来实时调试(即动态调试)一个C程序。
(正确)
三、在c++6.0中输入如下的程序,编译、连接通过后显示结果
(1)#include“stdio.h”
voidmain()
{
printf(“*”)
printf(“***”);
printf(“*****”);
printf(“*******”);
}
答案:
*
***
*****
*******
(2)已知底和高,计算三角形的面积。
#include“stdio.h”
voidmain()
{intbottom,high,area;/*bottom表示底,high表示高,area表示面积*/
bottom=4;
high=6;
area=bottom*high/2;
printf(“theareais%d\n”,area);
}
答案:
theareais12
四、算法设计:
请试着分别用自然语言或、程序流程图和NS图描述如下算法。
1.设计一个程序在屏幕上显示如下的文字
HELLOWELCOMEYOU
2.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其个位数字立方和等于该数本身。
例如:
153是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
3.对输入的某学生成绩,如果学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
4.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
例如6=1+2+3.编程找出1000以内的所有完数。
5.一只猴子摘了N个桃子第一天吃了一半又多吃了一个,第二天又吃了余下的一半又多吃了一个,到第十天的时候发现还有一个,问共有多少个桃子。
答案:
1.#include“stdio.h”
main()
{
printf(“HELLOWELCOMEYOU”);
}
2.水仙花数产生在100到999之间,利用穷举法,对此范围之内的所有数一个个进行测试,关键是要对每一个三位数分离出它的三个数字。
具体的算法是:
n%10,得到个位,(n/10)%10,得到百位数字,n/100,得到个位数字。
再利用水仙花数的含义来判断该数是否满足条件。
#include“stdio.h”
main()
{
intn,,i,j,k;
for(n=100;n<=999;n++)
{
i=n%10;
j=(n/10)%10;
k=n/100;
if(i*i*i+j*j*j+k*k*k==n)
printf(“%d\n”,n);
}
}
3.此题用if…elseif来实现。
对于每次输入的成绩,判断它属于哪个等级。
#include"stdio.h"
main()
{
intgrade;
printf("inputgrade=");
scanf("%d",&grade);
if(grade>=90)printf("A\n");
elseif(grade>=60&&grade<=89)printf("B\n");
elseprintf("C\n");
}
4.先考虑一个整数m,如何判断它是否为完数。
从数学知识可知:
一个数m除该数本身外的所有因子都在1~m/2之间。
算法中要取得因子之和,只要在1~m/2之间找到所有的整数m的数,将其累加起来即可。
如果累加起来与m本身相等,则表示m是一个完数,可以将m输出。
#include"stdio.h"
main()
{
intm,i,s;
for(m=2;m<=1000;m++)
{s=0;
for(i=1;i<=m/2;i++)
if(m%i==0)s+=i;
if(m==s)
printf("%d\t",m);
}
printf("\n");
}
5.找出前后两天的数量关系,然后用递推法求解。
设第十天的桃子数目为t,昨天的数为y,则t=y/2-1,得到y=2t+2,这样由今日数目可以求出昨日数目,从最后一天开始,倒退到第一天,倒退的循环次数比天数少1。
所以,若已知第n天只留下一个,问第一天有多少个时,则倒退循环n-1次得到结果。
天数:
10987654321
桃子数目:
14102246941903827661534
#include"stdio.h"
main()
{
inti,t,y,n;
t=1;
printf("\ninputnumbern:
\n");
scanf("%d",&n);
for(i=1;i<=n-1;i++)
{
y=2*t+2;
t=y;
}
printf("thetotalis:
%d\n",y);
}
习题2
一、选择题
C语言基本类型包括(D)
A)整型、实型、逻辑型B)整型、实型、字符型、逻辑型
C)整型、字符型、逻辑型D)整型、实型、字符型
下列四组选项中,均不是C语言关键字的选项是A。
A)defineIFtype
B)getccharprintf
C)includecasescanf
D)whilegopow
语言的字符型数据在内存中的存储形式是(D)
A)原码B)补码C)反码D)ASCII码
C语言的整型数据在内存中的存储形式是(B)
A)原码B)补码C)反码D)ASCII码
已知字母A的ASCII码为十进制数65,且c2为字符型,则执行语句c2=‘A’+‘6’-‘3’后,c2中的值为A。
A)DB)68C)不确定的值D)C
以下叙述正确的是C。
A)在C程序中,每行只能写一条语句
B)若a是实型变量,C程序中允许赋值a=10,因此实型变量中允许存放整型数
C)在C程序中,%是只能用于整数运算的运算符
D)在C程序中,无论是整数还是实数,都能被准确无误地表示
以下叙述不正确的是D。
A)在C程序中,逗号运算符的优先级最低
B)在C程序中,MAX和max是两个不同的变量
C)若a和b类型相同,在计算了赋值表达式a=b后,b中的值将放入a中,二b中的值不变
D)当从键盘输入数据时,对于整型变量只能输入整型数值,对于实型变量只能输入实型数值
下面正确的字符常量是D。
A)“c”B)‘\\’’C)‘’D)‘K’
下列四组选项中,均是合法转义字符的选项是A。
A)‘\”’‘\\’‘\n’
B)‘\’‘\017’‘\”’
C)‘\018’‘\f’‘xab’
D)‘\\0’‘\101’‘xlf’
下列四组选项中,均是不合法的用户标识符的选项是B。
A)WP_0do
B)b-agotoint
C)floatla0_A
D)-123abcTEMP
若x、i、j、k都是int型变量,则计算下面表达式后,x的值为C。
x=(i=4,j=16,k=32)
A)4B)16C)32D)52
设有说明:
charw;intx;floaty;doublez;则表达式w*x+z-y值的数据类型为D。
A)floatB)charC)intD)double
设C语言中,一个int型数据在内存中占2个字节,则unsignedint型数据的取值范围为C。
A)0~255B)0~32767C)0~65535D)0~2147483647
若运行时给变量x输入12,则以下程序的运行结果是。
(有错误,应为0)
main()
{intx,y;
scanf(“%d”,&x);
y=x>12?
x+10:
x-12;
printf(“%d\n”,y);
}
A)4B)3C)2D)1
若希望当A的值为奇数时,表达式的值为“真”,A的值为偶数时,表达式的值为“假”。
则以下不能满足要求的表达式是C。
A)A%2==1B)!
(A%2==0)C)!
(A%2)D)A%2
设有:
inta=1,b=2,c=3,d=4,m=2,n=2;执行(m=a>b)&&(n=c>d)后n的值为B。
A)1B)2C)3D)4
以下程序的运行结果是B。
main()
{inta,b,d=241;
a=d/100%9;
b=(-1)&&(-1);
printf(“%d,%d”,a,b);
}
A)6,1B)2,1C)6,0D)2,0
已知intx=10,y=20,z=30;以下语句执行后x,y,z的值是B。
if(x>y)z=x;x=y;y=z;
A)x=10,y=20,z=30B)x=20,y=30,z=30
C)x=20,y=30,z=10D)x=20,y=30,z=20
以下程序的运行结果是C。
main()
{intm=5;
if(m++>5)
printf(“%d\n”,m);
else;
printf(“%d\n”,m--);
}
A)4B)5C)6D)7
判断char型变量ch是否为大写字母的正确表达式是C。
A)‘A’<=ch<=‘Z’B)(ch>=‘A’)&(ch<=‘Z’)
C)(ch>=‘A’)&&(ch<=‘Z’)D)(‘A’<=ch)AND(‘Z’>=ch)
逻辑运算符两侧运算对象的数据类型D。
A)只能是0和1B)只能是0或非0正数
C)只能是整型或字符型数据D)可以是任何类型的数据
sizeof(float)是B。
A)一个双精度型表达式B)一个整型表达式
C)一种函数表达式D)一个不合法的表达式
设x、y、z和k都是int型变量,则执行表达式:
x=(y=4,z=16,k=32)后,x的值为C
A)4B)16C)32D)52
设有如下的变量定义:
inti=8,k,a,b;
unsignedlongw=5;
doublex=1,42,y=5.2;
则以下符合C语言语法的表达式是A
A)a+=a-=(b=4)*(a=3)
B)x%(-3);
C)a=a*3=2
D)y=float(i)
假定有以下变量定义:
intk=7,x=12;则能使值为3的表达式是D
A)x%=(k%=5)B)x%=(k-k%5)C)x%=k-k%5D)(x%=k)-(k%=5)
设x和y均为int型变量,则以下语句:
x+=y,y=x-y;x-=y;的功能是D
A)把x和y按从大到小排列
B)把x和y按从小到大排列
C)无确定结果
D)交换x和y中的值
以下程序的输出结果是D
main()
{inta=12,b=12;
printf("%d,%d\n",--a,++b);
}
A)1010 B)1212 C)1110 D)1113
在C语言提供的合法的关键字是D
A)swicth B)cher C)CaseD)default
若已定义x和y为double类型,则表达式:
x=1,y=x+3/2的值是C
A)1 B)2 C)2.0 D)2.5
C语言提供的合法的数据类型关键字是B
A)Double B)short C)integerD)Char
在C语言中,合法的长整型常数是A
A)0L
B)4962710
C)0.054838743
D)2.1869e10
二、填空题
scanf函数的格式化字符串中,格式说明与输出项的个数必须相同。
如果格式说明的个数小于输出项的个数,则多余的输出项____忽略___。
如果格式说明的个数多于输出项的个数,则多余多余的格式将输出______。
以下程序的运行结果是__52.00_____。
#include
voidmain()
{inti=5,j=9;
floatx=2.3,y=45.;
printf(“%8.2f\n”,i%(int)(x+y)*j/2/3+y);
}
若有定义:
charc=‘\010’;则变量c中包含的字符个数为___1个___。
若x和n均是int型变量,且x和n的初值均为5,则计算表达式x+=n++后x的值为___10___,n的值为____6__。
若a是int型变量,则计算下面表达式A=25/3%3后a的值为__2____。
若x和a均是int型变量,则计算表达式x=(a=4,6*2)后的x值为_12_____,计算表达式x=a=4,6*2后的x值为__4____。
若a是int型变量,则表达式(a=4*5,a*2),a+6的值为__26____。
若s是int型变量,且s=6,则表达式s%2+(s+1)%2的值为__1____。
在VC++中,一个int型数据在内存中占4个字节,则int型数据的取值范围为__-2147483648~2147483647___。
若有以下定义intm=5,y=2;,则计算表达式y+=y-=m*=y后的y值是___-16___。
设有定义语句:
inti=3;floatf=456.789;则表达式1.2+i+’A’+f值的数据类型是__double____。
三、思考以下问题
1.几种基本数据类型各占几个字节?
2.标识符分哪几类,各有什么用途?
3.为什么要定义符号常量?
4.变量名定义有什么规则?
5.C语言有哪些几类运算符号,又有哪几类表达式?
习题3
一、选择题
能正确表示a和b同时为正或同时为负的逻辑表达式是D
A)(a>=0||b>=0)&&(a<0||b<0)
B)(a>=0&&b>=0)&&(a<0&&b<0)
C)(a+b>0&&a+b<=0)
D)a*b>0
以下条件表达式中能完全等价于条件表达式x的是(B)。
A)(x==0)B)(x!
=0)
C)(x==1)D)(x!
=1)
设ch是char型变量,值为'A',则表达式ch=(ch>='A'&&ch<='Z')?
ch+32:
ch的值是:
B
A)ZB)a
C)zD)A
设a,b和c都是int型变量,且a=3,b=4,c=5,则下面的表达式中,值为0的表达式是D
A)'a'&&'b'B)a<=b
C)a||b+c&&b-cD)!
((a
c||1)
设a=5,b=6,c=5,d=8,m=2,n=2,执行(m=a>b)&&(n=c>d)后n的值为B
A)1B)2
C)3D)0
设x、y、z、t均为int型变量,则执行以下语句后,t的值为C
x=y=z=1;
t=++x||++y&&++z;
A)不定值B)4
C)1D)0
已知intx=10,y=20,z=30,则执行
if(x>y)
z=x;x=y;y=z;
语句后,x、y、z的值是(B)。
A)x=10,y=20,z=30B)x=20,y=30,z=30
C)x=20,y=30,z=10D)x=20,y=30,z=20
设a为整型变量,不能正确表达数学关系10A
A)10C)a>10&&a<15D)!
(a<=10)&&!
(a>=15)
语句:
printf("%d",(a=2)&&(b=-2));的输出结果是D
A)无输出B)结果不确定
C)-1D)1
执行下列程序片段时输出结果是。
C
intx=13,y=5;
printf(“%d”,x%=(y/=2));
A)3B)2C)1D)0
下列程序的输出结果是。
B
main()
{intx=023;
printf(“%d”,--x);
}
A)17B)18C)23D)24
已有如下定义和输入语句,若要求a1,a2,c1,c2的值分别为10,20,A和B,当从第一列开始输入数据时,正确的输入方式是。
D
inta1,a2;charc1,c2;
scanf(“%d%d”,&a1,&a2);
scanf(“%c%c”,&c1,&c2);
A)1020AB↙B)1020↙
AB↙
C)1020AB↙D)1020AB↙
执行下列程序片段时输出结果是。
B
intx=5,y;
y=2+(x+=x++,x+8,++x);
printf(“%d”,y);
A)13B)14C)15D)16
有输入语句:
scanf(“a=%d,b=%d,c=%d”,&a,&b,&c);为使变量a的值为1,b的值为3,c的值为2,则正确的数据输入方式是。
D
A)132↙B)1,3,2↙
C)a=1b=3c=2↙D)a=1,b=3,c=2↙
二、读程序或程序段,写出结果
1.charc1=’a’,c2=’c’;
printf(“%d,%c”,c2-c1,c2-‘a’+’C’);
结果:
2,E
2.#include“stdio.h”
main()
{
charch1,ch2;
ch1=’A’+’5-‘3’;
ch2=’A’+’6’-‘3’;
printf(“%d,%c”,ch1,ch2);
}
结果:
-87,D
3.#include“stdio.h”
main()
{intx;floaty;
scanf(“%3d%f”,&x,&y);
printf(“x=%d,y=%f”,x,y);
}
当执行时从第一列输入数据1234空格678回车,
则x和y的值分别是多少?
结果:
x=123,y=4.000000
4. main()
{inta=12345;
floatb=-198.345,c=6.5;
printf(“a=%4d,b=%-10.2e,c=%6.2f\n”,a,b,c);
}
结果:
a=12345,b=-1.98e+002,c=6.50
5. main()
{intx=-2345;
floaty=-12.3;
printf(“%6d,%06.2f”,x,y);
}
三、填空题
1.C语言的程序是由一个或者多个文件组成的,每个文件又是由一个或多个函数组成的。
2.C语句可以分为表达式语句,函数调用语句,复合语句,空语句和控制语句
等5种类型。
3.C控制语句有3种。
4.一个表达式要构成一个C语句,必须加分号。
5.复合语句是用一对大括号界定的语句块。
6.printf函数和scanf函数的格式说明都使用#字符开始。
7.scanf处理输入数据时,遇到下列情况时该数据认为结束:
(1)遇空格、“回车”、“跳格”键。
(2)遇宽度结束,(3)遇非法输入。
8.已有inti,j;floatx;为将-10赋给i,12赋给j,410.34赋给x;则对应以下scanf函数调用语句的数据输入形式是。
9.C语言本身不提供输入输出语句,其输入输出操作是由函数来实现的。
10.一般地,调用标准字符或格式输入输出库函数时,文件开头应有以下预编译命令:
#include 。
四、程序设计
1.编写一个程序,从键盘接受3个整数,作为三角形的三边,求出三角形的面积
答案:
#include
#include
main()
{
inta,b,c;
doublep,S;
printf("请输入三边长度(如3,4,5):
");
scanf("%d,%d,%d",&a,&b,&c);
if(a+b<=c||b+c<=a||a+c<=b)
printf("您所输入的三边不构成三角形!
");
else
{
p=(a+b+c)/2;
S=sqrt(p*(p-a)*(p-b)*(p-c));
printf("此三角形面积为:
%f",S);
}
}
2.编写一个程序,输入华氏温度,输出相应的摄氏温度。
转换公式是:
c=(f-32)/1.8,c表示摄氏温度,f表示华氏温度。
答案:
#include
voidmain()
{
doublec,f;
printf("请输入一个华氏温度:
");
scanf("%lf",&f);
c=(f-32.0)/1.8;
printf("摄氏温度为:
%5.2f\n",c);
}
3.输入秒数,将它转换,用小时、分钟、秒来表示。
例如输入7278秒,则输出:
2小时1分18秒。
答案:
#include
main()
{
ints,f,m;
m=7278;
s=m/3600;
f=m%3600/60;
m=m%3600%60;
printf("%d:
%d:
%d",s,f,m);
}