C语言之对结构的认知(上)

一.对结构的介绍

众所周知,C语言是一种结构化的程序设计语言。从我们日常的使用中不难看出,其中最基本且最长见的结构有三种,顺序结构选择结构循环结构。通过这三种结构的组合使用,我可以实现复杂的逻辑和功能。

  • 顺序结构:程序按顺序执行,不发生跳转。
  • 选择结构:依据条件是否满足,有选择的执行相应的功能。
  • 循环结构:依据条件是否满足,循环多次执行某段代码。

二.顺序结构

顺序结构是最为简单的它是指:程序按照顺序执行的。从程序的起始开始,按照代码的编写顺序依次执行每一条语句,直至程序结束。这是我们从学习代码开始就在使用的一种结构。

比如,我们最开始学习的:

#include <stdio.h>

int main() 
{
    // 顺序执行的代码块
    printf("Hello, ");
    printf("world!");
    return 0;
}

三.选择结构

如果你对选择结构不熟悉,那你肯定熟悉分支结构,这二者只是叫法不同罢了。选择(分支)顾名思义,就是进行对接下来运行程序的选择,它是通过if语句或者switch语句来实现的。

1.if语句

1.1.if语句的基本形式

if ( 表达式 )
    语句

当表达式为真时,执行语句,反之则不执行。很显然这里它起到了选择的作用。

eg:

#include<stdio.h>

int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a = 6)
        printf("true");
    return 0;
}

这个代码用if语句判断,就是当你输入的值为6时,输出 true ,反之直接结束程序。

1.2.if...else...

当然,if语句在使用时往往会和 else 连用,形成 if...else... 形式。解读为,如果......否则......

eg:

#include<stdio.h>

int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a = 6)
        printf("true");
    else
        print("false");
    return 0; 
}

这串代码就表示,当你输入的值为6时,输出 true,如果不是6,就输出 false。

else 的加入可以让我们更好的进行判断,满足我们的需求。

1.3.分支中多语句的使用

ifelse 语句中都是默认只控制一条语句的。但是平时我们在使用 if 语句时,其分支里面一般不会只写一条语句,往往都是多条语句才能实现我们的所需。

eg:

#include<stdio.h>

int main()
{
    int a = 0;
    scanf("%d", &a);
    if (a > 6)
    {
        printf("true\n");
        printf("你输入的数大于 6.\n");
    }
    else
    {
        printf("false\n");
        printf("你输入的数小于 6.\n");
    }
    return 0; 
}

这串代码就表示,如果你输入的数大于6,输出:true,并换一行输出:你输入的数大于6;反之输出:false,然后换行输出:你输入的数小于6. 

当你的分支语句中放入不止一条语句时, 由于,在 ifelse 语句中都是默认只控制一条语句。所以我们必须用 {} 将我们输入的语句括起来,使其成为一个代码块。就像你在写 main() 时那样。

1.4.if 语句的嵌套与排版

如果我们要实现一个稍微复杂一点的功能,往往只用一个 if 语句是不够的,需要多个 if 语句的嵌套,形成连续的判断。

eg:

#include <stdio.h>

int main() 
{
    int a = 0;
    scanf("%d", &a);
    if (a > 6) 
    {
        printf("true\n");
        if(a < 50)
        {
            printf("诶哟,很不错哦。\n");
            printf("你输入的数大于6,但小于10.\n");
        }
        else
        {
            printf("你输入的数挺大的。\n");
            printf("你输入的数已经大于50.\n");
        }
    }
    else
    {
        printf("false\n");
        printf("你输入的数挺小的。\n");
    }
    return 0;
}

这串代码就是很简单的一个 if 语句的嵌套使用,当你输入的数大于 6,就进入第一个 if 语句。先输出一个 true 。同时,这个数若小于50,就进入第二个 if 语句,输出对应的信息:“ 诶哟,很不错哦。你输入的数大于6,但小于10。” 这个数若大于50,则输出else中对应的信息。当你输入的数小于6,那么不进入第一个 if 语句,直接进入 else 语句中,输出:“false  你输入的数挺小的。”

if 语句的嵌套,说简单点就是,初步判断后没有满足我们的需求,需要再次进行判断,才能完成所需,有时可能还需要套不止两层。

看到这里你一定发现了我上面的代码写的是很整齐的,其实每一个合格的码农都应这样,这是写代码的一个很好的习惯,不仅美观,还有利于我们更快更准确的理解代码。使用 tab键 一次就可以后退四个字符,这样很容易把我们的代码排版整齐。

但是如果你不这样整齐排列,写成这个样子:

#include <stdio.h>

int main() 
{
int a = 0;
scanf("%d", &a);
if (a > 6) 
{
printf("true\n");
if(a < 50)
{
printf("诶哟,很不错哦。\n");
printf("你输入的数大于6,但小于10。\n");
}
else
{
printf("你输入的数挺大的。\n");
printf("你输入的数已经大于50。\n");
}   
}
else
{
printf("false\n");
printf("你输入的数挺小的。\n");
}
return 0;
}

同样的代码,绝对没有整齐排列时理解快,不是吗?如果有人给你看这种代码,你能忍受吗?或许心中就有无数个草泥马在奔腾了吧。

排版整齐也可以有效的避免if与else匹配错误的问题,记住一条规则,如果有多个 if 和 else ,else 总是跟最接近的 if 匹配。而不是单单对齐的那个。

2.switch语句

除了 if 语句 外,选择结构中还有用 switch语句 来实现分支。其实,switch语句 也是一种特殊的if...else... 语句,往往用于判断条件有多个结果的情况。有时,我们可以用 switch语句 来代替多重else  if 的使用,这样能更为方便和简洁。

2.1.switch语句的基本形式

switch语句的基本形式如下:

switch (expression) 
{
    case value1: 
        statement
    case value2: 
        statement
    default: 
        statement
}

expression ,value 都必须为整形表达式。根据我们输入 expression 的值来选取不同的case分支,运行分支中的表达,如果输入的 expression 的值不是任何一个 case 所含有的,那就运行default 分支。这里的default并不是必须存在的,要根据自己的实际情况确定。

2.2.switch语句中的break.

对于一个简单的 switch语句

根据输入的值1~7来判断今天星期几。

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:    
        printf("星期⼀\n");
    case 2:
        printf("星期⼆\n");    
    case 3:
        printf("星期三\n");
    case 4:
        printf("星期四\n");
    case 5:
        printf("星期五\n");
    case 6:
        printf("星期六\n");
    case 7:
        printf("星期天\n"); 
    default:
        printf("请输入正确的值。");
    }
    return 0;
}

我们让这个程序运行:

当我们输入 3 时,发现程序从 case 3 开始运行但是没有在输出 星期三 后退出 switch语句,而是继续向下运行输出。 

为让程序运行达到我们的预期,我们需要引进一个 break 函数,使程序在输出对应的星期后退出switch语句 。

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期⼀\n");
        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;
}

这样程序的运行就可以达到我们的预期:

当然,你的switch语句中是否使用break,还要根据实际情况而定,并不是一定要用的。

如:输入数字1~5,输出工作日,输入数字6或7,输出休息日。

#include <stdio.h>

int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("工作日\n");
        break;
    case 6:
    case 7:
        printf("休息日\n");
        break;
    }
    return 0;
}

 当你输入的数字为1~5时,程序不会退出 switch语句 ,而是一直运行,直到遇见第一个 break

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值