分支语句和循环语句

本文详细介绍了C/C++中的if语句、单分支、双分支、多分支以及嵌套结构,包括else的匹配规则。同时涵盖了switch语句、循环结构(while, do-while, for)及其控制语句。重点讲解了如何避免常见错误并提升代码风格。
摘要由CSDN通过智能技术生成

目录

if语句

语法结构
 //1.单分支
if(表达式)
    语句;
//2.双分支
if (表达式)
    语句1;
 else
     语句2;
//3.多分支
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;
​
​
//如果条件成立,要执行多条语句,需要使用花括号,使这些语句成为一个代码块
#include <stdio.h>
int main()
{
    if(表达式1)
    {
        语句列表1;
    }
    else
    {
        语句列表2;
    }
    return 0;
}
//这里的一对{}就是一个代码块
//例如成绩这个多分支结构
int main()
{
    float score ;
    scanf("%f", &score);
​
    if (score < 60)
        printf("不及格\n");
    else if (score < 70)
        printf("及格\n");
    else if (score < 80)
        printf("良好");
    else if (score < 90)
        printf("优秀");
    else
        printf("天才");
    
    return 0;
}

悬空else

注:else与它最近的if匹配,和与哪个if对齐无关

int main()
{
    int a = 0;
    int b = 2;
    if (a == 1)
        if (b == 2)//else和这个if匹配,所以,不打印任何值
            printf("hehe\n");
    else  //不对齐容易出错
            printf("haha\n");
​
    return 0;
}

代码风格--推荐书籍《高质量C/C++》

代码书写形式对比

//代码1
if (condition){
    return x;
}
return y;
//代码2
if(condition)
{
    return x;
}
else
{
    return y;
}
//代码3
int num=1;
if(num==5)
    printf("hehe\n");
//代码4
int num=1;
if(5==num)
    printf("hehe\n");
//最好使用代码2和代码4

//1.判断一个数是否为奇数


    int a;
    scanf("%d" , &a);
    if (a % 2 ==1 )
    {
        printf("是奇数\n");
    }
    else
    {
        printf("不是奇数");
    }
​
    return 0;
}
​
​
//2.输出1-100之间的奇数
int main()
    {
​
        for(int i=1;i<=100;i++)//或者:for(int i=1;i<=100;i+=2)
            if (i % 2 == 1)      //   printf("%d",i);            
            {
                printf("%d,", i);
            }
            
        return 0;
    }

switch 语句

switch语句也是一种分支语句,常常用于多分支的情况

//语法结构
switch(整形表达式)//字符型也可以,存储的是ASCII值
{
        case 整形常量表达式:
            语句;
}
//不使用break无法实现真正的分支,会顺序执行




int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day) //day决定入口
    {
    case 1:
        printf("星期一\n", day);
    case 2:
        printf("星期二\n", day);
    case 3:
        printf("星期三\n", day);
    case 4:
        printf("星期四\n", day);
    case 5:
        printf("星期五\n", day);
    case 6:
        printf("星期六\n", day);
    }
    return 0;
}

//使用break语句
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)         //day决定入口
    {
    case 1:
        printf("星期一\n", day);
        break;         //break决定出口
    case 2:
        printf("星期二\n", day);
        break;
    case 3:
        printf("星期三\n", day);
        break;
    case 4:
        printf("星期四\n", day);
        break;
    case 5:
        printf("星期五\n", day);
        break;
    case 6:
        printf("星期六\n", day);
        break;      //最后一个break可以不加,最好加上,编程好习惯
    }
    return 0;
}

//break不是非要加,根据实际情况,并不是语法上的错误
//例如:1-5输出工作日,6-7输出休息日
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)         //day决定入口
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n", day);
        break;
    case 6:
    case 7:
        printf("休息日\n", day);
        break;
    }
    return 0;
}

default子句

当switch表达式的值并不匹配所有case标签的值时,这个default子句后的语句就会被执行,所以每个switch语句只能出现一条default语句,但是它可以出现在语句列表的任何位置。在每个switch语句中都放一条default子句时个好习惯,可以加break,也可以不加。

//例如
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)         //day决定入口
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n", day);
        break;
    case 6:
    case 7:
        printf("休息日\n", day);
        break;
    default:
        printf("输入错误\n");
        break;
    }
    return 0;
}

