单行if
int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) { cout << "n is bigger than 10" << endl; } return 0;
if后不加分号,不然没有选择作用
注意:如果if里面执行的语句只有一行,那么可以省略花括号,如果多于一行,必须加花括号,否则只会执行第一行
比如:
int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) cout << "n is bigger than 10" << endl; cout << "n比10大" << endl;
无论输入n是什么数,n比10大这行代码都会被执行,因为这句代码不在if里面
int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) { cout << "n is bigger than 10" << endl; } else { cout << "n is NOT bigger than 10" << endl; } return 0;
if语句的条件不满足就走else语句
int n = 0; cout << "Enter n :"; cin >> n; if (n > 10) { cout << "n is bigger than 10" << endl; } else if (n > 5) { cout << "n is bigger than 5 and smaller than 10" << endl; } else if (n > 0) { cout << "n is bigger than 0 and smaller than 5" << endl; } else { cout << "n < 0" << endl; } return 0;
可以有if ... else if。即后面的else没有也可以
嵌套if语句---在一个范围内更精确的选择
int n = 0; cout << "Enter n :"; cin >> n; if (n > 100)//在n > 100的访问内进行筛选 { if (n > 200) { cout << "n > 200" << endl; } else if (n > 150) { cout << "n > 150" << endl; } else { cout << "n > 100 && n <= 150" << endl; } } else if (n > 50) { cout << "n <= 100 && n > 50" << endl; } else { cout << "n <= 50" << endl; }
在第一个if下在进行选择
如果一个判断可以写成并列的两个if,也可以写成if ... else if。如果不复杂的话就用后者,因为后者的执行效率高
语法:表达式1 ? 表达式2 : 表达式3
解释:如果表达式1的值为真,执行表达式2,并返回表达式2的结果;
如果表达式1的值为假,执行表达式3,并返回表达式3的结果。
int a = 10; int b = 20; int c; c = (a > b ? a : b); cout << "c=" << c << endl;
结果是c = 20
就是把a,b中较大的值赋给c,然后打印c
int a = 10; int b = 20; (a > b ? a : b) = 100; cout << "a=" << a << endl; cout << "b=" << b << endl;
结果是a=10,b=100 (先判断a,b大小,再把其中一个赋值100并打印)
基本结构
switch(表达式) { case 结果一 : 执行语句; break; case 结果二 : case 结果三 : 执行语句; break; default 执行语句; break; }
每一行代码下都要加break;不然会一直运行下去
e.g.
int n; cin >> n; switch (n) { case 10: case 9: cout << "n == 9 || n == 10" << endl; break; default: cout << "n != 9 && n != 10" << endl; break; }
if 与 switch 的区别? switch缺点:判断分支事只能是整型或者字符型 不可以是一个区间 switch优点:结构清晰,执行效率高
满足循环条件(只要循环条件结果为真),执行循环语句
int a = 0; while (a <= 9) { cout << a << endl; a++; }
输出结果为0-9
与while的区别是先执行依次循环语句,再判断循环条件
do { statement(s); }while( condition );
for(起始表达式;条件表达式;末尾循环体){循环语句;}
起始表达式:不参加循环,用于给变量赋值,创建一个变量的声明等;
末尾循环体:第一次循环结束后的操作,然后再判断循环条件
#include<iostream> using namespace std; int main() { for (int i = 0; i < 10; i++) { cout << i << endl; } return 0; }
#include<iostream> using namespace std; int main() { int i = 0; for ( ; ; ) { if(i >= 10) { break; } cout << i << endl; i++; } return 0; }
其实这段代码和上面的一样,只要for循环语句的基本结构还在就行,里面的东西可以放外面
在循环体中再嵌套一些循环,解决一些实际问题
#include<iostream> using namespace std; int main() { //外侧循环 for (int a = 1; a <= 10; a++) { //内层循环 for (int i = 1; i <= 10; i++) { cout << "* "; } cout << endl; } return 0; }
外层循环一次,内层循环一周--天上一天,人间一年
两层循环最好不要用一样的变量
运行结果:
可以一直循环下去
#include<iostream> using namespace std; int main() { for (int j = 1; j <= 10; j++) { for (int a = 1; a <= 10; a++) { for (int i = 1; i <= 10; i++) { cout << "* "; } cout << endl; } cout << endl; } return 0; }
这就是三维的了
运行结果如下
用于跳出选择或者循环结构
使用时机:
示例1
#include<iostream> using namespace std; int main() { cout << "请选择副本难度" << endl; cout << "1.普通" << endl; cout << "2.中等" << endl; cout << "3.困难" << endl; int i = 0;//创建选择结果的变量 cin >> i; switch (i) { case 1: cout << "普通" << endl; break; case 2: cout << "中等" << endl; break; case 3: cout << "困难" << endl; break; } return 0; }
示例2
#include<iostream> using namespace std; int main() { for (int i = 0; i < 10; i++) { if (i == 5) { break;//等于5退出循环 } cout << i << endl; } return 0; }
示例3
#include<iostream> using namespace std; int main() { for (int i = 0; i < 10; i++) { for (int j = 0; j < 10; j++) { if (j == 5) { break;//退出内层循环 } cout << "* "; } cout << endl; } return 0; }
结果:
利用break退出内层循环,不影响外层循环
在循环语句中,终止本次循环中余下的语句
开始下一次循环
#include<iostream> using namespace std; int main() { for (int i = 0; i <= 100; i++) { //如果是奇数输出,偶数不输出 if (i % 2 == 0)//偶数特征 { continue; } cout << i << endl; } return 0; }
输出结果为1-100中全部的奇数
如果把continue换成break,则什么都不会输出
无条件跳转语句
语法:goto 标记;(标记一般大写)FLAG
解释:如果标记的名称存在,执行到goto语句时,会跳转到标记位置
#include<iostream> using namespace std; int main() { cout << "1.xxx" << endl; cout << "2.xxx" << endl; goto FLAG; cout << "3.xxx" << endl; cout << "4.xxx" << endl; FLAG: //注意是冒号,此处为标记点 cout << "5.xxx" << endl; return 0; }
输出结果
相当于使用了传送,从goto 直接到标记点
标记点在if里面可能很好用
不推荐用,因为会破坏结构
所有的goto语句都可以被替换成无goto的语句,只不过麻烦些
换言之:goto语句在C++是非必须的
#include<iostream> using namespace std; int main() { int i; FLAG: cin >> i; if (i >= 10) { goto FLAG; } cout << i << endl; return 0; }
这个只能输出小于10的数,可以用if语句替代