【c语言系列】分支语句&&循环语句

目录

前言

1. 什么是语句?

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

2.1 if语句

2.1.1 if语句的语法结构  

1.第一种结构示例

2.第二种结构示例

3.第三种结构示例

补充

(1)代码块 

 (2)悬空else

2.1.2 if语句形式的对比

2.1.3 if语句练习题 

1.判断一个数是奇数

2.输出1-100之间的奇数

2.2 switch语句(多分支常适用)

switch的语法结构

switch语句中的break

default子句

3. 循环语句

 3.1 while循环

 3.1.1 while语句中的break和continue

break

continue

3.1.2 清理缓冲区

3.2 for循环

3.2.1 for的语法结构

3.2.2 for循环的执行流程图:

3.2.3 for循环中的break和continue

3.2.4 for语句的循环控制变量

3.2.5 一些for循环的变种

3.3 do...while()循环

3.3.1 do语句的语法:

3.3.2 执行流程图

3.3.3 do语句的特点

3.3.4 do while循环中的break和continue


前言

        提前掌握好c语言中的分支和循环语句部分,会让你对语言的理解更上一层楼,那么我们首先了解一下它们都有哪些分类:

        分支语句                                      循环语句                                          goto语句

                        if                                                    while

                        switch                                            for

                                                                              do while 

知道了其大概的分类之后,我们便可以开始具体的剖析啦!!!


1. 什么是语句?

c语言是一种结构化的程序设计语言,便于设计实现程序的各种结构方式。

通俗的来讲,c语言中的一个分号即为一条语句。

C语句可分为以下五类:

  •  表达式语句
  •  函数调用语句
  •  控制语句
  •  复合语句
  •  空语句
#include 
int main()
{
	3 + 5;//表达式语句
	printf("zzz\n");//函数调用语句
	;//空语句 - 有时候我们需要一条语句,但是这条语句什么都不需要做,就可以使用空语句
	return 0;
}

本文主要介绍的是控制语句。

控制语句用于控制程序的执行流程,以实现程序的各种结构方式(c语言支持三种结构:顺序结构、选择结构、循环结构),它们由特定的语句定义符组成,C语言有种控制语句。

可分成以下三类:

  •   条件判断语句也叫分支语句:if语句、switch语句;
  •   循环执行语句:do while语句、while语句、for语句;
  •   转向语句:break语句、goto语句、continue语句、return语句。

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

每一个选择都是一首诗,一幅画,一段旅程。

而每个选择也将会带来不一样的结果。

【c语言系列】分支语句&&循环语句_第1张图片

如果你好好学习,在校招时拿一个好offer,那么将走上人生巅峰。

如果你不学习,毕业等于失业,只能回家烤地瓜。

这就是选择

【c语言系列】分支语句&&循环语句_第2张图片

2.1 if语句

2.1.1 if语句的语法结构  

在c语言中,0表示假,非0表示真。而if的语法结构通常来说有三种:

语法结构:
if(表达式)
    语句;

if(表达式)
    语句1;
else
    语句2;
//多分支    
if(表达式1)
    语句1;
else if(表达式2)
    语句2;
else
    语句3;

下面我们将针对三种不同的语法结构给出示例:

当条件满足对应的执行条件时(即表达式非0为真时),会执行对应符合条件的语句。

1.第一种结构示例
#include
//单分支
int main()
{
	//如果年龄大于等于18-成年人
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年人\n");
	return 0;
}

 【c语言系列】分支语句&&循环语句_第3张图片

2.第二种结构示例
#include
int main()
{
	//如果年龄大于等于18-成年人,否则打印-未成年人
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年人\n");
	else
		printf("未成年人\n");
	return 0;
}

 

 

【c语言系列】分支语句&&循环语句_第4张图片

3.第三种结构示例
#include
int main()
{
	int age = 0;
	while(scanf("%d", &age)!=EOF);//引用了多组输入,便于展示代码效果
	if (age < 18)
		printf("未成年\n");
	else if (age <= 30)//这里大于18的条件可省略,因为小于18会进入到上一个判断条件中,下同
		printf("青年\n");
	else if (age <= 50)
		printf("中年\n");
	else if (age <= 70)
		printf("中老年\n");
	else if (age <= 99)
		printf("老年\n");
	else
		printf("老寿星\n");
	return 0;
}

 【c语言系列】分支语句&&循环语句_第5张图片

 

 

 【c语言系列】分支语句&&循环语句_第6张图片

  • 补充
(1)代码块 

