失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > C语言程序设计(第五版)谭浩强著 第4章习题答案

C语言程序设计(第五版)谭浩强著 第4章习题答案

时间:2024-02-28 17:07:56

相关推荐

C语言程序设计(第五版)谭浩强著 第4章习题答案

1.

算数运算:

加、减、乘、除、取余等运算的统称

关系运算:

关系运算就是“比较运算”,将两个数值进行比较,判断其比较的结果是否符合给定的条件。

逻辑运算:

与&&,或||,非!

2.

C语言表示真假:

C语言编译系统在表示逻辑运算结果时,用数值1代表“真”,用0代表“假"。

系统判断一个量的真假:

在判断一个量是否为"真"时,以0代表"假",以非0代表"真"。

3.

(1)值为0。解析:a+b>c为真,b==c为假,一真一假逻辑与为假。

(2)值为1。解析:a=3,非0,为真;b+c=9,非0,为真;b-c=-1,非0,为真。三真逻辑与为真。

(3)值为1。解析:(a>b)为假,!(a>b)为真;(!c||1)为真,真真逻辑与为真。

(4)值为0。解析:0为假,&&逻辑运算,有一个假,即为假。

(5)值为1。解析:略

注:优先级关系:!(非)>算术运算符>关系运算符>&&、||>赋值运算符

4.

思路:

先将a与b比较,若a>=b,将a与c比较,max=(a,c);若a<b,将b与c比较,max=(b,c)。

代码:

#include<stdio.h>int main() {int a, b, c,max;scanf_s("%d%d%d", &a, &b, &c);if (a >= b) {if (a >= c) max = a;else max = c;}else {if (b >= c) max = b;else max = c;}printf("max=%d", max);return 0;}

运行结果:

5.

思路:

首先判断输入的数字是否是于1000的正数,若不是,则重新输入;然后使用sqrt函数对数据进行取平方根;最后调整输出格式。

代码:

#include<stdio.h>#include<math.h>int main() {float number,final;printf("请输入一个小于1000的正数:");scanf_s("%f", &number);while (number<0||number>1000) {printf("数据错误,请重新输入:");scanf_s("%f", &number);}final = sqrt(number);printf("%5.2f的平方根为%.0f", number,final);return 0;}

运行结果:

6.

思路:

读入x,使用if...else if...else...语句判断x的范围,据此,输入y。

代码:

#include<stdio.h>int main() {float x, y;printf("请输入x的值:");scanf_s("%f", &x);if (x < 1)y = x;else if (x>=1 && x < 10)y = 2 * x - 1;elsey = 3 * x - 11;printf("x=%f\ty=%f", x, y);return 0;}

运行结果:

7.

(1)错误。 else总是和距离它最近的尚未匹配的一个if匹配。

if(x!=0){if(x>0)y=1;elsey=0;}

运行结果:

x<0时——y=0;

x=0时——y=-1;

x>0时——y=1;

(2)错误。

if(x>=0){if(x>0)y=1;elsey=-1;}

运行结果:

x<0时——y=0;

x=0时——y=-1;

x>0时——y=1;

8.

思路:

输入成绩,根据不同的区间段,输出等级即可。

代码:

#include<stdio.h>int main() {int score;printf("请输入您的成绩:");scanf_s("%d", &score);if(score<60)printf("您的等级为“E”\n");else if(score>=60&&score<=69)printf("您的等级为“D”\n");else if (score >= 70 && score <= 79)printf("您的等级为“C”\n");else if (score >= 80 && score <= 89)printf("您的等级为“B”\n");else if (score >= 90 && score <= 100)printf("您的等级为“A”\n");return 0;}

运行结果:

9.

思路:见代码注释

代码:

