IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> C语言分支与循环的那些事 -> 正文阅读

[C++知识库]C语言分支与循环的那些事

目录

if语句

switch语句

while循环

for循环

do while循环


选择结构(分支语句)

if? ?switch

循环结构(循环语句)

for? while do....while

那什么是语句呢?

c语言规定:C语言中由一个分号 ; 隔开的就是一条语句。

if语句

语法结构:
//第一种类型
if(表达式)
 ? ?语句;
//第二种类型
if(表达式)
 ? ?语句1;
else
 ? ?语句2;
//第三种类型
if(表达式1)
 ? ?语句1;
else if(表达式2)
 ? ?语句2;
else
 ? ?语句3;

有两点要特别注意,第一点,if语句后面默认只能写一条语句,若想要多个语句需加一个大括号

第二点,第三种类型中else if 可以有多个,但if和else只能有一个!

#include <stdio.h>
int main()
{
 ? ?int a = 0;
 ? ?int b = 2;
 ? ?if(a == 1)
 ? ? ? ?if(b == 2)
 ? ? ? ? ? ?printf("hehe\n");
 ? ?else
 ? ? ? ?printf("haha\n");
 ? ?return 0; 
}

这段代码你认为打印结果是什么?haha?如果你认为是haha的话恭喜你,接下来你会有所获的。实际上C语言规定else总是与最近的可以匹配的if匹配,所以else是跟if(b==2)匹配的,所以if(a==1)不成立,后面不执行,所以这段代码不输出任何结果。

#include <stdio.h>
int main()
{
 ? ?int a = 0;
 ? ?int b = 2;
 ? ?if(a == 1)
    {
 ? ? ? ?if(b == 2)
 ? ? ? ? ? ?printf("hehe\n");
    }
 ? ?else
 ? ? ? ?printf("haha\n");
 ? ?return 0; 
}

在这种情况下else才是与第一个if匹配,这也提醒我们平时在写代码的时候记得打大括号。

//代码1
if (condition) 
{
 ? ?return x; 
}
return y;
//代码2
if(condition)
 {
 ? ?return x; 
}
else
{
 ? ?return y; 
}

这两段代码的结果是一样的吗?实际上是一样的,但第一个代码容易造成歧义,实际上如果返回了x,就不会再返回y了,因为一个函数只能有一个返回值,return后的语句也不再执行,?所以我们在平时写代码中要避免写出这种有歧义的代码。

switch语句

switch(整型表达式)
 {
 ? ?语句项;
}

语句项是什么呢?举个栗子

#include <stdio.h>
int main()
{
 ? ?int day = 0;
    scanf("%d",&day);
    ?switch(day)
 ? {
 ? ? ? ?case 1:
 ? ? ? ? ? ?printf("星期一\n");//输入1时的打印结果
 ? ? ? ? ? ?break;
 ? ? ? ?case 2:
 ? ? ? ? ? ?printf("星期二\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 3:
 ? ? ? ? ? ?printf("星期三\n");
 ? ? ? ? ? ?break; ? ?
 ? ? ? ?case 4:
 ? ? ? ? ? ?printf("星期四\n");
 ? ? ? ? ? ?break; ? ?
 ? ? ? ?case 5:
 ? ? ? ? ? ?printf("星期五\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 6:
 ? ? ? ? ? ?printf("星期六\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 7:
 ? ? ? ? ? ?printf("星期天\n"); ? ?
 ? ? ? ? ? ?break;
 ? }
 ? ?return 0; 
}

default

如果表达的值与所有的 case标签的值都不匹配怎么办? 你可以在语句列表中增加一条default子句,写在任何一个 case 标签可以出现的位置。当 switch表达式的值并不匹配所有case标签的值时,这个default子句后面的语句就会执行。
#include <stdio.h>
int main()
{
 ? ?int day = 0;
    scanf("%d",&day);
    ?switch(day)
 ? {
 ? ? ? ?case 1:
 ? ? ? ? ? ?printf("星期一\n");//输入1时的打印结果
 ? ? ? ? ? ?break;
 ? ? ? ?case 2:
 ? ? ? ? ? ?printf("星期二\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 3:
 ? ? ? ? ? ?printf("星期三\n");
 ? ? ? ? ? ?break; ? ?
 ? ? ? ?case 4:
 ? ? ? ? ? ?printf("星期四\n");
 ? ? ? ? ? ?break; ? ?
 ? ? ? ?case 5:
 ? ? ? ? ? ?printf("星期五\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 6:
 ? ? ? ? ? ?printf("星期六\n");
 ? ? ? ? ? ?break;
 ? ? ? ?case 7:
 ? ? ? ? ? ?printf("星期天\n"); ? ?
 ? ? ? ? ? ?break;
       default:
            printf("输入错误\n");
            break;               
 ? }
 ? ?return 0; 
}

default可以放在任意位置,并不是只能放在最后。还有,switch语句在使用中是允许嵌套使用的。

while循环

while(表达式)
 循环语句;

举个栗子

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
     {
        printf("%d ", i);//打印1 2 3 4 5 6 7 8 9 10
        i++;
     }

      return 0; 
}

while语句中的break和continue

break

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
     {
         if(5 == i)
         break;
         printf("%d ", i);
         i++;
     }//最终输出结果为1 2 3 4
     return 0; 
}

continue

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
     {
         if(5 == i)
         continue;
         printf("%d ", i);
         i++;
     }//打印结果为1 2 3 4 
     return 0;
}

所以continue是跳过本次循环continue后的代码。

for循环

for(表达式1;表达式2;表达式3)
 循环语句;
表达式 1
表达式 1 初始化部分 ,用于初始化循环变量的。
表达式 2
表达式 2 条件判断部分 ,用于判断循环时候终止。
表达式 3
表达式 3 调整部分 ,用于循环条件的调整。

举个栗子

#include <stdio.h>
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
     {
         printf("%d ", i);
     }//输出结果为1 2 3 4 5 6 7 8 9 10
     return 0;
}

for循环中的break和continue

break

#include <stdio.h>
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
     {
         if(5 == i)
         break;
         printf("%d ",i);
     }//输出结果为1 2 3 4
     return 0; 
}