我们先来看看下面的代码

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
		printf("成年了\n");
		printf("可以开车了\n");
		return 0;
}

输出结果如下:

【c语言系列】分支语句&&循环语句_第7张图片

 【c语言系列】分支语句&&循环语句_第8张图片

 原因就是缺少代码块。那代码块又是什么呢?

#include 
int main()
{
    if(表达式)
   {
        语句列表1;
   }
    else
   {
        语句列表2;
   }
    return 0; }

即所谓的代码块就是将一段代码括起来的{}。那么上述代码的正确形式如下:

int main()
{
	int age = 0;
	scanf("%d", &age);
	if (age >= 18)
	{
		printf("成年了\n");
		printf("可以开车了\n");
	}
		return 0;
}

【c语言系列】分支语句&&循环语句_第9张图片

 (2)悬空else

 观察下列代码,你觉得结果会是什么呢?

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
		if (b == 2)
			printf("hehe\n");
	else
			printf("haha\n");
	return 0;
}

相信对于大部分新手来说,不仔细分析的话应该会认为a=0,if语句中的条件为假,执行else语句,并最终输出结果haha。让我们看看运行结果:

【c语言系列】分支语句&&循环语句_第10张图片

 那为什么没有输出结果呢

这便是悬空else,else是和它离得最近的一个if进行匹配。而上述代码中的else与它最近的一个if匹配,第一个if的条件表达式为假的话,它后面的那条语句,也就是下一个if语句,自然就不执行了,当然与它匹配的else也就不会执行了,直接return 0返回了,所以什么都没打印。

将上述代码小改一下:

int main()
{
	int a = 0;
	int b = 2;
	if (a == 1)
	{
		if (b == 2)
		{
			printf("hehe\n");
		}
	}
	else
			printf("haha\n");

	return 0;
}

 【c语言系列】分支语句&&循环语句_第11张图片

 由此可见,优秀的代码风格会降低犯错的风险,适当的使用代码块{},会使你的代码逻辑更加稳健

2.1.2 if语句形式的对比

代码如下:

//代码1
if (condition) 
{
    return x; 
}
return y;

//代码2
if(condition) 
{
    return x; 
}
else
{
    return y; 
}

代码2对比代码1来讲,可读性更高,更容易让人理解,逻辑清晰。

再来看一段代码:

#include 
int main()
{
	int a = 10;
	//if (a == 5)
	if(5 == a)
		printf("hehe\n");

	return 0;
}

两个if语句的选择,当然是if(5==a)更好,避免出错。当判断一个变量和常量的值是否相等时,常把常量放在等式的左边。

if语句中的判断条件写成(5==a)可以避免我们把写成(a=5)而导致出错,因为a=5是把5赋值给a,这样表达式的结果永远为真,该判断就没意义了,但是(5=a)的话,编译器就直接报错了,因为不能把变量赋给一个常量值。

【c语言系列】分支语句&&循环语句_第12张图片

 【c语言系列】分支语句&&循环语句_第13张图片

2.1.3 if语句练习题 

这里给大家提供两个练习题:

1.判断一个数是奇数
//判断一个数是否为奇数
int main()
{
	int n = 0;
	scanf("%d", &n);
	if (n % 2 == 1)
	//if(1 == n%2)
		printf("YES\n");
	else
		printf("NO\n");

	return 0;
}

 【c语言系列】分支语句&&循环语句_第14张图片

2.输出1-100之间的奇数
int main()
{
	//while
	int i = 1;
	while (i <= 100)
	{
		if (i % 2 == 1)
			printf("%d ", i);
		i++;
	}
	return 0;
}
//第二种方法
int main()
{
	//while
	int i = 1;
	while (i <= 100)
	{
		printf("%d ", i);
		i = i + 2;//i+=2;
	}
	return 0;
}

【c语言系列】分支语句&&循环语句_第15张图片

 以上代码提供给大家参考,检验一下自己所学的知识。

2.2 switch语句(多分支常适用)

switch语句也是一种分支语句,常常用于多分支的情况当代码出现较多分支情况,导致代码看上去过于冗余的时候,就可以使用switch语句。例如:

#include 
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;
}

【c语言系列】分支语句&&循环语句_第16张图片

那么switch的语法结构就出来了。

  • switch的语法结构

switch(整型表达式)
{
语句项;//是一些case语句
}

【c语言系列】分支语句&&循环语句_第17张图片

  • switch语句中的break

当需求一变,全新的代码便出来了

