习题答案.docx
《习题答案.docx》由会员分享,可在线阅读,更多相关《习题答案.docx(51页珍藏版)》请在冰点文库上搜索。
![习题答案.docx](https://file1.bingdoc.com/fileroot1/2023-5/19/b48fec08-4b90-4c34-9ac1-4b2530742da3/b48fec08-4b90-4c34-9ac1-4b2530742da31.gif)
习题答案
第1章习题答案
一、选择题
1.B 2.D 3.B 4.C 5.A 6.C 7.D 8.C 9.A 10.C 11.B 12.B 13.C 14.B 15.D 16.B 17.D 18.B 19.(略) 20.(略)
二﹑填空题
1.变量
2.区分、不同
3.退格、换行、横向跳格、双引号
4.双精度、长整型、字符、字符串、八进制整型、转义字符
注:
书中题目有错,08应改为07,这样才能表示八进制。
5.main
6.顺序、选择、循环
三、判断题
1.错 2.对 3.对 4.错 5.错 6.错
7.错 8.对 9.对 10.对 11.对 12.对
四、问答题
1.写出下面表达式的值
(1)36
(2)5,4 (3)9,9,27(注:
所使用的系统不同,结果也不同,此结果为TC2.0下的结果)
2.下列表达式是否正确?
若正确,表达式的值是什么?
21/221/2.021.0/221%221.0%221%2.018%1515%183%15
1010.50000010.5000001错误 错误 3 153
3.
(1)C语言程序是由文件组成
(2)每个C程序文件由函数组成
(3)C程序从main函数开始执行
(4)每个函数由函数说明部分和函数体组成。
4.
在TC的主菜单中选择Run菜单,选择下拉菜单中的Run命令(或直接按“Ctrl-F9”),就开始进行源程序的编译、连接并运行。
如没有严重的语法错误,系统自动生成对应的目标文件和可执行文件,并以扩展名.OBJ和.EXE存盘。
5.
分别为“.C”、“.OBJ”和“.EXE”。
6.
(1)程序由三种基本结构组合而成
结构化程序设计时,不论程序大小、简单还是复杂,规定程序主要由三种基本结构组成,它们分别是顺序结构、选择结构和循环结构。
可以证明,任何一个复杂的问题的程序设计都可以由这三种基本结构组成。
而且要求每一个模块有以下特点:
只有一个入们;
只有一个出口;
程序结构中没有死循环。
(2)模块化设计
较复杂和大型程序应按功能分割成一些功能模块,并将这些模块按层次关系进行组织
(3)程序设计采用自顶向下、逐步细化的原则
7.
略
8.
有“解释方式”和“编译方式”两种
五、编程题
编写程序,在屏幕上输出如下信息:
===================
=Iamastudent.=
===================
main()
{
printf("===================\n");
printf("=Iamastudent.=\n");
printf("===================\n");
}
第2章习题答案
一、选择题
1.C 2.C 3.D 4.A 5.D 6.C 7.A 8.C 9.C 10.B 11.B 12.A 13.C 14.D 15.D
二﹑填空题
1.分号 花括号或{}
2.换行
3.不做任何操作
4.%d %c %s
5.1
6.70 38 8
7.%09.2f %0.2或%4.2f
8.是
9。
-1 3 1
10.getchar()函数将用户放入的字符回显屏幕上,放入结束后,按回车键才能响应 、getch()函数将用户放入的字符不回显屏幕上,放入结束后,不需按回车键立即响应
三、判断题
1.错 2.对 3.对 4.对 5.对 6.对
7.错 8.对 9.错 10.错
四、问答题
3.写出下列程序的运行结果
(1)*2000――*\n
(2)X=%d,Y=%d
(3)X=100,Y=-100
4.程序改错
(1)把\n去掉
(2)把3%d改为%f(3)把x,y,z改为%x,%y,%z(4)s=x*y;v=s*c(5)(s=%f””v=%d\n”,s,v)
5.a=3,b=5
c=-3,d=12.102
input e=Af=8
五、编程题
1.编写程序,把560分钟换算成小时和秒。
#include
main()
{ints;
floath;
h=560/60.0;
s=560*60;
printf("560分钟换算成小时是:
%f,换算成秒是:
%d.\n",h,s);
}
2.键盘输入一个整数的值,求它的平方、平方根,输出结果时要求有文字提示,并取小数点后二位小数(求平方根函数为sqrt(x),包含在中)。
#include
#include
main()
{intx,y;
floatz;
printf("输入一个整数:
");
scanf("%d",&x);
y=x*x;
z=sqrt(x);
printf("%d的平方是%d,平方根是%.2f.\n",x,y,z);
}
3.已知一个圆球的半径,求该圆球的体积。
#include
#definePI3.14
main()
{floatr,v;
printf("输入圆球的半径:
");
scanf("%f",&r);
v=PI*r*r*r*4/3;
printf("圆球的体积:
%f.\n",v);
}
4.键盘输入若干个学生3门课程的成绩,计算每个学生的总分和平均成绩。
要求利用goto编写无穷循环程序。
#include
main()
{floatx1,x2,x3,s,avg;
printf("输入学生3门课程的成绩:
");
scanf("%f,%f,%f",&r1,&x2,&x3);
s=x1+x2+x3;
avg=s/3;
printf("总分:
%f,平均成绩:
%f.\n",s,avg);
}
5.编程进行摄氏温度和华氏温度相互转换,摄氏温度和华氏温度之间的转换公式如下:
摄氏温度=5/9(华氏温度-32),即C=(F-32)*5/9。
#include
main()
{floatf,c;
printf("输入华氏温度:
");
scanf("%f",&f);
c=(f-32)*5/9;
printf("摄氏温度为:
%f.\n",c);
}
6.从键盘输入直角三角形的斜边c与一条直角边a的长,计算并输出另一条直角边b的长。
#include
#include
main()
{floata,b,c;
printf("输入直角三角形的斜边c与一条直角边a的长:
");
scanf("%f,%f",&c,&a);
b=sqrt(c*c-a*a);
printf("另一条直角边b的长:
%f.\n",b);
}
7.编写程序,输出下面图形。
*
***
*****
*******
*****
***
*
#include
main()
{
printf("*\n");
printf("***\n");
printf("*****\n");
printf("*******\n");
printf("*****\n");
printf("***\n");
printf("*\n");
}
第3章习题答案
一、选择题
1.A 2.B 3.B 4.B 5.C 6.D 7.B 8.B 9.C 10.D 11.A 12.C 13.D 14.B 15.A 16.D 17B 18。
C 19。
C 20。
D 21。
C 22。
D
注:
教材中21题有错,if语句后丢失分号。
二﹑填空题
1.1 0
2.X>2&&X<10 X<10||X>20
3.0 0 1 1
4.退出SWITCH语句 当所有CASE分条件都不满足,则执行其后语句
5.前面最近的
三、判断题
1.错 2.错 3.错 4.对 5.错 6.对
7.对 8.对 9.对 10.对
四、问答题
1、写出下面逻辑表达式的值
(1)真1
(2)真1(3)假0(4)(A)真1(B)真1(C)假0(D)真1
4、阅读程序,写出程序运行结果
ABother
五、编程题
1.对一批货物征收税金。
价格在1万元以上的货物征税5%,在5000元以上,1万元以下的货物征税3%,在1000元以上,5000千元以下的货物征税2%,1000元以下的货物征税1%。
编一个程序,输入货物价格,输出相应的税金。
#include
intmain(void)
{intn;
floatx,y,p;
printf("输入货物价格:
");
scanf("%f",&x);
if(x>=10000)p=0.05;
elseif(x>=5000)p=0.03;
elseif(x>=1000)p=0.02;
elsep=0.01;
y=x*p;
printf("应缴税金:
%f:
",y);
}
2.输入实型变量x和y,若x>y则输出x-y的值,否则输出y-x的值。
main()
{floatx,y,z;
printf("输入两个数x,y:
");
scanf("%f,%f",&x,&y);
if(x>y)z=x-y;
elsez=y-x;
printf("结果:
%f\n",z);
}
3.用if和switch语句分别编写程序,实现从键盘输入数字1、2、3或4中某个数时,输出excellent、good、pass或fail中的某一个,输入其他字符时输出error。
#include
intmain(void)
{intx;
printf("输入1~4整数:
");
scanf("%d",&x);
if(x==1)printf("excellent");
elseif(x==2)printf("good");
elseif(x==3)printf("pass");
elseif(x==4)printf("fail");
elseprintf("error");
}
#include
intmain(void)
{intx;
printf("输入1~4整数:
");
scanf("%d",&x);
switch(x)
{
csae1:
printf("excellent");break;
csae2:
printf("good");break;
csae3:
printf("pass");break;
csae4:
printf("fail");break;
default:
printf("error");
}
}
4.键盘输入一个字符,如果是字母,则将其ASCII值加5,使其在字母字符“a~z”之间变换并输出。
例如,字母“a”变成“f",字母“z”变成字母“e”;如果是数字,则将其ASCII值减2,使其在数值字符“0~9”之间变换并输出。
例如,字符“9”变成字符“7”,字符“1”变成字符“9”。
#include
intmain(void)
{charc;
printf("输入一字符:
");
scanf("%c",&c);
if(c>='A'&&c<='Z')
{c=c+5;
if(c>'z')c=c-26;
}
if(c>='a'&&c<='z')
{c=c+5;
if(c>'z')c=c-26;
}
if(c>='0'&&c<='9')
{c=c-2;
if(c<'0')c=c+10
}
printf("结果:
%c\n",c);
}
5.己知银行整存整取存款不同期限的年息利率分别为:
1.98% 期限一年
2.15% 期限二年
年息利率2.25% 期限三年
2.45% 期限五年
2.65% 期限八年
编写程序,输入存钱的本金和期限,求到期时能从银行得到的利息与本金的合计。
#include
#include
intmain(void)
{intn;
floatx,y,p;
printf("输入存钱的本金和期限:
");
scanf("%f,%d",&x,&n);
switch(n)
{case1:
p=0.0198;break;
case2:
p=0.0215;break;
case3:
p=0.0225;break;
case5:
p=0.0245;break;
case8:
p=0.0265;break;
}
y=x*power((1+p),n);
printf("到期利息与本金的和:
%f:
",y);
}
第4章习题答案
一、选择题
1.A 2.D 3.B 4.C 5.D 6.C 7.C 8.A 9.C 10.A 11.B 12.D 13.A 14.D 15.D 16.A
二﹑填空题
1.当型 直到型 WHILE FOR DO_WHILE
2.直到 先循环后判断
3.当 先判断后循环
4.循环赋初值 循环控制条件 循环变量埴值
5.
6.逗号表达式
7.不是
8.一个循环中又包含一个完整的循环
9.每一层循环次数的乘积
10.退出当前循环(跳到当前循环结构的后续语句) 结束本次循环(跳过本次循环结束前的语句)
三、判断题
1.错 2.对 3.对 4.错 5.对 6.对
7.错 8.对 9.对 10.错 11.错
四、写出下列程序运行结果
1.2 5 8 11 14
2.1 3 7 15 31 63
3.*
**
***
五、编程题
1.编程计算1至50中是7的倍数的数值之和。
main()
{ints=0,i;
for(i=0;i<50;i++);
if(i%7==0)
s=s+i;
printf("1至50中是7的倍数的数值之和是:
%d\n",s);
}
2.从键盘输入的字符中统计数字字符的个数,用换行符结束循环。
#include
intmain(void)
{charc;
intn=0;
printf("输入正文文本,按回车结束输入:
\n");
while((c=getchar())!
=10)
if(c>=48&&c<=57)n++;
printf("输入的文本中数字字符的个数:
%d\n",n);
}
3.输入一批正整数,输出其中的最大值和最小值,输入数字“0”结束循环。
#include
intmain(void)
{intx,max,min,i=0;
printf("输入正整数,输入“0”束输入:
\n");
while
(1)
{scanf("%d",&x);
if(x==0)break;
if(i==0){max=x;min=x;}
if(x>max)max=x;
if(xi++;
}
printf("其中的最大值=%d;最小值=%d\n",max,min);
}
4.输入一个整数,将其数值按小于10,10-99,100-999,1000以上分类并显示。
例如:
输入358时,显示358is100to999。
#include
intmain(void)
{intx,;
printf("输入一个正整数:
");
scanf("%d",&x);
if(x<10)printf("%dis<10\n",x);
elseif(x<100)printf("%dis10to99\n",x);
elseif(x<1000)printf("%dis100to999\n",x);
elseprintf("%dis>=1000\n",x);
}
5.编程实现屏幕输出“九九乘法表”,要求以三角形形式输出。
(提示:
外循环变量i从1开始到9,内循环变量j从1开始到i)。
#include
intmain(void)
{inti,j;
for(i=1;i<=9;i++)
{for(j=1;j<=i;j++)
printf("%1d*%1d=%2d\t",i,j,i*j);
printf("\n");
}
}
6.求3到M之间的全部素数,M为任意整数。
main()
{intm,i;
scanf("%d",&m);
for(i=3;i<=m;i++);
for(j=2;i%j&&j
if(j==i)
printf("%d",i);
}
7.用公式e=1+1/1!
+1/2!
+1/3!
+……+1/n!
求e的近似值,精度为1/n!
<10-6。
main()
{
inti=1;
floatp,t,e;
t=1,e=0;p=1;
while(t>=1e-6)
{e=e+t;
p=p*i;
i++;
t=1/p;
}
printf("e=%10.6f\n",e);
}
8.从键盘输入一位整数,当输入数字0叶程序结束;当输入1~7时,显示下面对应的英文星期名称缩写。
1:
MON 2:
TUE 3:
WED 4:
THU 5:
FRI 6:
SAT 7:
SUN
#include
intmain(void)
{intx,max,min,i=0;
printf("输入1~7整数,输入“0”束:
\n");
while
(1)
{scanf("%d",&x);
if(x==0)break;
switch(x)
{
csae1:
printf("MON");break;
csae2:
printf("THU");break;
csae3:
printf("WED");break;
csae4:
printf("THU");break;
csae5:
printf("FRI");break;
csae6:
printf("SAT");break;
csae7:
printf("SUN");break;
}
}
}
第5章习题答案
一、选择题
1.C 2.B 3.D 4.C 5C 6.D 7.D 8.C 9.D 10.C 11.C 12.C 13.C 14.D 15.B 16.C 17.A 18.A 19.B 20.C
二﹑填空题
1.相同数据类型数据 行顺序 行顺序
2.数据名
3.行 列
4.随机值 0
5.‘\0’
6.9
7.字符 和字符串
8.要STRING.H
9.首地址
三、判断题
1.错 2.错 3.对 4.对 5.对 6.对
7.错 8.对 9.对 10.错
四、问答题
1.什么是数组,为什么要引入数组?
数组是一种自定义数据类型,它是相同数据类型的数据有序集合,数组中的分量称为数组元素,对数组元素的操作处理通过数组下标进行。
正是因为数组元素具有序号这个特性,就可以解决许多基本数据类型无法解决的一些实际问题。
2.数组的初始化有哪几种方式?
1)定义数组时如果没有进行初始化,则数组元素的值为随机值。
但如果在定义数组时规定其存储类别为static或extern,则编译系统自动将没有初始化的数组元素赋默认初值为0。
2)在定义数组时对所有数组元素初始化。
3)可以只对数组中的部分元素初始化。
3.a[3],a[2+3],a[9-9],a[3/1.0],a[3.4]
4.179175
5.i=10+k;i>=j;i--
a[i+1]=a[i]
五、编程题
1.用冒泡排序法对输入的20个数进行降序排序并存入数组中。
然后输入一个数,查找该数是否在数组中存在,若存在,打印出该数在数组中对应的下标值。
#defineN 20
main()
{inta[N],i,j,t,x;
printf("\n请输入%d个待排序的数据,每个数据都以回车结束:
\n",N);
for(i=0;iscanf("%d",&a[i]);
for(i=0;ifor(j=N-1;j>i;j--)
if(a[j-1]printf("\n降序排序后数据:
\n");
for(i=0;iprintf("\n输入要查找的数:
");
scanf("%d",&x);
for(i=0;iif(a[i]==x)
{printf("\n要查找的数在数组中的下标是:
%d\n",i);
break;
}
if(i>=N)
printf("\n要查找的数不在数组中\n");
}
2.求一个3×3矩阵对角线元素之和。
#include
main()
{intnum[3][3]={{1,2,3},{4,5,6},{7,8,9}};
inti,s=0;
for(i=O;i<3;i++)
s=s+num[i][i];
printf("对角线和:
%d\n",s);
}
3.编写程序,打印杨辉三角形(要求打印10行)。
1
11
121
1331
14641
15101051
……
#defineN11
main()
{inta[N][N]={0,0},i,j;
for(i=1;i{a[i][i]=1;
a[i][1]=1;
}
for(i=3;ifor(j=2;j<=i-1;j++)
a[i][j]=a[i-1][j-1]+a[i-1][j];
for(i=1;i{for(j=1;j<=i;j++)
printf("%d\t",a[i][j]);
printf("\n");
}
}
4.将一个数组中的元素逆序存放,如原来数组的元素是23,59,26,48,14。
要求改为:
14,48,26,59,23。
#defin