continue

#include <stdio.h>
int main()
{
     int i = 0;
     for(i=1; i<=10; i++)
     {
         if(i == 5)
         continue;
         printf("%d ",i);
     }//输出结果为 1 2 3 4 6 7 8 9 10
     return 0;
}

这边很多人会有疑惑为什么不是1 2 3 4,这就是for循环区别于while循环,在上面while循环中continue跳过的是本次循环中continue之后的全部代码,所以i的值没有变还是5,所以下次再进入循环时i还是5,这就造成了死循环。而for循环中尽管continue跳过了此次循环,但i++的操作是在进入循环之前进行的,不在循环体内,所以在下一次进入循环前i的值就加1了,最终只有5没有打印,其它值照常打印。

for循环中需要注意的细节

1.for循环的初始化,判断,调整的三个部分是可以省略的。(for(;;)结果是死循环)
2.判断部分如果省略,意味着判断条件恒为真。平时写代码时建议不要省略
举个栗子
#include <stdio.h>
int main()
{
     int i = 0;
     int j = 0;
     for(; i<10; i++)
     {
         for(;j<10;j++)
         {
             printf("haha");
         }
     
     }
     return 0;
 }

这段代码打印结果是什么?100次haha?我相信很多人肯定会认为是100次haha,那接下了你会有所收获了。实际上这段代码的结果是输出10次haha,问题出在哪呢?首先,i=0我们进入外层循环,然后再进入内层循环,j从0加到10,循环结束,第二次i=1时再次进入外层循环,此次j没有初始化,所以j还是10,不满足进入循环条件,所以本次循环结束,最终只打印10次。这段代码提醒我们在写for循环时不要轻易省略任何一个表达式,这样容易造成程序出现bug。

再举个栗子

#include <stdio.h>
int main()
{
     int i = 0;
     int k = 0;
     for(i =0,k=0; k=0; i++,k++)
 ? ? ? ?    k++;
     return 0; 
}

这段代码循环进行了几次?死循环?实际上这段代码考察你有没有真正理解三个表达式的含义,表达式2的内容是判断条件,这边特别容易错的,表达式2是给k赋值0,而不是判断k是否与0相等,0为假,所以这个循环不会进去,循环0次。

do while循环

do
 循环语句;
while(表达式);
#include <stdio.h>
int main()
{
     int i = 10;
     do
     {
     printf("%d\n", i);
     }while(i<10);//结果为输出10
     return 0; 
}

这段代码的结果是10说明了do...while语句的特点是先执行代码,后判断条件。

因do...while使用的场景比较有限,do...while中的continue和break就不再详细介绍了,可以参考前面for循环和while循环。

本人水平有限,请大家批评指正!喜欢我就点个关注吧!

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-02 10:37:50  更:2021-08-02 10:40:12 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:46:50-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码