C++三种基本结构

C++三种基本结构C 语言有三种基本结构 分支结构 if 分支 if 语句是最常用的一种分支语句 也称为条件语句

大家好,欢迎来到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

(0)
上一篇 2025-04-27 12:33
下一篇 2025-04-27 12:45

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信