#include<stdio.h>#include<math.h>int main() {int n;scanf_s("%d", &n);int first, second, third, four, five;int i = 1;int number = n;//通过i记录数字的位数while (number / 10 != 0) {i++;number /= 10; //}printf("这个数是%d位数\n", i);//顺序、逆序输出first = n / 10000; //得到万位second = n % 10000 / 1000; //得到千位third = n % 1000 / 100; //得到百位four = n % 100 / 10; //得到十位five = n % 10; //得到个位if (first != 0) { //如果第5位数字不为0printf("分别输出每一位数字:%d %d %d %d %d\n", first, second, third, four, five);printf("逆序输出该数字:%d%d%d%d%d", five, four, third, second, first);}else if (second != 0) { //第5位数字为0,但第44位不为0printf("分别输出每一位数字:%d %d %d %d\n", second, third, four, five);printf("逆序输出该数字:%d%d%d%d", five, four, third, second);}else if (third != 0) { //第3位数字不为0printf("分别输出每一位数字:%d %d %d\n", third, four, five);printf("逆序输出该数字:%d%d%d", five, four, third);}else if (four != 0) {printf("分别输出每一位数字:%d %d\n", four, five);printf("逆序输出该数字:%d%d", five, four);}else{printf("分别输出每一位数字:%d\n",n);printf("逆序输出该数字:%d", n);}return 0;}

运行结果:

10.

(1)利用if语句实现

思路:

仔细分析每段区间。eg:400000<I<=600000时,奖金由以下几部分构成:

0~100000 100000*10%=10000

100000~200000: 100000*7.5%=7500

200000~400000: 200000*5%=10000

400000~600000: (I-400000)*3%

故bonus=10000+7500+10000+(I-400000)*3%=27500+(I-400000)*0.03

代码:

#include<stdio.h>int main() {float I, bonus;printf("请输入当月利润:");scanf_s("%f", &I);if (I <= 100000) {bonus = I * 0.1;}else if (I > 100000 && I <= 200000) {bonus = 10000 + (I - 100000) * 0.075;}else if (I > 200000 && I <= 400000) {bonus = 10000 + 7500 + (I - 200000) * 0.05;}else if (I > 400000 && I <= 600000) {bonus = 10000 + 7500 + 10000 + (I - 400000) * 0.03;}else if (I > 600000 && I <= 1000000) {bonus = 10000 + 7500 + 10000 + 6000 + (I - 600000) * 0.015;}else {bonus = 10000 + 7500 + 10000 + 6000 + 6000 + (I - 1000000) * 0.01;}printf("应发奖金:%5.2f元", bonus);return 0;}

运行结果:

11.

思路:

第一步:a分别跟b、c、d比较,若a较大,则互换两者的值,最终变量a中存放最小的数。

第二步:b分别跟c、d比较,若b较大,则互换两者的值,最终变量b中存放第二小的数。

第三步:c跟d比较,所c较大,则互换两者的值,最终变量c存放第三小的数,变量d存放最大的数。

代码:

#include<stdio.h>int main() {int a, b, c, d, t;printf("请依次输入4个整数:");scanf_s("%d%d%d%d", &a, &b, &c, &d);if (a > b) {t = a;a = b;b = t;} //若x>b,交换x、y的值;下同if (a > c) {t = a;a = c;c = t;}if (a > d) {t = a;a = d;d = t;}if (b > c) {t = b;b = c;c = t;}if (b > d) {t = b;b = d;d = t;}if (c > d) {t = c;c = d;d = t;}printf("%d<%d<%d<%d", a, b, c, d);return 0;}

运行结果:

12.

思路:

分别判断点(x,y)到四个点的距离,若有一个小于1,则输出给高度为10,否则为0。

代码:

#include<stdio.h>#include<math.h>int main() {int leap; //若在塔内,leap为1,否则leap为0double x, y;printf("请输入坐标:");scanf_s("(%lf,%lf)", &x, &y);if (sqrt((x - 2) * (x - 2) + (y - 2) * (y - 2)) <= 1)leap = 1;else if (sqrt((x + 2) * (x + 2) + (y - 2) * (y - 2)) <= 1)leap = 1;else if (sqrt((x + 2) * (x + 2) + (y + 2) * (y + 2)) <= 1)leap = 1;else if (sqrt((x - 2) * (x - 2) + (y + 2) * (y + 2)) <= 1)leap = 1;elseleap = 0;if (leap == 1) {printf("该点建筑高度为10m\n");}else {printf("该点建筑高度为0m\n");}}

运行结果:

欢迎探讨交流,点赞、评论、收藏。

持续更新中.......

如果觉得《C语言程序设计(第五版)谭浩强著 第4章习题答案》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。