文章目录
前言
顺序结构是指计算机总是按语句顺序"自顶向下"一条一条地执行。选择结构又称为分支结构。通常是根据一个条件的"真"或者"假"选择程序中一部分语句(一个分支)执行。循环结构是指当某个条件为真时,反复执行某块语句的一种结构。这是计算机中使用最多的一种控制结构,用于解决实际应用中需要重复处理的问题。本节主要介绍顺序结构,其余两种结构会在后续章节中介绍。
一、三种程序结构
- 循序结构
- 选择结构(分支结构)
- 循环结构
二、系统函数
表5-1 常用的数学函数
函数名 | 示例 | 说明 |
---|---|---|
abs(x) | abs(-5)=5 | 求一个数的绝对值 |
floor(x) | floor(3.14)=3 | 求不大于实数x的最大整数 |
ceil(x) | ceil(3.14)=4 | 求不小于实数x的最小整数 |
pow(x, y) | pow(2, 3)=8 | 幂函数 x a x^a xa为pow(x, a); 指数函数 a x a^x ax为pow(a, x) |
rand() | rand() | 产生0到RAND_MAX之间的随机整数 |
sqrt(x) | sqrt(25) =5 | 求实数x的平方根,x>=0 |
三、顺序结构程序举例
1. 数字反转问题
#include<iostream>
using namespace std;
long long int reversed(int n) {
long long int result = 0;
while(n != 0) {
result = result*10 + n%10;
n /= 10;
}
return result;
}
int main() {
long long int a;
cin >> a;
cout << reversed(a) << endl;
return 0;
}
2. 歌唱比赛打分问题
#include<iostream>
#include<algorithm> // 包含 stl 中的 sort 函数
using namespace std;
int main() {
int score[10]; // 存储评分的数组
int sum = 0; // 总分
int maxScore, minScore; // 最高分和最低分
// 依次输入10名评委所评分数
cout << "请输入10名评委所评分数: " << endl;
for (int i = 0; i < 10; i++) {
cin >> score[i];
}
// 使用 sort 函数对评分进行排序
sort(score, score + 10);
// 去除一个最高分和一个最低分
maxScore = score[9]; // 最高分为排序后数组的最后一个元素
minScore = score[0]; // 最低分为排序后数组的第一个元素
for (int i = 1; i < 9; i++) { // 循环求和
sum += score[i];
}
// 再算出平均分作为选手的得分
double avgScore = sum / 8.0; // 平均分为剩余分数的和除以人数
cout << "选手的得分为: " << avgScore << endl;
return 0;
}
四、课后练习
1. 分数转小数问题
输入两个非0整数a和b分别作为分子和分母,即分数 a b \frac a b ba,求它对应的实数数值(双精度浮点数)。
2. 勾股定理问题
输入两条直角边的边长a和b,计算斜边的长度c。
c
=
a
2
+
b
2
c = \sqrt {a^2 + b^2}
c=a2+b2
3. 线段长度问题
已知平面直角坐标系中线段两个端点的坐标是
(
x
1
,
y
1
)
(x_1, y_1)
(x1,y1)和
(
x
2
,
y
2
)
(x_2, y_2)
(x2,y2),则线段的长度公式为
l
e
n
g
t
h
=
(
x
1
−
x
2
)
2
+
(
y
1
−
y
1
)
2
length = \sqrt {(x_1-x_2)^2+(y_1-y_1)^2}
length=(x1−x2)2+(y1−y1)2
编写程序,输入线段两端点的坐标,计算并输出线段的长度。
#include <iostream>
#include <cmath>
using namespace std;
int main() {
double x1, x2, y1, y2;
cin >> x1 >> y1 >> x2 >> y2;
printf("%.4f",sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)));
return 0;
}
4. 等差数列问题
等差数列是指从第二项起,每一项与它的前一项的差等于同一个常数的一种数列,常用 A 、 P 表示。例如,1, 3, 5, 7, 9, …, 2n-1。其中,这个常数叫作等差数列的公差,公差常用字母 d 表示,上述等差数列中 d =2。
如果一个等差数列的首项为 a ,公差为 d ,那么该等差数列第 n 项的表达式为
a
n
=
a
1
+
(
n
−
1
)
×
d
a_n =a_1+( n -1) \times d
an=a1+(n−1)×d
称为等差数列的通项公式。
若一个等差数列的首项为 a ,末项为
a
n
a_n
an,项数为 n ,那么该等差数列前 n 项和表达式为
S
n
=
n
×
(
a
1
+
a
n
)
2
S_n = \frac {n \times (a_1+ a_n )} 2
Sn=2n×(a1+an)
即
S
n
=
(
首项+末项
)
×
项数
2
S_n = \frac {(首项+末项) \times 项数} 2
Sn=2(首项+末项)×项数
称为等差数列前 n 项和公式。
编写程序输入等差数列的第1项
a
1
a_1
a1 ,第2项
a
2
a_2
a2,项数 n ,计算等差数列的前 n 项之和。
输入:一行,包括3个整数
a
1
,
a
2
,
n
a_1,a_2, n
a1,a2,n ,数与数之间以一个空格分开。
(
0
<
a
1
,
0
<
a
2
,
n
<
10000
)
(0<a_1, 0<a2, n <10000)
(0<a1,0<a2,n<10000)
输出:一行,包含一个整数,即等差数列的前 n 项之和。
输入样例:
1 3 4
输出样例:
16
提示:先根据
a
1
,
a
2
a_1, a_2
a1,a2求公差 d ,再根据通项公式计算
a
n
a_n
an,最后根据前 n 项和公式,
计算前 n 项和。
5. 加法原理问题。
加法原理又称分类计数原理,是排列组合中的一种基本原理。具体是指:完成一件事情有 n 类方式,第一类方式有
M
1
M_1
M1种方法,第二类方式有
M
2
M_2
M2种方法……第 n 类方式有
M
n
M_n
Mn 种方法,那么完成这件事情共有
M
1
+
M
2
+
…
+
M
n
M_1+M_2+…+ M_n
M1+M2+…+Mn 种方法。注意,每种方法都能独立完成这件事情。
已知从北京到上海有乘汽车、火车和飞机3种交通方式可供选择,乘汽车有
k
1
k_1
k1 种路线到达,乘火车有
k
2
k_2
k2 个班次可以到达,乘飞机有
k
3
k_3
k3个班次到达,那么从北京到上海共有
k
1
+
k
2
+
k
3
k_1 + k_2 + k_3
k1+k2+k3种方式可以到达。
编写程序,输入
k
1
,
k
2
,
k
3
k_1, k_2, k_3
k1,k2,k3,计算从北京到上海共有几种方式到达。
输入:一行,包含3个整数
k
1
,
k
2
,
k
3
k_1, k_2, k_3
k1,k2,k3,数与数之间以一个空格分开。
(
0
<
k
1
,
k
2
,
k
3
<
1000
)
(0< k_1,k_2,k_3<1000)
(0<k1,k2,k3<1000)
输出:一行,包含一个整数,即从北京到上海的到达方式个数。
输入样例:
9 8 7
输出样例:
24
6. 乘法原理问题。
乘法原理是排列组合中的另一种基本原理。具体是指:做一件事,完成它需要分成 n 个步骤,做第一步有
m
1
m_1
m1种不同的方法,做第二步有
m
2
m_2
m2种不同的方法……做第 n 步有
m
n
m_n
mn种不同的方法,那么完成这件事共有
N
=
m
1
×
m
2
×
m
3
×
…
×
m
n
N =m_1 \times m_2 \times m_3 \times … \times m_n
N=m1×m2×m3×…×mn 种不同的方法。注意,每种方法不能独立完成这件事情。例如,利用数字1、2、3、4、5组成不重复的3位数,那么百位数有5种选择,十位数有4种选择,个位数有3种选择,所以共有
5
×
4
×
3
=
60
5 \times 4 \times 3=60
5×4×3=60种不重复的3位数组合。
已知从北京到上海中间必须经过济南,从北京到济南城共有
k
1
k_1
k1 条路线,从济南到上海共有
k
2
k_2
k2条路线,那么从北京经过济南到达上海共有
k
×
k
2
k \times k_2
k×k2条路线。
编写程序,输入
k
1
,
k
2
k_1, k_2
k1,k2 ,计算从北京经过济南到达上海共有几条路线。
输入:一行,包含两个整数
k
1
和
k
2
k_1和k_2
k1和k2,数与数之间以一个空格分开,其中
0
<
k
1
,
k
2
<
1000
0< k_1, k_2<1000
0<k1,k2<1000。
输出:一行,包含一个整数,即从北京经过济南到达上海的路线数。输入样例:
3 6
输出样例:
18
扩展练习
1. 利用海伦-秦九韶公式计算三角形面积
海伦-秦九韶公式如下:
s
=
p
(
p
−
a
)
(
p
−
b
)
(
p
−
c
)
,
p
=
a
+
b
+
c
2
s = \sqrt {p(p-a)(p-b)(p-c)}, \quad p = \frac {a+b+c} 2
s=p(p−a)(p−b)(p−c),p=2a+b+c
#include<iostream>
#include <cmath>
using namespace std;
int main() {
float a, b, c;
float p, area;
cout << "请输入三角形的三条边: " << endl;
cin >> a >> b >> c;
if(a+b>c && b+c>a && a+c>b) {
p=(a+b+c)/2.0;
area=(float)sqrt(p*(p-a)*(p-b)*(p-c));
cout << "三角形的面积是: " << area << endl;
}
else
cout << "不能构成三角形." << endl;
return 0;
}