C语言简明分析选择结构和循环结构的使用

 更新时间:2022年04月21日 14:36:07   作者:清风自在 流水潺潺  
C语言条件控制语句选择结构,是属于计算机的语言编辑,有在C语言条件控制中的语句选择结构的存在,即是C语言条件控制语句选择结构,循环控制语句是一个基于C语言的编程语句,该语句主要有while循环语句、do-while循环语句和for循环语句来实现循环结构

一、程序中的选择结构(if)

if的用法

上代码:

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

下面为输出结果:

if ... else ...剪裁与组合

裁剪

  • if 可以不带 else 分支,条件为真时,则执行对应的语句
  • if 和 else 都可以不使用 { } ,此时每个分支只对应一条语句

组合

  • else 后的语句可以是另一个 if ...else ...
  • 多个 if ...else ...组合在一起可描述多路选择分支

上代码:

#include <stdio.h>
int main()
{
    short a = 2;
    short b = 2;
    int c = a - b;
    if( c > 0 )
        printf("a > b\n");
    else if( c == 0 )
        printf("a == b\n");
    else
        printf("a < b\n");
    return 0;
}

下面为输出结果:

小结

  • 分支结构是程序设计语言中的重要结构
  • C语言中通过 if ...else ...对代码进行分支执行
  • 可以对 if ... else ...进行剪裁和组合,描述更多的执行分支
  • if 分支可以独立存在,else 分支不能独立存在,必须跟在 if 之后
  • else 和最近的 if 匹配(就近原则)

二、switch多分支选择语句

switch-更简洁的多分支选择结构

上代码:

#include <stdio.h>
int main()
{
    int a = 1;
    int b = 2;
    char sign = 0;
    printf("Input a sign: ");
    scanf("%c", &sign);
    switch(sign)
    {
        case '+':
            printf("%d + %d = %d\n", a, b, a + b);
            break;
        case '-':
            printf("%d - %d = %d\n", a, b, a - b);
            break;
        case '*':
            printf("%d * %d = %d\n", a, b, a * b);
            break;
        default:
            printf("Unsupported Sign: %c\n", sign);
    }
    return 0;
}

下面为输出结果:

switch 实验小结

  • switch 仅能适用于离散变量或值(整数值)
  • case 是分支入口,匹配成功后执行 case 下的语句
  • 当语句全部执行后,需要使用 break 跳出执行分支
  • default 分支不是必须的(类似于 else 分支不是必须的)

switch 语句的分支合并技巧

上代码:

#include <stdio.h>
int main()
{
    int num = 0;
    printf("Input a number: ");
    scanf("%d", &num);
    switch( num )
    {
        case 1:
        case 2:
        case 3:
        case 4:
        case 5:
            printf("%c\n", 'A' + (num - 1));
            break;
        default:
            printf("Invalid Input\n");
    }
    return 0;
}

下面为输出结果:

小结

  • switch 是一种更简洁的分支选择结构
  • switch 仅能适用于整数(小数不可用)
  • case 是分支入口,匹配成功后执行case下的语句
  • 当语句全部执行后,需要使用 break 跳出执行分支
  • 多个 case 可合并在一起,执行相同的语句

三、while循环结构

while - 循环结构的直接支持

 

上代码:

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

下面为输出结果:

进阶while循环

  • 循环体可能一次也不执行(如: while( 0 ) )
  • 循环条件必须被改变,否则循环永远不会结束(如:while( 1 ) )
  • if 语句(不带 else )可以看作特殊的循环(最多执行1次循环体)
  • if 语句与 while 语句可相互组合嵌套实现复杂功能

上代码:

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

下面为部分输出结果:

小结

  • 循环结构是程序设计语言中的重要结构
  • C语言中通过while 对代码进行循环执行
  • 可以对if while进行剪裁和组合,实现更复杂的功能
  • 循环体中需要有代码改变循环条件,否则循环不会结束
  • while语句之间可以相互嵌套,构成多重循环
  • while语句和if语句之间也可以相互嵌套

if 语句可以看作只循环一次的 while 语句

while语句可以看作扩展的 if 语句

while(...)
    if(...)
        while(...)
        {
        }

四、do...while 与 for

do...while 循环结构

do...while 的构成与执行

  • do 是循环的开始,while 是循环的结束
  • do..while 可以看做一条语句,需要以分号结束
  • do...while 是否继续循环依赖于括号中的循环条件
  • do...while 至少执行一次循环体

上代码:

#include <stdio.h>
int main()
{
    int sum = 0;
    int input = 0;
    int i = 0;
    while( i > 100 )
        printf("while( i > 0 )\n");
    do
        printf("do...while( i > 0 )\n");
    while( i > 100 );
    do
    {
        printf("Input: ");
        scanf("%d", &input);
        sum = sum + input;
    } while( sum < 100 );
    printf("sum = %d\n", sum);
    return 0;
}

下面为输出结果:

这里注意一个问题:while 和 do...while 的区别,可以看到 i 为 0 时,while 循环里面的不会执行,而 do...while 会执行一次。

循环结构的套路

  • 初始化循环变量
  • 在循环体中改变循环变量
  • 判断循环条件是否为真

真:执行循环体

假:结束循环

for循环结构(更简洁的循环结构)

for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )

{

2.循环体;

}

可以用下面的图表示:

上代码:

#include <stdio.h>
int main()
{
    int esum = 0;
    int osum = 0;
    int i = 0;
    for(i=1; i<=100; i=i+2)
    {
        osum = osum + i;
        esum = esum + (i + 1);
    }
    printf("osum = %d\n", osum);
    printf("esum = %d\n", esum);
    return 0;
}