//练习:求m,n的值
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:
        m++;   //m=3
    case 2:
        n++;   //n=2
    case 3:
        switch (n)
        {
            //switch 允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;   //m=4
            n++;  //n=3
            break;  //break跳出的是自己的switch语句
        }
    case 4:
        m++;  //m=5
        break;
    default:
        break;
    }
    return 0;
}

注:break跳出的是自己所在的switch语句

循环语句

  • while

  • do while

  • for

while 循环

//while 语法结构
while(表达式)//表达式为真,执行代码块
{
    代码块;
}
//例如:在屏幕上打印1-10的数字。
int main()
{
    int i = 1;
    while (i <= 10)
    {
        printf("%d ", i);
        i++;
    }
    return 0;
}

while循环中的continue和break

  • 只要遇到break,就停止后期所有的循环

int main()
{
    int i = 1;
    //while循环中break用于永久的终止循环
    while (i <= 10)
    {
        if (i == 5)
            break;
        printf("%d ", i);
        i++;
    }
    return 0;
}

  • continue用于终止本次循环

//while循环中,continue的作用是跳过本次循环continue后的代码,直接去判断部分,看是否进行下一次循环
    
while (i <= 10)
    {
        if (i == 5)
            continue;
        printf("%d ", i);
        i++;
    }
    return 0;

getchar()

//不断的从键盘输出一个字符
//ctrl+Z--getchar 读取结束
//getchar读取任何字符,包括\n
 
int main()
{
    int ch=0;//getchar()从键盘获取一个字符
    //printf("%c\n", ch);//输出这个字符
    //putchar(ch);putchar()输出这个字符
    //printf("%d", ch);//输出这个字符的ASCII码值
    while ((ch = getchar()) != EOF)
    {
        putchar(ch);
    }
    return 0;
}


int main()
{
    char passward[20] = { 0 };
    printf("请输入密码:>");
    scanf("%s", passward);
    printf("请确认密码:(Y/N)>");
    int ch = getchar();
    if (ch == 'Y')
    {
        printf("确认成功");
    }
    else
    {
        printf("确认失败");
    }
​
    return 0;
}
   

for 循环

初始化过程只被执行一次

//语法结构
for(初始化;判断条件;调整)
{
    循环语句;
}

for循环中break,continue语句

//break:终止整个循环
int main()
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            break;
        printf("%d ", i);
    }
    return 0;
}

//continue:结束本次循环,直接跳到调整部分
int main()
{
    int i;
    for (i = 1; i <= 10; i++)
    {
        if (i == 5)
            continue; 
        printf("%d ", i);
    }
    return 0;
}

for语句的循环控制变量

  1. 不可在for循环体内修改循环变量,防止for循环失去控制

  2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法

int main()
{
    int arry[10] = { 0 };
    int i = 0;
    for (i = 0; i < 10; i++)//前闭后开区间,循环10次
    {
        printf("%d ", arry[i]);
    }
    return 0;
}
​
​
  1. for循环中,初始条件,判断部分,和调整部分都可以省略,当省略判断部分时,会进入死循环(最好不要省略):

//例如:
int main()
{
    int i = 0;
    int j = 0;
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 3; j++)
        {
            printf("hehe\n");
        }
    }
    return 0;
}


int main()
{
    int i = 0;
    int j = 0;
    for (; i < 3; i++)//省略初始条件部分
    {
        for (; j < 3; j++)//省略初始条件部分 i=0循环结束后,j始终为3,所以只执行3次。
        {
            printf("hehe\n");
        }
    }
    return 0;
}

//判断循环了几次
​
int main()
{
    int i = 0;
    int k = 0;
    for (i = 0, k = 0; k = 0; k++, i++)//k=0为赋值为0,所以为假,循环0次
    {
        k++;
    }
    return 0;
}

do while 循环

//语法结构
do
   循环语句;
while(表达式);
//例如:
int main()
{
    int i = 1;
    do
    {
        printf("%d ", i);
        i++;
    } while (i <=10);
    return 0;
}

do while 循环break,continue语句

//break终止循环
int main()
{
    int i = 1;
    do
    {
        if (i == 5)
            break;
        printf("%d ", i);
        i++;
    } while (i <=10);
    return 0;
}

//continue 跳出本次循环到判断条件(同while)
int main()
{
    int i = 1;
    do
    {
        if (i == 5)
            continue;
        printf("%d ", i);
        i++;
    } while (i <=10);
    return 0;
}//输出结果为循环

do 语句的特点

循环至少执行一次

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值