【无标题】C语言基础知识——分支与循环

C语言中有三大结构:顺序借口,选择结构,循环结构。其中选择结构又称分支结构。下面我将基础的介绍一下分支与循环结构。




分支结构

1. if语句

if语句的基础语法如下:

if(表达式)
语句

如果一个表达式成立,它就会返回一个非零值,一般情况下,这个非零值为1;如果为假则会返回0;在C语言中,0代表假,非0代表真。当表达式为真时程序就会执行下面的语句,表达式为假时则不进行任何操作,这里的语句只是一个单一语句,如果有多条语句就要先用"{}"花括号括起,使之成为一个复合语句。如果想让程序在表达式为假的情况下执行其他语句,则需要引用else,使if语句变成

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

的形式,当表达式为真时执行语句1,为假时执行语句2;
比如:输入一个数,判断它是正数还是非正数,并打印出结果,代码如下:

#include<stdio.h>//引用标准输入输出头文件
int main()
{
    int a = 0;//变量初始化
    scanf("%d", &a);
    if (a > 0)
        printf("这个数是正数");
    else
        printf("这个数不是正数");
    return 0;
}

运行结果如下:

4
这个数是正数

if else 语句还支持多层嵌套以面对现实生活中更复杂的的逻辑判断。
比如:输入一个数,判断它是正数还是负数或零,如果是正数,判断它是基数还是偶数,并打印出结果,代码如下:

#include<stdio.h>//引用标准输入输出头文件
int main()
{
    int a = 0;//变量初始化
    scanf("%d", &a);
    if (a > 0)
    {
        printf("这个数是正数\n");
        if (0 == a % 2)
            printf("这个数是偶数\n");
        else
            printf("这个数是奇数\n");
    }
    else
    {
        if (0 == a)
            printf("这个数是0");
        else
            printf("这个数是负数");
    }
    return 0;
}

输出结果为:

3
这个数是正数
这个数是奇数

我们也可以把else下的花括号{}省略变成

#include<stdio.h>//引用标准输入输出头文件
int main()
{
    int a = 0;//变量初始化
    scanf("%d", &a);
    if (a > 0)
    {
        printf("这个数是正数\n");
        if (0 == a % 2)
            printf("这个数是偶数\n");
        else
            printf("这个数是奇数\n");
    }
    else if (0 == a)
        printf("这个数是0");
    else
        printf("这个数是负数");

    return 0;
}

注意:如果有多个if else,要记住else总是和最近的if相匹配。
比如:

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    if (1 == a)
        if (2 == b)
            printf("Hello");
    else
            printf("Word");
    return 0;
}

代码中的else其实是和if(2 == b)相匹配的,更清楚的代码形式是

#include<stdio.h>
int main()
{
    int a = 0;
    int b = 0;
    if (1 == a)
    {
        if (2 == b)
            printf("Hello");
        else
            printf("Word");
    }
    return 0;
}

2. switch语句

因为switch有开关的意思,它有时也被叫做“开关语句”,switch的语法如下:

switch(表达式)
{
case 数值1:语句1;break;
case 数值2:语句2;break;
case 数值3:语句3;break;
……………………
default:语句;break;

}

程序会把表达式的值与下面的数值相比较,一旦它们相等,就会执行后面对应的语句。并使用break跳出switch语句,如果没有符合的值则执行default后的语句.
这里要注意的是,这里的表达式必须是整型表达式,数值也必须是整型;除此之外,数值也必须是常量,而不能是变量。其中case和default并没有严格的顺序结构,你也可以把default写在case前。




循环结构

1. while语句

while语句的语法如下:

while(表达式)
{
    语句
}

如果表达式为真,则一遍又一遍地循环执行程序,表达式为假,则会跳出循环。
比如,编写一个程序,打印1~10的数:

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

程序运行结果为下:

1 2 3 4 5 6 7 8 9 10

2. for语句

for语句是C语言中使用最普遍的循环语句,其语法形式如下:

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

它的运行逻辑是先用表达式1为变量设置初始值,当表达式2成立时,执行下方的语句,再执行表达式3,对变量进行调整。比如,编写一个程序,找到1~100里所有3的倍数。

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

执行结果如下:

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99

3.do while语句

do while语句的语法如下:

do{
语句
}while(表达式)

do while语句是使用最少的循环语句,一般只用于一些特别场合。与while、for语句之间的明显差别是,如果条件刚开始就不成立,while和for一次都不会执行下方的语句,而是会直接跳出循环,而do while会先执行下方的语句,之后再依据表达式的结果去判断是否进行下一次循环;如果表达式为真就进行下一次循环,如果为假就跳出循环。那些特别的场合利用的就是do while的这个特点

下面我们就举个例子。

输入一个数,判断它是一个几位数:

#include<stdio.h>
int main()
{
    int i = 0;
    int k = 1;
    printf("请输入初始值\n");
    scanf("%d", &i);
    do
    {
        i = i / 10;
        if (i)
            k++;
    } while (i);
    printf("这个数是%d位数", k);
    return 0;
}

即使输入的数字是0,也能打印出“这个数是1位数”,这是for while所替代不了的。




转向语句

说到循环语句,自然离不开转向语句:break;continue;goto;
他们都可以不同程度地使程序跳出循环,

  • break的作用是永久地终止循环,只要brak被执行就直接跳出循环,执行下面的语句

  • continue则是仅跳过当前循环,如果表达式成立继续执行下一循环

  • goto的作用是使程序跳转到预先设置好的标点处。

      #include<stdio.h>
      int main()
      {
          int i = 1;
          while (i <= 100)
          {
              if (0 == i % 3)
                  printf("%d ", i);
              i++;
          }
          printf("\n");
          for (i = 1; i < 100; i++)
          {
    
              if (66 == i)
                  break;
              if (0 == i % 3)
                  printf("%d ", i);
          }
          return 0;
      }
    

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63

如果把break改成continue会怎么样呢?

结果变成了:

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 66 69 72 75 78 81 84 87 90 93 96 99

3 6 9 12 15 18 21 24 27 30 33 36 39 42 45 48 51 54 57 60 63 69 72 75 78 81 84 87 90 93 96 99

最有意思的是continue与while或者do while结合;

#include<stdio.h>
int main()
{
    int i = 1;
    while (i <= 100)
    {
        if (0 == i % 3)
            printf("%d ", i);
        i++;
    }
    printf("\n");
    i = 1;
    do
    {

        if (0 == i % 3)
            printf("%d ", i);
        if (66 == i)
            continue;
        i++;
    } while (i <= 100);
    return 0;
}

当程序执行时,我们发现程序陷入了死循环,不停地打印“66”,让我们分析一下:

当i = 66时,它会执行continue,跳出这个循环,然后由于没有执行i++,下一次循环i仍然是66,于是就会陷入死循环。

for语句中的循环变量调整每次循环结束都会执行的,但while和do while的循环变量调整环节是在循环中进行的,容易因为continue而跳过,进而陷入死循环。

至于goto语句,由于它会让程序跳转到其它位置,打乱程序原有的执行流程,因此大多数教材都建议尽量不使用;不过goto并不是一无是处,在面临多层循环嵌套时,一个break只能跳出一层循环,但goto可以一次性跳出多层循环,此时使用goto就非常方便了。

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值