大家好,欢迎来到IT知识分享网。
C++语言有三种基本结构:
分支结构
if分支
if语句是最常用的一种分支语句,也称为条件语句。
if(p != NULL) {
} else {
}
写else的时候一定要注意不要有模糊的内容,放置出现bug。
if的示例1:实现一个函数:输入一个年号,判断是否是闰年
//1、能否被400整除 //2、能否被4整除但是不能被100整除 if((year%4 == 0 && year%100 != 0) || year % 400 == 0) {
return true; } else {
return false; } //这里有个小技巧,if中的语句这样写效率会高一点。 //第一个括号中先判断年份是否能被4整除,不能的话就不会往下判断 //考虑命中率的问题,大部分年份被4整除的概率更高,被400整除的概率较低,所以把命中率高的判断条件放在前面
if判断示例2:判断b是否是a的倍数
if((a != 0) && b%a == 0) {
return true; } else {
return false; } //这里也要注意,判断条件一定要先判断a!=0,当a==0时剩下的判断不会再次进行,否则程序报错
以上两个实例可以说明,在if判断条件中可以使用&&来提高效率,也要注意判断条件的顺序。
switch分支
switch适用于多个分支的情况:
enum color {
RED, GREEN, BLUE }; color color1 = GREEN; switch(color1) {
case RED: {
cout<<"red"<<endl; break; } case GREEN: {
cout<<"green"<<endl; break; } case BLUE: {
cout<<"blue"<<endl; break; } default: {
cout<<"unknown"<<endl; break; } }
switch分支中有break,一旦发现有需要执行的语句,执行完后直接跳出。如果不加break,剩下的语句会继续执行下去不会停止。
switch判断条件中是个表达式,表达式的值必须是常数值,不能是其他内容。
if和switch的区别
我们从底层来区分这两者的区别。
从汇编层面上说,if判断是个层层递进的结构,是个枝杈结构,满足的话就执行,不满足就跳转到下一个枝杈,是个树形结构。而switch进入循环直接判断,一旦满足才会跳转,不满足就继续比较,类似于一个表。
在分支不是很多的情况中,if和switch相差不大,但是一旦分支非常多,那么从汇编结构来看,switch效率就明显提高。因为if是树形结构,需要层层递进执行,开始时效果高,之后效果递减。switch所有的case速度几乎是一样的。
if也有自己的优势,switch只能支持常量值固定相等的分支判断。if还支持判断区间范围。即if能做的事情比switch更多。
循环结构
三种循环语句
总共有三种循环语句:while、do while和for
while(表达式) {
循环体 } do {
循环体 }while(表达式); for(表达式1;表达式2;表达式3) {
循环体 }
我们可以从底层汇编观察这三种循环。其中do while循环效率最高,其次是while循环,最低是for循环。但是实际开发中for循环用的更多,它更加人性化,而且在面向对象编程中有优势。
多层循环
例子:输出所有形如aabb的四位完全平方数(n²)
//思路1:a:1~9;b:1~9,枚举aabb,判断是不是完全平方数 const static int length = 10; int n = 0; double m = 0; for(size_t a=0;a<length;a++) {
for(size_t b = 0;b<length;b++) {
n = a*1100 + b*11; //aabb m = sqrt(n); //开平方 if((m - int(m)) < 0.00000001) //判断开平方后是不是整数 {
cout<<n<<endl; } } }
//思路2:逆向操作,先保证n是完全平方数,然后再判断是否是aabb。这样避免因为判断平方根的时候丢失精度而且只需要单层循环 //而且求平方根的操作在计算机中是很慢的,以后要尽量避免平方根 for(size_t index = 1;;index++) //因为31*31=961,32*32=1024,index可以从32开始 {
n = index*index; if(n<1000) {
continue; //退出本次循环,继续下一次循环 } if(n>9999) {
break; //直接跳出循环 } high = n/100; //取高位的2位 low = n%100; //取低位的2位 if((high/10 == high%10) && (low/10 == low%10)) cout<<n<<endl; }
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/144374.html