《算法笔记》2.3小节——C/C++快速入门->选择结构

问题 A: 例题4-1 一元二次方程求根

题目

题目描述

求一元二次方程 \(ax^2+bx+c=0\) 的根,三个系数abc由键盘输入,且a不能为 0,但不保证 \(b^2-4ac>0\)

程序中所涉及的变量均为double类型。

输入

以空格分隔的一元二次方程的三个系数,双精度double类型

输出

分行输出两个根如下(注意末尾的换行):

r1=第一个根

r2=第二个根

结果输出时,宽度占7位,其中小数部分2位。

如果方程无实根,输出一行如下信息(注意末尾的换行):

No real roots!

样例输入

1
1 2 3

样例输出

1
No real roots!

题解

思路

本题需要一个判断结构即可,我使用的是条件运算符,当然if-else也是可以的。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
double a, b, c;
scanf("%lf %lf %lf", &a, &b, &c);

double temp = b * b - 4 * a * c;

temp >= 0 ? printf("r1=%7.2f\nr2=%7.2f\n", (-b + sqrt(b * b - 4 * a * c)) / 2.0 * a, (-b - sqrt(b * b - 4 * a * c)) / 2.0 * a) : printf("No real roots!");

system("pause");
return 0;
}

问题 B: 例题4-2 比较交换实数值

题目

题目描述

从键盘输入 2 个实数,按照代数值由小到大的顺序输出这两个数。

输入

用空格分隔的两个实数。

输出

从小到大输出这两个实数,中间以空格来分隔,小数在前,大数在后。

小数点后保留 2 位小数。

末尾输出换行符。

样例输入

1
3.6 -2.3

样例输出

1
-2.30 3.60

题解

思路

也是条件判断。因为每次只输出一个,所以用两个就好,一小一大。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <stdio.h>

using namespace std;

int main()
{
double a, b;

scanf("%lf %lf", &a, &b);
printf("%.2f ", a >= b ? b : a);
printf("%.2f", a <= b ? b : a);

system("pause");
return 0;
}

问题 C: 例题4-3 比较交换3个实数值,并按序输出

题目

题目描述

从键盘输入 3 个实数abc,通过比较交换,将最小值存储在变量a中,最大值存储在变量 c 中,中间值存储在变量b中,并按照从小到大的顺序输出这三个数abc

末尾输出换行。

输入

输入以空格分隔的三个实数

输出

按照从小到大的顺序输出这三个实数,中间以空格分隔,最小值在前,最大值在后。小数点后保留 2 位小数。

注意末尾的换行。

样例输入

1
3 7 1

样例输出

1
1.00 3.00 7.00

题解

思路

用几个if-else语句即可,不需要考虑别的,越简单越好。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
double a, b, c, temp;
scanf("%lf %lf %lf", &a, &b, &c);

if (c <= b)
{
swap(c, b);
}
if (c <= a)
{
swap(a, c);
}
if (b <= a)
{
swap(a, b);
}

printf("%.2f %.2f %.2f", a, b, c);

system("pause");
return 0;
}

问题 D: 习题4-4 三个整数求最大值

题目

题目描述

有 3 个整数abc,由键盘输入,输出其中最大的数。

输入

以空格分割的三个整数。

输出

三个数中的最大值,末尾换行。

样例输入

1
1 3 2

样例输出

1
3

题解

思路

没什么好说的,可以使用两个三目运算符啦。

代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <stdio.h>
#include <math.h>

using namespace std;

int main()
{
int a, b, c;
scanf("%d %d %d", &a, &b, &c);

printf("%d\n", a >= b ? a : (b >= c ? b : c));

system("pause");
return 0;
}

《算法笔记》2.3小节——C/C++快速入门->选择结构
https://excelius.xyz/《算法笔记》2-3小节——c-c-快速入门-选择结构/
作者
Ther
发布于
2021年10月27日
许可协议