条件语句,又称为流程控制语句,是变成过程中,代码分支所必须的。
用来表现逻辑结构的分支。
条件语句共有以下几种:
if语句
它的完全展开形式如下:
if (condition) statement else if(condition) statment else if(condition) statment else statment
代码运行过程也很简单。
从上到下判断每一个条件,如果符合条件则执行相应的statment,如果都不符合,则执行最后else部分的statment。
#include <vector> #include <string> #include <iostream> using std::vector; using std::string; using std::cin; int main() { const vector<string> scores = {"F", "D", "C", "B", "A", "A++"}; string lettergrade; int grade = 0; cin >> grade; // if(grade < 60) // lettergrade = scores[0]; // else // lettergrade = scores[(grade-50)/10]; // // if (grade %10 > 7) // lettergrade += "+"; // else if(grade %10 < 3) // lettergrade += "-"; if(grade < 60) // 成绩不合格则不需要考虑末尾+-号问题 lettergrade = scores[0]; else // 成绩合格需要考虑添加+-号问题 { lettergrade = scores[(grade - 50)/10]; // 转换为字母形式的成绩 if(grade != 100) // 不是A++才需要考虑添加+-号问题 if (grade %10 > 7) lettergrade += "+"; // 个位是8、9的成绩添加+ else if(grade % 10 < 3) lettergrade += "-"; // 个位是0、1、2的成绩添加-号 } }
上面展示的代码是一个成绩统计分级显示的代码。
我们需要注意的部分有几个,
首先外层的else添加了花括号,这个是用来在一个语句块中添加多条语句。
然后是循环嵌套,在else中再次使用了if else结构,注意缩进。
最后一个问题是,内部嵌套的if中没有else结构,这种结构叫做悬垂else ,一般开发中不建议使用悬垂else
switch语句
switch也是一种条件分支结构,基本形式如下:
#include <vector> #include <string> #include <iostream> using std::vector; using std::string; using std::cin; int main() { unsigned int aCnt = 0, eCnt = 0, iCnt = 0, oCnt = 0, uCnt = 0; char ch = '\0'; switch(cin >> ch) { case 'a': ++aCnt; break; case 'e': ++eCnt; break; case 'i': ++iCnt; break; case 'o': ++oCnt; break; case 'u': ++uCnt; break; default: break; } }
上面的代码是一个元音字母统计的部分展示。
在上面的代码中我们需要读懂的有几点
首先,switch后面的括号中表达式被求值后用于比较。
其次,case标签后面跟的必须是整型的常量或常量表达式,并且没有case值之间不能有重复。
再次,上述代码中每个case都配合有一个break,但是这个break不是必须的,我们需要掌握的是从匹配到标签开始直到运行到break或语句块结束,这个switch运行规律。
比如以下这段程序表达了统计所有原因字母的数量,而不单个统计
#include <vector> #include <string> #include <iostream> using std::vector; using std::string; using std::cin; int main() { unsigned int vowelCnt = 0; char ch = '\0'; switch(cin >> ch) { case 'a': case 'e': case 'i': case 'o': case 'u': ++vowelCnt; break; default: break; } }
最后,我们需要了解的是default标签,当没有匹配到任何一个case并且有default标签的情况下,则会运行default标签。