下面为输出结果:

for循环注意事项

  • for循环的各个部分(0,1,2,3)都是可选的
  • 花括号可省略,省略花括号则循环体仅为一条语句
  • for( ...; ...; ... )其中的分号不可省略

for ( 0.初始化循环变量; 1.循环条件; 3.改变循环变量 )

{

2.循环体;

}

上代码:

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

下面为输出结果:

小结

  • do...while是至少执行一次循环体的循环结构
  • do...while 先执行循环体再判断循环条件
  • for是 while的进化,在写法上更加精简
  • for 与 while 相同,先判断循环条件再执行循环体

五、break和continue

再论break

  • break 能够强制结束当前结构,阻止程序向下执行
  • switch分支选择结构, break立即结束switch
  • 循环结构,break立即结束循环(忽略循环条件的真假)

上代码:

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

下面为输出结果:

再上一段代码:

#include <stdio.h>
int main()
{
    int target = 30;
    int input = 0;
    for(;;)
    {
        printf("Input: ");
        scanf("%d", &input);
        if( input == target )
            break;
        else if( input < target )
            printf("It's small!\n");
        else if( input > target )
            printf("It's big!\n");
    }
    printf("Target = %d\n", input);
    return 0;
}

下面为输出结果:

break遵循最近匹配原则

  • break 总是与离它最近的对应关键字匹配
  • 关键词指的是在C语言中有特殊含义的单词,如:while,for,switch等。
  • 注:C语言中的变量名不能是关键字

上代码:

#include <stdio.h>
int main()
{
    int i = 0;
    for(i=1; i<=10; i=i+1)
    {
        switch( i % 2 )
        {
        case 0:
            printf("%d is even number!\n", i);
            break;
        case 1:
            printf("%d is odd number!\n", i);
            break;
        }
    }
    return 0;
}

下面为输出结果:

可以看到,break 对应的是 switch ,而不是 for,这就是 break 的最近匹配原则。

再上一段代码:

#include <stdio.h>
int main()
{
    int k = 0;
    int input = 0;
    printf("Input: ");
    scanf("%d", &input);
    switch( input % 2 )
    {
        case 0:
            printf("case 0\n");
            for(k=0; k<=2; k=k+1)
                if( k )
                    break;
        break;
        case 1:
            printf("case 1\n");
        break;
    }
    return 0;
}

下面为输出结果:

如果把case 0 下面的 break 去掉一个,那么输出结果就会变成下面这样:

这还是因为 break 的最近匹配原则,去掉一个 break 后,break匹配的就是 for 了,所以也会输出第二个 case 后面的内容。

continue一循环体终结者

  • continue 是C语言中的关键字之一
  • continue 立即结束当前循环体,直接进入下一轮条件判断
  • continue 与 break 不同,并不会结束整个循环

上代码,打印1000以内能被7整除的整数,并统计数量:

#include <stdio.h>
int main()
{
    int i = 0;
    int n = 0;
    for(i=1; i<1000; i=i+1)
    {
        if( i % 7 )
            continue;
        printf("%d ", i);
        n = n + 1;
    }
    printf("\n");
    printf("Count: %d\n", n);
    return 0;
}

下面为输出结果:

小结

  • break 忽略循环条件的真假,立即结束循环
  • break 总是与离它最近的对应关键字匹配
  • continue 结束当前循环体,直接进入下一轮条件判断
  • continue 结束循环体的单次执行,并不会结束整个循环

到此这篇关于C语言简明分析选择结构和循环结构的使用的文章就介绍到这了,更多相关C语言选择与循环结构内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++Primer笔记之关联容器的使用详解

    C++Primer笔记之关联容器的使用详解

    本篇文章对C++Primer 关联容器的使用进行了详细的分析介绍。需要的朋友参考下
    2013-05-05
  • Linux中使用C语言的fork()函数创建子进程的实例教程

    Linux中使用C语言的fork()函数创建子进程的实例教程

    fork是一个在Linux系统环境下专有的函数,现有的进程调用fork后将会创建一个新的进程,这里我们就来看一下Linux中使用C语言的fork()函数创建子进程的实例教程
    2016-06-06
  • c++ 虚继承,多继承相关总结

    c++ 虚继承,多继承相关总结

    这篇文章主要介绍了c++虚继承,多继承相关总结,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下
    2021-03-03
  • C语言实现扫雷游戏源代码

    C语言实现扫雷游戏源代码

    这篇文章主要为大家详细介绍了C语言实现扫雷游戏源代码,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-03-03
  • C语言程序设计之指针的应用详解

    C语言程序设计之指针的应用详解

    为了让大家能够更准确的了解C语言中指针的使用,本文为大家准备了四个指针相关的例题,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2022-11-11
  • c语言实现http下载器的方法

    c语言实现http下载器的方法

    这篇文章主要介绍了c语言实现http下载器的相关知识,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • OpenCV实现人脸检测功能

    OpenCV实现人脸检测功能

    这篇文章主要为大家详细介绍了OpenCV实现人脸检测功能,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • C++中的vector使用详解及重要部分底层实现

    C++中的vector使用详解及重要部分底层实现

    本篇文章会对vector的语法使用进行详解,同时,还会对重要难点部分的底层实现进行讲解,其中有vector的迭代器失效和深拷贝问题,希望本篇文章的内容会对你有所帮助
    2023-07-07
  • C++定义和初始化string对象实例详解

    C++定义和初始化string对象实例详解

    这篇文章主要为大家介绍了C++定义和初始化string对象实例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • C++宏函数和内联函数的使用

    C++宏函数和内联函数的使用

    本文主要介绍了C++宏函数和内联函数的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07

最新评论