0
点赞
收藏
分享

微信扫一扫

【初级c语言】分支和循环语句

Python芸芸 2022-01-17 阅读 111

一.前言

1.什么是语句?

二.分支语句(选择结构)

我们先来看一个生动形象例子:
如果你好好学习,校招时拿一个好offer,走上人生巅峰。
如果你不学习,毕业等于失业,回家卖红薯。
这就是选择!
在了解选择之后,我们需要学习选择结构的语法

1.if语句

1.1语法结构(以下为if语句的语法结构)

(一)最简单的if结构

#include<stdio.h>
int main(){
	if(表达式)
	   语句1;
    else
       语句2; 	   	 
	return 0;
}

(二)多分支if结构

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

例子:

#include <stdio.h>
int main()
{
 int age = 0;
    scanf("%d", &age);
    if(age<18)
   {
        printf("少年\n");
   }
    else if(age>=18 && age<30)
   {
        printf("青年\n");
   }
    else if(age>=30 && age<50)
   {
    printf("中年\n");
   }
    else if(age>=50 && age<80)
   {
        printf("老年\n");
   }
    else
   {
        printf("老寿星\n");
   }
    
}

在这里需要做出一些解释的是,if或者else后面的语句,可以是一条,也可以是多条,如果是多条的话,则必须用{}结构引起,若为一条,那用不用看你心情(滑稽)

1.2其他的一些注意问题(重点)

在了解了这个规则之后,问题就变得清晰了许多
在初学c语言的过程中,一些初学者常常会犯一些马虎的小毛病
例如if(b==2)常常会写丢一个=变为if(b=2)
解释:第一个为判断句,判断b是否等于2,从而代表值0或者1。第二个为赋值句,将b赋值为2的操作,在将b赋值之后,b的值作为判断语句真假的条件,这个语句就为真了(非0

所以为了避免一些憨憨问题,我们可以写为if(2==b),这样的话即使你写错了写成了if(2=b),编译也是不通过的,这样可以快速发现bug并修改。

<一条华丽的分割线路过并吃了两口代码>

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

请问那这种情况输出的结果应该是什么呢?
其实是什么也不输出的,那这究竟是为什么呢?
原因就是else是和离他最近的if匹配的
所以题目中的else是和if(b==2)匹配的故输出结果没有

改进后的代码(这样的话代码是不是清晰规范了好多呢😊)

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

2.switch结构

我们来举个栗子,来提前了解一下switch结构

2.1switch语法结构

switch(整型表达式) {
    case 常量表达式;
    语句;
    //break;
}

ok啊兄弟们,相信语法你们都懂了吧,那我给大家再举个栗子吧

以下为我第一次学的时候写出来的代码

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d",&day)
        switch(day)
   {
        case 1printf("星期一\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");    
   }
    return 0; 
 }

我当时就心想这不就是小菜吗,运行的时候却发生了猫腻,大家可以试试
在这里插入图片描述在这里插入图片描述
不用想了肯定是bug了,后来通过教材了解到break这个东东。

2.2 break

将我们的代码更进为

#include <stdio.h>
int main()
{
    int day = 0;
    switch(day)
   {
        case 1printf("星期一\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; }

当输入为1时,碰上case1执行完语句,直接break跳出分支
当输入为2时,碰上case 2执行完语句,碰上break跳出分支

以此类推就好了
那我们写的错误代码,是怎么样运行机制呢?
我通过吉林大学的教材,找到了流程图,和pad图,方便大家理解
相信通过图片大家都了解了,这种情况的运行机制
那么break是必须要加的吗?
显然不是的,某些情况中,合理添加和删除break可以使代码更简洁
假设我们更改一下需求

我们的代码就可以写为

#include <stdio.h>
//switch代码演示
int main()
{
    int day = 0;
    switch(day)
   {
        case 1case 2:
        case 3:
        case 4:
        case 5:
            printf("weekday\n");
            break;
        case 6:
        case 7:
            printf("weekend\n");
            break;
   }
    return 0; }

这样的话,是不是会更方便一些呢!

2.3 defalut子句(其用法与case一模一样,注意事项皆一样)

文章略长,未完待续哦。

举报

相关推荐

0 条评论