乐趣区

关于c:浙大版C语言程序设计第四版何钦铭颜晖-第3章-分支结构-课后习题答案

你也能够上程序咖(https://meta.chengxuka.com),关上大学幕题板块,岂但有答案,解说,还能够在线答题。

一、选择题

1. 有一函数

$$
y =
\begin{cases}
1 & (x \gt 0) \\
0 & (1 = 0) \\
-1 & (x \lt 0)
\end{cases}
$$

以下程序段中谬误的是()。

A.

if(x>0)y=1;
else if(x==0)y≈0;
else y=-1;

B.

y=0;
if(x>0)y=1;
else if(x<0)y=-1;

C.

y=0;
if(x>=0);
if(x>0)y=1;
else y=-1;

D.

if(x>=0)
    if(x>0)y=1;
    else y=0;
else y=-1;

答:C

解析:依据函数,x 大于 0,y 的值为 1。x 等于 0,y 的值为 0,x 小于 0,y 的值为 -1。选项 A,B,D 代码均正确。

2. 对于变量定义: inta, b=0; 下列叙述中正确的是()。
A. a 的初始值是 0,b 的初始值不确定
B. a 的初始值不确定,b 的初始值是 0
C. a 和 b 的初始值都是 0
D.a 和 b 的初始值都不确定

答:B

解析:定义变量时,没有给 a 赋值,所以 a 的初始值不确定。b 的值赋值为 0。

3. 下列程序段的输入后果是()。

int a=3,b=5;
if(a=b)printf("%d=%d",a,b);
else printf("%d!=%d",a,b);

A.5=5
B.3=3
C.3!=5
D.5!=3

答:A

解析:a 的初始值为 3,b 的值为 5。执行 if 语句的条件,为赋值语句。赋值语句作为判断条件是什么意思呢?它并 不是 以是否赋值胜利作为 true 和 false 的判断机制,而是看 赋值的值是多少,如果为 0 主动就作为 false 了。这里赋值为 5。执行 if 里的语句。所以答案为选项 A。

4. 能正确示意逻辑关系“a≥10 或 a≤0″ 的 C 语言表达式是()。

A. a>=10 or a<=0
B. a>=0| a<= 10
C. a>=10 && a<=0
D. a>=10lla<=0

答:D

解析:a 大于等于 10,示意为 a>=10,a 小于等于 0,示意为 a<=0,应用的是关系运算符。两头的或应用逻辑运算符 ||,所以答案为选项 D。

5. 下列叙述中正确的是()。

A. break 语句只能用于 switch 语句

B. 在 switch 语句中必须应用 default

C. break 语句必须与 switch 语句中的 case 配对应用

D. 在 switch 语句中,不肯定应用 break 语句

答:D

解析:

选项 A 中,break 语句还能够用于循环语句中,示意强制完结循环。

选项 B 中,在 switch 语句中,default 是可选的,能够有,也能够没有。

选项 C 中,break 语句能够用于循环语句,for,while,do-while 等语句中。

选项 D,正确。

6. 在嵌套应用 if 语句时,C 语言规定 else 总是()。

A. 和之前与其具备雷同缩进地位的 if 配对

B. 和之前与其最近的 if 配对

C. 和之前与其最近的且不带 else 的 if 配对

D. 和之前的第一个 if 配对

答:C

解析:

else 和 if 的匹配准则:else 与最靠近它的,而且没有与别的 else 匹配过的 if 相匹配。所以答案抉择 C。

7. 下列程序段的输入后果是()。

int a=2, b=-1, c=2;
if(a<b)
    if(b<0) c≈0;
    else c++;
printf("%d\n", c);

A.2

B.1

C.0

D.3

答:A

解析:

a 的初始值为 2,b 的初始值为 -1,c 的初始值为 2。外层 if 语句的条件为 a<b,这里条件不成立,那么间接完结这个 if 语句,执行最初的打印语句,打印 c 的值为 2。

8. 在执行以下程序段时,为使输入后果为 t=4,则给 a 和 b 输出的值应满足的条件是()。

int a, b, s, t;
scanf("%d,%d", &a, &b);
s = 1;t = 1;
if (a > 0)    s = s + 1;
if (a > b)    t = s + t;
else if (a == b)    t = 5;
else t = 2 * s;
printf("t=%d\n", t);

A. a>b

B. 0<a<b

C. 0>a>b

D. a<b<0

答:B

解析:

依照选项 B 为条件,a 大于 0,那么会执行第一个 if 语句,那么执行 s=s+1 后,s 的值为 2。而上面的为 t 赋值的语句,咱们执行最初 else 中的就能够让 t 的值为 4,就须要让后面的 if 语句以及 else if 语句的条件都不成立,那么 a < b 即可。

二、填空题

1. 执行以下程序段,若输出 32,则输入(); 若输出 58,则输入()。

int a;
scanf("%d", &a);
if(a>50) printf("%d", a);
if(a>40) printf("%d", a);
if(a>30) printf("%d", a);

答:32,585858

解析:

如果输出 32,那么 a 的值为 32,后面两个 if 语句条件不成立,最初一个成立,打印 32。

如果输出 58,那么 a 的值为 58,3 个 if 语句条件都成立,打印了 3 次 a 的值,所以 585858。

2. 示意条件 10<x<100 或者 x <0 的 C 语言表达式是()。

答:(x>10&&x<100)||x<0

解析:x 大于 10 并且小于 100。能够示意成 x>10,x<100,因为是并且的关系,所以两头应用逻辑运算符 与 && 来链接。和 x<0 的关系是或者,那么应用 或 || 来链接。

3. 输入偶数。输出一个正整数 n,再输出 n 个整数,输入其中的偶数。要求相邻偶数两头用一个空格离开,行末不得有多余空格。请填空。

char ch;
int first = 1, k, n, x;
scanf("%d", &n);
for (k = 1; k <= n; k++){scanf("%d", &x);
  if(__________){if(__________){printf("%d", x);
        __________;
    }else {__________;}
  }
}

答:

x % 2 == 0

first == 1

first = 0;

printf(” %d”, x);

4. 以下程序段的运行后果是()。

int k=16;
switch(k%3) {case 0: print("zero");
  case 1: printf("one"); 
  case 2: printt("two*);
}

答:onetwo

解析:siwtch 作用的数据是:k%3,后果为 1。那么会匹配 case 1,打印 one,没有 break 语句,前面的 case 2 的内容间接穿透执行,持续打印 two。

5. 找出 3 个整数中最大的数。输出 3 个整数,输入其中最大的数。请填空。

int a, b, c, max;
scanf("%d %d %d", &a, &b, &c);
if(a>b){if(a>c)    __________;
    else    __________;
}else {if(__________)    max=b;
    else    __________;
}
printf("The max is %d\n", max);

答:

max = a;

max = c;

b > c

max = c;

三、程序设计题

题目 1:比拟大小:输出 3 个整数,按从小到大的程序输入。试编写相应程序。

解:

办法一答案代码:

#include <stdio.h>
int main()
{
    //(课后习题 3.3.1)/*
    比拟大小:输出 3 个整数,按从小到大的程序输入。*/
    int a, b, c;
    printf("input a,b,c:");
    scanf("%d%d%d", &a, &b, &c);
    if (a > b)
    {if (b > c)
        {printf("%d <= %d <= %d\n", c, b, a);
        }
        else
        {if (a > c)
                printf("%d <= %d <= %d\n", b, c, a);
            else
                printf("%d <= %d <= %d\n", b, a, c);
        }
    }
    else
    {if (a > c)
        {printf("%d <= %d <= %d\n", c, a, b);
        }
        else
        {if (b < c)
                printf("%d <= %d <= %d\n", a, b, c);
            else
                printf("%d <= %d <= %d\n", a, c, b);
        }
    }

    return 0;
}

运行后果:

办法二答案代码:

#include <stdio.h>
int main()
{
    //(课后习题 3.3.1)/*
    比拟大小:输出 3 个整数,按从小到大的程序输入。*/
    int a, b, c;
    int temp;
    printf("input a,b,c:");
    scanf("%d%d%d", &a, &b, &c);
    // 先比拟 a 和 b,让 a 中存储比拟小的,b 中存储较大的。if (a > b)
    { // 所以判断,如果 a 大于 b,就替换 a 和 b 的值
        temp = a;
        a = b;
        b = temp;
    }
    // 而后比拟 a 和 c,如果 a 大于 c,就替换 a 和 c 的值,此操作完结后,a 存储 3 个数中最小值。if (a > c)
    {
        temp = a;
        a = c;
        c = temp;
    }

    // 最初,比拟 b 和 c
    if (b > c)
    {
        temp = b;
        b = c;
        c = temp;
    }

    // 依照 a,b,c 的程序打印即可。printf("%d <= %d <= %d\n", a, b, c);

    return 0;
}

题目 2:高速公路超速处罚:依照规定,在高速公路上行驶的机动车,超出本车道限速的 10% 则处 200 元罚款; 超出 50%,就要撤消驾驶证。请编写程序依据车速和限速主动判断对该机动车的解决。

答:

答案代码:

#include <stdio.h>
int main()
{
    //(课后习题 3.3.2)/*
    高速公路超速处罚:依照规定,在高速公路上行驶的机动车,超出本车道限速的 10% 则处 200 元罚款; 超出 50%,就要撤消驾驶证。*/
    double n = 120, x;
    printf("input x(为车辆理论速度):");
    scanf("%lf", &x);
    if (x >= n * 1.1 && x < n * 1.5)
        printf("您已超速 10%%, 处罚款 200 元 \n");
    else if (x >= n * 1.5)
        printf("您已超速 50%%, 已撤消驾驶证 \n");
    else
        printf("您没有超速 \n");
    return 0;
}

运行后果:

题目 3:出租车计价:某城市一般出租车免费规范如下:起步里程为 3 公里,起步费 10 元; 超过起步里程后 10 公里内,每公里 2 元; 超过 10 公里以上的局部加收 50% 的空驶补贴费,即每公里 3 元; 营运过程中,因路阻及乘客要求长期停车的,按每 5 分钟 2 元计收 (有余 5 分钟则不免费)。运价计费尾数四舍五入,保留到元。编写程序,输出行驶里程(公里) 与等待时间(分钟),计算并输入乘客应领取的车费(元)。

答:

答案代码:

#include <stdio.h>
int main()
{
    //(课后习题 3.3.3)/*
    出租车计价:某城市一般出租车免费规范如下:起步里程为 3 公里,起步费 10 元;
    超过起步里程后 10 公里内,每公里 2 元;
    超过 10 公里以上的局部加收 50% 的空驶补贴费,即每公里 3 元;
    营运过程中,因路阻及乘客要求长期停车的,按每 5 分钟 2 元计收(有余 5 分钟则不免费)。运价计费尾数四舍五入,保留到元。编写程序,输出行驶里程 (公里) 与等待时间(分钟),计算并输入乘客应领取的车费(元)。*/
    double x, y=0.0;
    int t; // 等待时间
    printf("输出行驶公里 x(x>0), 长期停车工夫 t:");
    scanf("%lf%d", &x, &t);
    if (x >= 3.0)
    {
        y += 10.0;
        if (x >= 13.0) // 超过起步里程后 10 公里
            y += 10.0 * 2.0 + (x - 13.0) * 3.0;
        else // 大于 3 公里但不超过 13 公里
            y += (x - 3.0) * 2.0;
    }
    else // 有余三公里的依照起步价免费
        y = 10.0;

    // 加上等待时间
    if (t >= 5)
        y += t / 5.0 * 2;

    printf("金额 %f 元 \n", y);

    y = (int)(y + 0.5);

    printf("乘客应领取的车费为:%.2lf 元 \n", y);
    return 0;
}

运行后果:

题目 4:统计学生问题:输出一个正整数 n,再输出 n 个学生的问题,统计五分制问题的散布。百分制问题到五分制问题的转换规则:大于或等于 90 分为 A,小于 90 分且大于或等于 80 分为 B,小于 80 分且大于或等于 70 为 C,小于 70 分且大于或等于 60 为 D,小于 60 分为 E。试编写相应程序。

答:

答案代码:

#include <stdio.h>
int main()
{
    //(课后习题 3.3.4)/*
    统计学生问题:输出一个正整数 n,再输出 n 个学生的问题,统计五分制问题的散布。百分制问题到五分制问题的转换规则:大于或等于 90 分为 A,小于 90 分且大于或等于 80 分为 B,小于 80 分且大于或等于 70 为 C,小于 70 分且大于或等于 60 为 D,小于 60 分为 E。试编写相应程序。*/
    int score, n, i, A = 0, B = 0, C = 0, D = 0, E = 0;
    printf("input n:");
    scanf("%d", &n);
    printf("输出 %d 个 score(1~100):\n", n);
    for (i = 1; i <= n; i++)
    {scanf("%d", &score);
        printf("输出百分制问题 %d 对应的五分制问题为:", score);
        if (score >= 90)
        {putchar('A');
            putchar('\n');
            A++;
        }
        else if (score >= 80)
        {putchar('B');
            putchar('\n');
            B++;
        }
        else if (score >= 70)
        {putchar('C');
            putchar('\n');
            C++;
        }
        else if (score >= 60)
        {putchar('D');
            putchar('\n');
            D++;
        }
        else
        {putchar('E');
            putchar('\n');
            E++;
        }
    }
    printf("等级占比:A=%d, B=%d, C=%d, D=%d, E=%d\n", A, B, C, D, E);
    return 0;
}

运行后果:

题目 5:三角形判断:输出立体上任意三个点的坐标(x1, y1)、(x2, y2)、(x3, y3),测验它们是否形成三角形。如果这 3 个点能形成一个三角形,输入周长和面积(保留 2 位小数); 否则,输入“Impossible”。试编写相应程序。

提醒:在一个三角形中,任意两边之和大于第三边。三角形面积计算公式如下:

$$
area=\sqrt{s(s-a)(s-b)(s-c)}
$$

,其中 s = (a+b+c)/2。

答:

答案代码:

#include <stdio.h>
#include <math.h>
int main()
{
    //(课后习题 3.3.5)/*
    三角形判断:输出立体上任意三个点的坐标(x1, y1)、(x2, y2)、(x3, y3),测验它们是否形成三角形。如果这 3 个点能形成一个三角形,输入周长和面积(保留 2 位小数);
    否则,输入“Impossible”。*/
    double x1, y1, x2, y2, x3, y3, S, C, area, a, b, c;
    printf("输出三个点的坐标(x1,y1),(x2,y2),(x3,y3):");
    scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &x3, &y3);
    a = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));
    b = sqrt(pow(x3 - x2, 2) + pow(y3 - y2, 2));
    c = sqrt(pow(x1 - x3, 2) + pow(y1 - y3, 2));
    if ((a + b > c) && (a + c > b) && (b + c > a) && (a - b < c) && (a - c < b) && (b - c < a))
    {
        C = a + b + c;
        S = (a + b + c) / 2.0;
        area = sqrt(S * (S - a) * (S - b) * (S - c));
        printf("此三角形的周长为 %.2lf, 面积为 %.2lf \n", C, area);
    }
    else
        printf("Impossible \n");
    return 0;
}

运行后果:

退出移动版