#include 
//switch代码演示
int main()
{
    int day = 0;
    scanf("%d", &day);
    switch (day)
    {
    case 1:
    case 2:
    case 3:
    case 4:
    case 5:
        printf("weekday\n");
        break;
    case 6:
    case 7:
        printf("weekend\n");
        break;
    }
    return 0;
}

【c语言系列】分支语句&&循环语句_第18张图片

 此时,输入1-5,输出的是weekday,6-7则输出的是weekend.而break语句的实际效果则是把语句列表划分为不同的分支部分这就是breakswitch语句中的作用。(在每一个case语句中加上case语句)

  • default子句

当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。

3. 循环语句

  • while
  • for
  • do while

【c语言系列】分支语句&&循环语句_第19张图片

 3.1 while循环

由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。

//while 语法结构
while(表达式)
 循环语句;

while语句执行的流程图:

【c语言系列】分支语句&&循环语句_第20张图片

实现在屏幕上打印1-10的数字。代码如下:

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

【c语言系列】分支语句&&循环语句_第21张图片

 3.1.1 while语句中的break和continue
  • break
//break 代码实例
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
    if(i == 5)
    break;
    printf("%d ", i);
    i = i+1;
 }
 return 0;
}

 代码输出结果如下:

【c语言系列】分支语句&&循环语句_第22张图片

 break在while循环中的作用

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

所以:while中的break是用于永久终止循环的。

  • continue
//continue 代码实例1
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
 if(i == 5)
 continue;
 printf("%d ", i);
 i = i+1;
 }
 return 0;
}

输出结果如下: 

【c语言系列】分支语句&&循环语句_第23张图片

 再来看一个代码实例:

//continue 代码实例2
#include 
int main()
{
 int i = 1;
 while(i<=10)
 {
    i = i+1;
    if(i == 5)
    continue;
    printf("%d ", i);
 }
    return 0;
}

输出结果如下: 

【c语言系列】分支语句&&循环语句_第24张图片

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

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

3.1.2 清理缓冲区

这里提供一个清理缓冲区的代码:

#include 

int main()
{
	char password[20];
	printf("请输入密码:>");
	scanf("%s", password);//scanf函数在读取字符串的时候,遇到空格就不再读取
	int ch = 0;
	while (getchar() != '\n')
	{
		;
	}

	printf("请确认(Y/N):");
	ch = getchar();

	if ('Y' == ch)
		printf("确认成功\n");
	else
		printf("确认失败\n");

	return 0;
}

【c语言系列】分支语句&&循环语句_第25张图片

3.2 for循环

3.2.1 for的语法结构

for(表达式1; 表达式2; 表达式3)
 循环语句;

表达式1为初始化部分,用于初始化循环变量的。

表达式2为条件判断部分,用于判断循环时候终止。

表达式3为调整部分,用于循环条件的调整。

3.2.2 for循环的执行流程图:

【c语言系列】分支语句&&循环语句_第26张图片

3.2.3 for循环中的break和continue
#include 
int main()
{
 int i = 0;
 for(i=1; i<=10; i++)
 {
 if(i == 5)
 break;
 printf("%d ",i);
 }
 return 0;
}

for循环中遇到continue,会跳过continue后面的代码,直接去循环的调整部分,与while循环中的continue还是有区别的。break在for循环中直接终止循环,直接结束。

3.2.4 for语句的循环控制变量

1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。

2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。

int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
3.2.5 一些for循环的变种

for循环中的初始化部分,判断部分,调整部分是可以省略的,

但是不建议初学时省略,容易导致问题。

#include 
int main()
{
 //代码1
 for(;;)
 {
 printf("hehe\n");
 }
    //for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问
题。
 //代码2-使用多余一个变量控制循环
 int x, y;
    for (x = 0, y = 0; x<2 && y<5; ++x, y++)
   {
        printf("hehe\n");
   }
 return 0;
}

3.3 do...while()循环

3.3.1 do语句的语法:
do
 循环语句;
while(表达式);
3.3.2 执行流程图

【c语言系列】分支语句&&循环语句_第27张图片

3.3.3 do语句的特点

循环至少执行一次,使用的场景有限,所以不是经常使用。

#include 
int main()
{
 int i = 10;
 do
 {
 printf("%d\n", i);
 }while(i<10);
 return 0;
}
3.3.4 do while循环中的break和continue

与while循环中的一样,在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。

continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,

而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。

 今天的内容就分享到这里了,喜欢的友友们可以点赞,评论,收藏哦!

希望所分享的东西可以帮助到您......

你可能感兴趣的:(c语言系列--万物的开始,c语言,开发语言)