本文回顾程序的三种决策手段:if else结构,switch语句,条件运算符
还会涉及把多个测试表达式(一般是关系表达式)合并为一个测试表达式
文章目录
if else
if,while,for循环的测试表达式等,需要bool类型值的地方,程序都会自动转换为bool类型,所以if(x)和if(x != 0)一样的,所以测试表达式也可以不是关系表达式,可以是一个值
for,while,do while,if else全部都只被看作是一条语句
示例1 回显输入(cout << ++ch 和 cout << ch + 1的区别!)
#include <iostream>
int main()
{
char ch;
std::cout << "Type, and I shall repeat.\n";
while((ch = std::cin.get()) != '.')
{
if (ch == '\n')
std::cout << ch;//如果是换行符,就原样打印
else
std::cout << ++ch;//打印每个字符的后一个字符
}
return 0;
}
Type, and I shall repeat.
I spend too much money
J!tqfoe!upp!nvdi!npofz
I have to earn more.
J!ibwf!up!fbso!npsf
如果while循环里只有std::cout << ++ch;就会像下面这样,换行符被打印为它后面的一个字符,而不会换行
Type, and I shall repeat.
I bought a pot
J!cpvhiu!b!qpu
如果把++ch改为ch + 1,我没猜到竟会输出ASCII码的数字!!!
cout 认为++ch还是char类型,但是ch + 1,和int类型相加,ch被整型提升为int,最终结果也是int
Type, and I shall repeat.
I will do it well
7433120106109109331011123310611733120102109109
oh my god.
1121053311012233104112101
示例2 猜数字
#include <iostream>
int main()
{
const int FAV = 34;
int n = 0;
std::cout << "Enter a number in the range 1-100\n";
do
{
std::cin >> n;
if(n > FAV)
std::cout << "Too high------Guess again!\n";
else if(n < FAV)
std::cout << "Too low------Guess again!\n";
else
std::cout << n << " is right!\n";
}while(n != FAV);
return 0;
}
Enter a number in the range 1-100
56
Too high------Guess again!
30
Too low------Guess again!
45
Too high------Guess again!
35
Too high------Guess again!
32
Too low------Guess again!
33
Too low------Guess again!
34
34 is right!
逻辑运算符(优先级低于关系运算符)
就三个,逻辑与&&,逻辑或||,逻辑非!,和英语很像
||,&&是顺序点(冒号,逗号运算符也是顺序点 sequence point)
即||,&&左边的表达式先修改,先判定左侧,并且在判定右侧之前产生所有的副作用,比如
int i = 7, j = 8;
//||是顺序点,先计算左边,i为7和8比较,左边表达式值为false,再递增i,i=8
// 左边表达式的值如果是true,就不计算右边了;这里要计算,右边是true。所以整个逻辑表达式的值是true
i++ > 8 || i == j;//||优先级低于关系运算符,所以不用加括号
示例 菜单选择
#include <iostream>
int main()
{
std::cout << "This program will reformat your hard disk and destroy all your data"
".\nDo you wish to continue?<y/n>\n";
char ans;
std::cin.get(ans);//只读取第一个字符
if (ans == 'y' || ans == 'Y')
std::cout << "You were warned!\a\a\n";
else if(ans == 'n' || ans == 'N')
std::cout << "A wise choice...bye!\n";
else
std::cout << "That wasn't a y or n!\nApparently you can't follow"
" instructions, so I will trash your disk anyway!\a\a\a\n";
return 0;
}
示例2
脑袋晕乎乎了,昨晚没睡好,这个示例其实没什么新东西,我多敲一敲总是好点
#include <iostream>
const int Arsize = 6;
int main()
{
using namespace std;
float naaq[Arsize];
cout << "Enter the NAAQs (New Age Awareness Quotients)"//新时代意识
<< " of\nyour neighbors. Program terminates "
<< "when you make\n"
<< Arsize << " entries "
<< "or enter a negative value.\n";
int i = 0;
float temp;
cout << "First value: ";
cin >> temp;
while (i < Arsize && temp >= 0)
{
naaq[i] = temp;
++i;
if (i < Arsize)//如果递增后还小于数组长度才继续输入
{
cout << "Next value: ";
cin >> temp;
}
}
if (i == 0)
{
cout << "No data--bye!\n";
}
else
{
cout << "Enter your naaq: ";