*** 接上一篇博客 “C++数据存储和运算符及表达式” ***
目录
十三、程序流程
程序流程的三种结构
顺序结构:从头到尾一句接着一句的执行下去,直到执行完最后一句
选择结构:程序执行到某个节点时,根据判断条件的结果来决定执行的分支,由if和switch语句来实现
循环结构:程序中有一个循环体,循环体里是一段代码,程序运行的时候,通过判断条件来决定是否执行循环体,由while、do while和for三种语句来实现
13.1 If 语句
语法:
If(表达式)
{
//表达式为真时执行的语包
}else
{
//表达式为假时执行的语句
}
注意:
1.if (表达式)之间的空格可以不写
2.表达式必须使用括号括起来
3.表达式可以是具体的值
4.表达式一般是关系运算和逻辑运算表达式,也可以是赋值运算或其它的表达式
5.不要把 if (变量名==值) 写成 if (变量名=值)
6.整个if 语句可以没有else 分支
7.if或else 分支花括号内的代码如果只有一行,花括号可以不写;如果一行也没有,花括号一定要写;如果有多行,花括号一定要写,如果不写,除了第一行,其它的代码将不是 if 语句的一部分
8.If (表达式)和else 后不能加分号
*嵌套使用if 语句
if (表达式一)
{
if (表达式二)
{
//表达式二为真时执行的语句
}else
//表达式二为假时执行的语句
}else
{
//表达式一为假时执行的语句
}
*if的级联语句
if (表达式一)
{
//表达式一为真时执行的语句
}else if(表达式二)
{
//表达式二为真时执行的语句
}else
{
//表达式二为真时执行的语句
}
例一:
给出一个百分制成绩,要求输出成绩等级“A”、“B”、“C”、“D”、“E”。
90 分以上为“A”,81~89 分为“B”,70~79 为“C”,60~69 为“D”,60 分以下为“E”。
当输入数据大于 100 或小于 0 时,通知用户“输入数据错”,程序结束。
#include<iostream>
using namespace std;//指定缺省的命名空间
int main()
{
int score;
cout << "请输入成绩:";
cin >> score;
if (score > 100 || score < 0)
{
cout << "输入数据错误!" << "\n";
}
else if (score > 89)
{
cout << "等级为:A\n";
}
else if (score > 79)
{
cout << "等级为:B\n";
}
else if (score > 69)
{
cout << "等级为:C\n";
}
else if (score > 59)
{
cout << "等级为:D\n";
}
else
{
cout << "等级为:E\n";
}
return 0;
}
例二:
输入一个三位数,若此数是水仙花数输出“Y”,否则输出“N”, 若输入值不是三位数输出“data error”。
提示:水仙花数是一个三位数,组成这个三位数的三个数字的立方和与这个三位数相等。
判断是否是水仙花数需把构成三位数的三个数字分离出来并存入变量。
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int num, a, b, c;
cout << "请输入一个三位数:";
cin >> num;
if (num > 99 && num < 1000)
{
a = num % 10;
b = num / 10 % 10;
c = num / 100;
int sum = pow(a, 3) + pow(b, 3) + pow(c, 3);
if (sum == num)
{
cout << "Y\n";
}
else
{
cout << "N\n";
}
}
else
{
cout << "data error\n";
}
return 0;
}
例三:
输入两个操作数和一个运算符,编程实现简单的计算器。
提示:操作数和运算符可以分开输入,关键是要对运算符作判断,然后输出相应的结果。
#include<iostream>
using namespace std;
int main()
{
double num1, num2,result;
char op;
cout << "请输入算式:";
cin >> num1 >> op >> num2;
if (op == '+')
{
result = num1 + num2;
}
else if (op == '-')
{
result = num1 - num2;
}
else if (op == '*')
{
result = num1 * num2;
}
else if (op == '/')
{
if (num2 == 0)
{
cout << "输入错误!";
}
result = num1 / num2;
}
if (num2 != 0 )
{
cout <<"结果:" << num1 << op << num2 << "=" << result;
}
return 0;
}
13.2 switch语句
switch 也是一种选择结构的语句,可以代替简单的多条件的if语句
switch(表达式)
{
case 值1:语句1;
break;
case 值2:语句2;
break;
```
default:语句;
break;
}
例四:
输入年份和月份,求该月有多少天。
算法分析:要考虑大月有 31 天,小月有 30 天,
闰年的二月有 29 天以及非闰年的二月有 28 天这几种情况。
#include<iostream>
using namespace std;
int main()
{
int year, month;
cout << "请输入年份:";
cin >> year;
cout << "请输入月份:";
cin >> month;
switch (month)
{
case 1:case 3:case 5:
case 7:case 8:case 10:
case 12:cout << year << "年" <<month<< "月有 31 天!\n"; break;
case 2:
if ((year % 4 == 0 && year % 100 == 0) || (year % 400 == 0))
{
cout <<year <<"年" << month << "月有 29 天!\n";
}
else
{
cout << year << "年" << month << "月有 28 天!\n";
}
break;
case 4:case 6:case 9:
case 11:cout << year << "年" << month << "月有 30 天!\n";
default:cout << "输入错误!\n"; break;
}
return 0;
}
13.3 while 循环语句
语法:
while(表达式)
{
//语句块
}
先计算表达式的值,如果值为真就执行语句块,执行完语句块后,回到循环首部再次计算表达式的值,如果为真又执行一次语句块-.....,这个过程会一直重复,直到表达式的值为假时不再执行语句块
注意:
1.如果表达式的值永远为真,那么将进入死循环,所以在循环中应该有改变表达式的值的方法
2.如果循环体中的语句块只有一行代码,大括号可以不书写。
break和continue两个关键字用于控制环体中代码的执行流程
··break跳出(中止)当前循环语句。
··continue回到当前循环语句的首部。
例五:
输入一个数字num,求数字num的阶乘!
#include<iostream>
using namespace std;
int main()
{
int num, i = 1, fact = 1;
cout << "请输入数字:";
cin >> num;
while (i <= num)
{
fact *= i;
i++;
}
cout << num << "的阶乘为:" << fact;
return 0;
}
13.4 for循环
for (语句一;表达式;语句二)
{
语句块;
}
1)循环开始的时候,先执行语句一,在整个循环过程中语句一只会被执行一次
2)判断表达式的值,如果为真,就执行一次循环体中的语句块
3)执行完语句块后,执行一次语句二
4)重复 步2)和步3),直到表达式不为真就结束for循环
注意:
不要纠结for循环与while循环的区别,它们本质上没有区别。
for循环一般需要一个相当于计数器的变量
在for循环中,语句一、表达式和语句二都可以为空,for(;;)等同于while (true)
continue和break 两个关键字也可以用在for循环体中
*循环可以相互嵌套使用!
例六:
输入一个正整数n,再输入n个学生的成绩,计算平均分,并统计不及格成绩的个数。
#include<iostream>
using namespace std;
int main()
{
int n;
double score, average, sum = 0;
cout << "请输入学生个数:";
cin >> n;
for (int i = 1; i <= n; i++)
{
cout << "学生成绩:";
cin >> score;
sum += score;
}
average = sum / n;
cout << n << "个学生的平均成绩:" << average << "\n";
return 0;
}
例七:
求100以内的全部素数,每行输出10个
#include<iostream>
using namespace std;
int main()
{
int n , count = 0, i;
for (i = 2; i <= 100; i++)
{
for (n = 2; n < i; n++)
{
if (i % n == 0)
{
break;
}
}
if (n == i)
{
cout <<"\t" << i ;
count++;
if (count % 10 == 0)
{
cout << "\n";
}
}
}
return 0;
}
本节完。