顺序结构→分支结构程序设计

[日期:2020-11-04] 作者:信息技术 次浏览 [字体: ]

我们先来讲解上次做过的一道练习:

【分糖问题】

某幼儿园里,有5个小朋友编号为12345,他们按自己的编号顺序围坐在一张圆桌旁。他们身上都有若干个糖果(键盘输入),现在他们做一个分糖果游戏。从1号小朋友开始,将自己的糖果均分三份(如果有多余的糖果,则立即吃掉),自己留意份,其余两份分给他的相邻的小朋友。接着2号、3号、4号、5号小朋友同样这么做。问一轮后,每个小朋友手上分别有多少糖果?

输入:5个小朋友初始的糖果数量

输出:经过一轮分糖后5个小朋友的糖果数量

(提示:每个人均分糖果后,吃掉多余的,最后剩下的等于原始数据整除分的份数,按照顺序依次执行一圈,即得最后结果)

在程序设计里有三大基本结构:顺序结构、分支结构和循环结构。对于这道题,我们按照题目描述和实际分配时的顺序写出语句来描述这个过程,程序执行时也按照这些语句依次执行,这就是顺序结构

#include <iostream>

using namespace std;

int main()

{

         int a,b,c,d,e;

         cin>>a>>b>>c>>d>>e;

         a=a/3;b=b+a;e=e+a;

         b=b/3;c=c+b;a=a+b;

         c=c/3;d=d+c;b=b+c;

         d=d/3;e=e+d;c=c+d;

         e=e/3;a=a+e;d=d+e;

         cout<<a<<' '<<b<<' '<<c<<' '<<d<<' '<<e;

         return 0;

}

(这里为了描述一个人的分糖情况,将三条语句写在同一行,写成三行也一样。)  

接下来,我们来思考一个简单的游戏:

有一种有趣的游戏,玩法如下:

玩家:2人。   道具:N颗石子。

规则:

①戏双方轮流取石子;

②每人每次取走若干颗石子(最少取1颗,最多取K颗,K<N);

③石子取光,则游戏结束;

④最后取石子的一方为胜。

假如参与游戏的玩家都非常聪明,问最后谁会获胜?

编写程序输出一个数字,若先手获胜输出1,后手获胜输出2

假如N=23  K=3,则输出:1

你知道这个结果究竟是怎样判定出来的吗?

一、C++中的运算符和分支结构程序设计初步

(以下关于C++中的各种运算符的介绍作为参考资料,在需要时可查询)

C++中的算术运算符:

下表显示了 C++ 支持的算术运算符。假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符

描述

实例

+

把两个操作数相加

A + B 将得到 30

-

从第一个操作数中减去第二个操作数

A - B 将得到 -10

*

把两个操作数相乘

A * B 将得到 200

/

分子除以分母

B / A 将得到 2

%

取模运算符,整除后的余数

B % A 将得到 0

++

自增运算符,整数值增加 1

A++ 将得到 11

--

自减运算符,整数值减少 1

A-- 将得到 9


C++中的关系运算符:

下表显示了 C++ 支持的关系运算符。

假设变量 A 的值为 10,变量 B 的值为 20,则:

运算符

描述

实例

==

检查两个操作数的值是否相等,如果相等则条件为真。

(A == B) 不为真。

!=

检查两个操作数的值是否相等,如果不相等则条件为真。

(A != B) 为真。

>

检查左操作数的值是否大于右操作数的值,如果是则条件为真。

(A > B) 不为真。

<

检查左操作数的值是否小于右操作数的值,如果是则条件为真。

(A < B) 为真。

>=

检查左数的值是否大于或等于右数的值,如果是则条件为真。

(A >= B) 不为真。

<=

检查左数的值是否小于或等于右数的值,如果是则条件为真。

(A <= B) 为真。

C++ 的逻辑运算符。

假设变量 A 的值为 1,变量 B 的值为 0,则:

运算符

描述

实例

&&

称为逻辑与运算符。如果两个操作数都非零,则条件为真。

(A && B) 为假。

||

称为逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。

(A || B) 为真。

!

称为逻辑非运算符。用来逆转操作数的逻辑状态。如果条件为真则逻辑非运算符将使其为假。

!(A && B) 为真。

if 语句有两种格式:


第一种格式为:

if (表达式)

语句 ;




第二种格式为:

if (表达式)

语句1;

else

语句2;


例一、读入一个整数a,如果a为偶数在屏幕上输出yes

#include<iostream>

using namespace std;

int main( )

{

   int a;

   cin>>a;

   if (a%2==0)

cout<<"yes";

   return 0;

}

注意:关系运算符==用来表达该符号的左右两边是否相等,不要写成赋值号=。


练习(上机完成下列程序)
1.读入一个整数a,如果a为奇数,在屏幕上输出no。

2.判断一个数a是否是正数,若是,则输出yes,并输出a>0的提示。

输入样例:4

输出样例:

Yes

4>0


例二、风华公司“南京一日游”的收费标准为:5人以内(含5人)按散客标准,每人300元;超过5人,按团体标准,每人280元。请根据输入的人数,输出其旅游费用。

如:输入9  输出2520

#include<iostream>

using namespace std;

int main( )

{

   int n;

   cin>>n;

   if (n<=5)

cout<<n*300<<endl;

else

cout<<n*280<<endl;

   return 0;

}

练习:

现在你可以写出我们前面那个取石子游戏的程序了,现在就试试吧!

若只用if,不用if+else,你能写出这个程序吗?