第5课 三种程序结构


前言

顺序结构是指计算机总是按语句顺序"自顶向下"一条一条地执行。选择结构又称为分支结构。通常是根据一个条件的"真"或者"假"选择程序中一部分语句(一个分支)执行。循环结构是指当某个条件为真时,反复执行某块语句的一种结构。这是计算机中使用最多的一种控制结构,用于解决实际应用中需要重复处理的问题。本节主要介绍顺序结构,其余两种结构会在后续章节中介绍。

一、三种程序结构

  • 循序结构
  • 选择结构(分支结构)
  • 循环结构

二、系统函数

表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=(x1x2)2+(y1y1)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+(n1)×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 k1k2,数与数之间以一个空格分开,其中 0 < k 1 , k 2 < 1000 0< k_1, k_2<1000 0<k1,k21000
输出:一行,包含一个整数,即从北京经过济南到达上海的路线数。输入样例:
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(pa)(pb)(pc) ,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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值