Bootstrap

史上最强C语言教程----分支和循环(2)

目录

前言

2.1.3 练习

2.2 switch语句

2.2.1 在switch语句中的break

2.2.2 defalt子句

3 循环语句

3.1 while循环

3.1.1 while语句中的break和continue


前言

对于一个C语言菜鸟来说,说出这些话无疑是大言不惭的,但我有信心也有能力为大家讲好C语言,系统的带大家入门C语言,也希望大家能够相信我,支持我,在接下来的几个月中,我会持续更新这个系列,当然,我的笔记也会同步更新的,感谢大家的支持!如果觉得内容还不错的话,点一个小小的赞和支持吧!

2.1.3 练习

判断一个数是否为奇数(代码+运行)

 这个练习呢,是有关于上一节讲的知识,上一节讲的是if判断语句,所以安排了一个有关于if判断的题,题不难,但还是希望大家可以亲自动手敲一下,毕竟实践出真知嘛!

2.2 switch语句

switch语句也是一种分支语句。 常常用于多分支的情况。

很多小伙伴就问了,我们为什么要使用switch语句呢?用if语句进行多分支判断不就行了嘛?

给出下面的情况,让你写出相应的代码!

输入1,输出星期一

输入2,输出星期二

输入3,输出星期三

输入4,输出星期四

输入5,输出星期五

输入6,输出星期六

输入7,输出星期日

如果用if ...else if 进行多分支的话形式太复杂,代码太过于冗长,那我们就得有不一样的语法形式。 这就是switch 语句。这也是我们需要switch语句的原因!

switch语句的语法形式:

switch(整型表达式)

{

   语句项;

}

语句项是什么呢?

//是一些case语句:

//如下:

case 整形常量表达式:

       语句;

2.2.1 在switch语句中的break

在switch语句中,我们没办法直接实现分支,搭配break使用才能实现真正的分支。

比如:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
        printf("星期一!");
        break;
    case 2:
        printf("星期二!");
        break;
    case 3:
        printf("星期三!");
        break;
    case 4:
        printf("星期四!");
        break;
    case 5:
        printf("星期五!");
        break;
    case 6:
        printf("星期六!");
        break;
    case 7:
        printf("星期天!");
        break;
    }
    return 0;
}

执行截图 

这个是正确的代码,假如我们把上面的break全部去掉,看一下程序执行截图!

 switch语句后面的()内可以跟整型变量、整型常量、整形表达式(当然这些也可以是字符型,不过字符型的本质仍然是整型),而case后面只能跟整型常量,或者字符型常量,必须是常量,const修饰的常变量是不可以的,因为其本质上仍是变量,switch语句的执行结果是一个整型数值,然后通过case进行匹配,如果匹配一致,就执行case后面的语句,在这个时候我们需要注意,只要没有遇到break,程序就会一直执行下去,此时无论后面的case是否匹配都将执行,直到跳出语句块,这些由上面的运行截图就可以看出,如果没有break语句是无法实现其分支功能的,这个地方希望大家牢记,即switch本身并不具有分支功能,是通过case和break共同协调实现的,其中,case实现的是匹配功能,或者说是判定功能,而break实现的是分支功能,当然,也可以说break实现的是退出功能。

有时候我们的需求变了:

1. 输入1-5,输出的是“weekday”;

2. 输入6-7,输出“weekend”;

所以我们的代码就应该这样实现了:

#include <stdio.h>
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday");
        break;
    case 6:
    case 7:
        printf("weekend");
        break;
    }
    return 0;
}

break语句 的实际效果是把语句列表划分为不同的分支部分!

注意:case语句的后面不一定非要加break!需求不同,代码不同!

编程好习惯:

在最后一个 case 语句的后面加上一条 break语句。(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。

2.2.2 defalt子句

如果表达的值与所有的case标签的值都不匹配怎么办呢? 其实也没什么,结构就是所有的语句都被跳过而已。 程序并不会终止,也不会报错,因为这种情况在C中并不认为是个错误。 但是,如果你并不想忽略不匹配所有标签的表达式的值时该怎么办呢? 你可以在语句列表中增加一条default子句,把下面的标签 default: 写在任何一个 case 标签可以出现的位置。 当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

编程好习惯:

在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。

default语句可前可后,但我们一般习惯把它放在最后,同时case最好按照从小到大来排,方便后续代码的查看和修改,同时最好把执行频率高、容易被匹配的放在前面,在一定程度上能够提高代码的执行效率!

接下来给大家展示一个题,大家先看一下代码,思考一下最后输出的m和n应该是多少。

#include <stdio.h>
int main()
{
    int n = 1;
    int m = 2;
    switch (n)
    {
    case 1:
        m++;
    case 2:
        n++;
    case 3:
        switch (n)
        {//switch允许嵌套使用
        case 1:
            n++;
        case 2:
            m++;
            n++;
            break;
        }
    case 4:
        m++;
        break;
    default:
        break;
    }
    printf("m = %d, n = %d\n", m, n);
    return 0;
}

 可以看到,最后的输出结果是 m = 5 ; n = 3 ;为什么会得出这样的结果呢,接下来我给大家分析一下!

switch(n),因为n = 1 ,所以执行case 1 后面的语句,m++之后m的值变成了3,因为后面没有break语句,所以继续向后执行,接下来执行case 2后面的语句,n++之后n的值变为了2,因为后面没有break,所以继续向下执行,执行case 3后面的语句,switch(n),此时n的值为2,所以执行case 2后面的语句,m++之后m的值变成了4,n++之后n的值变成了3,后面执行break,注意此时break只能退出一层,即退出之前的case(n),这个地方希望大家能够记住,无论break用在switch还是接下来讲的循环中,均只能退出一层switch或者一层循环,退出switch(n)之后,继续执行case 4后面的语句,m++后m的值变成了5,此时出现了break,退出上面的switch(day),然后此时m的值为5,n的值为3,输出后即可结束程序!

3 循环语句

  1. while
  2. for
  3. do while

3.1 while循环

我们已经掌握了if语句:

if(条件)

          语句;

当条件满足的情况下,if语句后的语句执行,否则不执行。 但是这个语句只会执行一次。 由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构

while(表达式)

       循环语句;

给大家举个例子吧!在屏幕上打印1~100的数字:

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

上面的代码已经帮我了解了 while 语句的基本语法,那我们再了解一下:

3.1.1 while语句中的break和continue

break介绍

直接上代码帮助大家感悟break的作用!

 总结:

其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

所以:while中的break是用于永久终止循环的。相信大家在演示的代码并结合上面的运行图也能感受出来break在while()循环中的作用,即当i=5的时候,在判断if(5==i)时,判断结果为真,执行break,退出这一层循环,然后执行return 0语句退出程序。

continue介绍

直接上代码帮助大家感悟continue的作用!

总结:

continue在while循环中的作用就是:

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行, 而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。在这个程序中,当i=5时进行判断5==i后,就执行continue语句,结束本次循环,重新进入到判定部分,即while(i<11),然后又重复的进行判断if(5==i),再接着重复上面的的流程,所以进入了死循环。

好了,今天的分享就到这了,如果大家觉得不错的话,点一个小小的赞和关注吧!谢谢!内容在持续更新中哦!

;