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;
    else
        y = 3 * x - 11;
    printf("x=%f\ty=%f", x, y);
    return 0;
}

运行结果:

7.

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

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

运行结果:

x<0时——y=0;

x=0时——y=-1;

x>0时——y=1;

(2)错误。

if(x>=0){
    if(x>0)
        y=1;
    else
        y=-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位数字不为0
        printf("分别输出每一位数字:%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位不为0
        printf("分别输出每一位数字:%d %d %d %d\n", second, third, four, five);
        printf("逆序输出该数字:%d%d%d%d", five, four, third, second);
    }
    else if (third != 0) {    //第3位数字不为0
        printf("分别输出每一位数字:%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为0
    double 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;
    else
        leap = 0;
    if (leap == 1) {
        printf("该点建筑高度为10m\n");
    }
    else {
        printf("该点建筑高度为0m\n");
    }
}

运行结果:


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

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

  • 5
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
以下是第五版《代码答案形式的C语言程序设计》第八的例答案: 8.1 ```c #include <stdio.h> #define N 5 int main() { int a[N], max, i; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); max = a[0]; for (i = 1; i < N; i++) if (a[i] > max) max = a[i]; printf("max=%d\n", max); return 0; } ``` 8.2 ```c #include <stdio.h> #define N 5 int main() { int a[N], i; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); printf("Reverse array a:\n"); for (i = N - 1; i >= 0; i--) printf("%d ", a[i]); printf("\n"); return 0; } ``` 8.3 ```c #include <stdio.h> #define N 5 int main() { int a[N], i; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); printf("a[0]=%d, a[%d]=%d\n", a[0], N - 1, a[N - 1]); return 0; } ``` 8.4 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, sum = 0; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N; i++) sum += a[i]; printf("sum=%d, average=%.2f\n", sum, (float)sum / N); return 0; } ``` 8.5 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, temp; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N / 2; i++) { temp = a[i]; a[i] = a[N - i - 1]; a[N - i - 1] = temp; } printf("Reverse array a:\n"); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); return 0; } ``` 8.6 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, j, temp; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) for (j = i + 1; j < N; j++) if (a[i] > a[j]) { temp = a[i]; a[i] = a[j]; a[j] = temp; } printf("Sort array a:\n"); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); return 0; } ``` 8.7 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, j, temp; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) for (j = 0; j < N - i - 1; j++) if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } printf("Sort array a:\n"); for (i = 0; i < N; i++) printf("%d ", a[i]); printf("\n"); return 0; } ``` 8.8 ```c #include <stdio.h> #define N 5 int main() { int a[N], i; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); printf("Max 5 numbers in array a:\n"); for (i = 0; i < 5; i++) printf("%d ", a[i]); printf("\n"); return 0; } ``` 8.9 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, j, temp; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) for (j = 0; j < N - i - 1; j++) if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } printf("Median number in array a:\n"); printf("%d\n", a[N / 2]); return 0; } ``` 8.10 ```c #include <stdio.h> #define N 5 int main() { int a[N], i, j, temp; printf("Enter array a:\n"); for (i = 0; i < N; i++) scanf("%d", &a[i]); for (i = 0; i < N - 1; i++) for (j = 0; j < N - i - 1; j++) if (a[j] > a[j + 1]) { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } printf("Mode number in array a:\n"); for (i = 0; i < N; i++) { int count = 0, k; for (j = i; j < N; j++) if (a[j] == a[i]) count++; for (k = i - 1; k >= 0; k--) if (a[k] == a[i]) break; if (k < 0 && count > 1) printf("%d ", a[i]); } printf("\n"); return 0; } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

I-am-Faimon

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值