C语言分支循环语句

C语言的分支和循环语句

在C语言学习的过程中,分支和循环语句是比较重要的,也比较容易混淆的知识点,我分享一下自己在学习这部分知识时的一个过程。


文章目录

  • C语言的分支和循环语句
  • 前言
  • 一、选择结构
    • 1. if语句
    • 2.关系操作符
    • 3.条件操作符
    • 4.逻辑操作符
    • 5.switch语句
  • 二、循环结构
    • 1.while循环
    • 2.for循环
    • 3.do...while循环
    • 4.break和continue
    • 5.goto语句


前言

C语⾔是结构化的程序设计语⾔,这⾥的结构指的分别是顺序结构、选择结构、循环结构。C语⾔是能够实现这三种结构的,其实我们如果仔细分析,我们⽇常所⻅的事情都可以拆分为这三种结构或者这三种结构的组合,以便于我们去解决问题。
我们可以使⽤ if 、 switch 实现分⽀结构,使⽤ for 、 while 、 do while 实现循环结构。


一、选择结构

1. if语句

1.1 if
if语句的语法为

if(表达式)
语句

if语句用于判断表达式的真假,表达式成立为真(1),执行语句;表达式不成立为假(0),语句不执行。
if我们一般翻译为“如果…”,我们可以理解为如果(表达式)是真的,则(语句)发生。反之,同上。

例如:输入一个整数,判断是否为负数

#include <stdio.h>
int main()
{
     int a=0;
     scanf("%d",&a);
     if(a%2==0)//判断偶数条件
         printf("%d是偶数\n ",a);
    return 0; 
}

1.2 else
else我们按字面意思就是“否则”,一般和if一起使用,if…else…表示“如果”…“否则”…
我们先了解一下if…else…语句的语法为:

if(表达式)
语句1
else
语句2

我们使用起来也是比较方便,例如,我们判断一个数为奇数或者偶数

#include <stdio.h>
int main()
{
     int a=0;
     scanf("%d",&a);
     if(a%2==0)//判断偶数条件
         printf("%d是偶数\n ",a);
         else
         printf("%d是奇数\n",a);
    return 0; 
}

注意: 在if...else..中if和else并非只能控制一条语句,如果我们想让其控制多条语句,我们只需要为其控制的加上{ }
例如:
if( 表达式)
{ 语句1;语句2;…}
else
{语句1;语句2;…}

1.3 if的嵌套
在if…else… 语句中,我们可以连用if和else来解决一些多重判断的问题。
例如:我们要判断输入的三个数能否构成三角形,如果能构成,那么此三角形为等边三角形,等腰三角形还是普通三角形,如果构成不了则输出“不能构成三角形”

#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d ",&a,&b,&c)
        if(a+b>c&&a+c>b&&b+c>a)//判断构成三角形的条件
         {
            if(a==b&&a==c)
            printf("此三角形为等边三角形\n");
            else if(a==b||a==c||b==c)
            printf("此三角形为等腰三角形\n");
            else
            printf("此三角形为普通三角形\n");
        }
        else 
        {
            printf("不能构成三角形\n");        
        }
    return 0;
}

注意: else采用的就近原则与未匹配if配对,在我们写代码时,要注意的是让else和与其配对的if对齐,才不会写多了找不到与其对应的if,使得代码运行起来给出意想不到的结果。

2.关系操作符

C 语⾔⽤于⽐较的表达式,称为 “关系表达式”,⾥⾯使⽤的运算符就称为“关系运算符”,主要有下⾯6个。

1、 > 大于运算符
2、 < ⼩于运算符
3、 >= ⼤于等于运算符
4、 <= ⼩于等于运算符
5、 == 相等运算符
6、 != 不相等运算符

  • 关系表达式通常返回的是0或1,用来表示真假。常用于 if 或 while 结构。

***注意:***"=="为相等运算符而 不是“=”赋值运算符,两者是不一样的,但是按照我们以前的惯性思维,特别容易把相等运算符 写成赋值运算符,虽然程序也可以运行起来,但是出现的不是我们预期的结果。

3.条件操作符

条件操作符也称为三目操作符,需要接受三个操作数的,其形式如下:

exp1 ?exp2 :exp3

条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
例如:我们输入两个整数,让其比较两个数的大小,找出较大值。

#include <stdio.h>
int main()
{
 int a = 0;
 int b = 0;
 scanf("%d %d", &a, &b);
 int m = a>b ? a : b;//a>b为真则输出a,为假则输出
 printf("%d\n", m);
 
 return 0;
}

相对于我们用 if 语句来判断要简练的多,主要看自己写代码的习惯,两种都是可行的。

4.逻辑操作符

逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有三个运算符。

  1. &&:逻辑与运算符,可表示为并且的意思(两侧的表达式都为真,则为真,否则为假)
  2. || :逻辑或运算符,可表示为或者的意思(两侧的表达式至少有一个表达式为真,则为真,否则为假 )
  3. ! :逻辑取反运算符,可理解为改变单个表达式的真假

***注意:***C语言中,非0为真,0为假

4.1逻辑与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
例如: 我们说周一到周五为工作日,我们该怎么表示。

#include <stdio.h>
int main()
{
     int day=0;
     scanf("%d ",&day);
     if(day>=1&&day<=5)
     printf("星期%d是工作日",day);
    return 0;
}

我们输入的整数必须要满足大于等于1并且小于等于5,必须同时才会输出。如果&&左边的表达式为假,则不会在判断右边的表达式了,我们称之为短路

4.2逻辑或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假。
例如: 我们说周六和周日为休息日,我们可以表达为:

#include <stdio.h>
int main()
{
     int day=0;
     scanf("%d ",&day);
     if(day==6||day==7)
     printf("星期%d是休息日",day);
    return 0;

不管是星期六还是星期日,都为休息日,表达式一般都由左往右执行,如果 || 左边的表达式为真,则不会判断右边的表达式,只要有一个表达式为真则为真。

4.3逻辑取反运算符
! 为逻辑取反运算符,也就是相反的意思,如果表达式a为真,则 !a为假;表达式a为假,则 !a 为真。就是把真的变为假的,把假的变为真的 。

5.switch语句

除了 if 语句外,C语⾔还提供了 switch 语句来实现分⽀结构。
switch 语句是⼀种特殊形式的 if…else 结构,⽤于判断条件有多个结果的情况。它把多重的 else if 改成更易⽤、可读性更好的形式。

switch(表达式)
{
case 1:语句1;
case 2:语句2;

default:语句n
}

上⾯代码中,根据表达式计算出来不同的值,执⾏相应的 case 分⽀。如果找不到对应的值,就执⾏ default 分⽀。
1、switch 后的 expression 必须是整型表达式
2、case 后的值,必须是整形常量表达式
3、case 和后边的数字之间必须有空格
4、 每⼀个 case 语句中的代码执⾏完成后,需要加上 break ,才能跳出这个switch语句

5.1switch语句中的case和default的顺序问题
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实际需求的就可以。不过我们通常是把 default ⼦句放在最后处理的。

二、循环结构

1.while循环

while语句语法结构为

while(表达式)
{
语句1;
语句2;

}

while括号内的表达式为判断条件,表达式为假(0),则直接结束循环;表达式为真(1),则继续执行下面的语句。

2.for循环

for循环的语法形式为:

for(表达式1;表达式2;表达式3)
{
语句1;
语句2;

}

表达式1: ⽤于循环变量的初始化
表达式2 :⽤于循环结束条件的判断
表达式3 :⽤于循环变量的调整

3.do…while循环

do…while循环的语法形式为:

do
语句;
while(表达式);

while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环;⽽ do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执⾏ while 后的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。

4.break和continue

在循环执⾏的过程中,如果某些状况发⽣的时候,需要提前终⽌循环,这是⾮常常⻅的现象。C语⾔中提供了 break 和 continue 两个关键字,就是应⽤到循环中的。
• break 的作⽤是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
• continue 的作⽤是跳过本次循环中 continue 后边的代码,在 for 循环和 while 循环中有所差异的。
接下来我们看一下while和for循环中的break和continue。

4.1while中的break和continue

①break举例

#include <stdio.h>
int main()
{
      int i = 1;
      while(i<=10)
 {
       if(i == 5)
          break;//当i等于5后,就执⾏break,循环就终⽌了
        printf("%d ", i);
           i = i+1;
 }
      return 0;
}

运行结果:
在这里插入图片描述

当程序走起来打印了1 2 3 4 后,当i等于5的时候,循环在 break 的地⽅终⽌,不再打印,不再循环。因为 break 的作⽤就是永久的终⽌循环,只要 break 被执⾏, break 外的第⼀层循环就终⽌了。那以后我们在循环中,想在某种条件下终⽌循环,则可以使⽤ break 来完成我们想要的效果。

②continue举例
continue 是继续的意思,在循环中的作⽤就是跳过本次循环中 continue 后边的代码,继续进⾏下⼀次循环的判断。
我们相对于break的例子,把break换成continue,将会是什么样呢?

#include <stdio.h>
int main()
{
     int i = 1;
     while(i<=10)
 {
     if(i == 5)
         continue; //当i等于5时,将执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
                  //因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
     printf("%d ", i);
          i = i+1;
 }
     return 0;
}

到这⾥我们就能分析出来, continue 可以帮助我们跳过某⼀次循环 continue 后边的代码,直接到循环的判断部分,进⾏下⼀次循环的判断,如果循环的调整是在 continue 后边的话,可能会造成死循环。
4.2for中的break和continue

①break举例
for循环中的break和 while 循环中的 break ⼀样, for 循环中的 break 也是⽤于终⽌循环的,不管循环还需要循环多少次,只要执⾏到了 break ,循环就彻底终⽌。
我们将上述的while中的例子改为for,如下所示:

#include <stdio.h>
int main()
{
      int i = 1;
      for(i=1; i<=10; i++)
 {
       if(i == 5)
          break;
        printf("%d ", i);
 }
      return 0;
}

运行结果:
在这里插入图片描述

break 的作⽤是永久的终⽌循环,如果我们在某个条件发⽣的时候,不想再继续循环的时候,就可以使⽤ break 来完成终止。

②continue举例
我们将①中的break换成continue,如下:

#include <stdio.h>
int main()
{
      int i = 1;
      for(i=1; i<=10; i++)
 {
       if(i == 5)
          continue;//这里跳过后面的打印,来到了i++调整部分;
        printf("%d ", i);
 }
      return 0;
}

运行结果:
在这里插入图片描述
我们可以看出,在 for 循环中 continue 的作⽤是跳过本次循环中 continue 后的代码,直接去到循环的调整部分。如果当某个条件发⽣的时候,本次循环⽆需再执⾏后续某些操作的时候,就可以使⽤continue 来实现。

5.goto语句

C语⾔提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同⼀个函数内跳转到设置好的标号处。
例如:

#include <stdio.h>
int main()
{
 printf("hehe\n");
 goto next;//从这里将直接跳至next:
 printf("haha\n");
 
next:
 printf("跳过了haha的打印\n"); 
 return 0;
}

goto 语句如果使⽤的不当,就会导致运行时在函数内部随意乱跳转,打乱程序的执⾏流程,所以我们的建议是能不⽤尽量不去使⽤;但是 goto 语句也不是⼀⽆是处,在多层循环的代码中,如果想快速跳出使⽤ goto相比break 就⾮常的⽅便了。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值