目录
前言
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
知道了其大概的分类之后,我们便可以开始具体的剖析啦!!!
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语句。
每一个选择都是一首诗,一幅画,一段旅程。
而每个选择也将会带来不一样的结果。
如果你好好学习,在校招时拿一个好offer,那么将走上人生巅峰。
如果你不学习,毕业等于失业,只能回家烤地瓜。
这就是选择!
在c语言中,0表示假,非0表示真。而if的语法结构通常来说有三种:
语法结构:
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
下面我们将针对三种不同的语法结构给出示例:
当条件满足对应的执行条件时(即表达式非0为真时),会执行对应符合条件的语句。
#include
//单分支
int main()
{
//如果年龄大于等于18-成年人
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年人\n");
return 0;
}
#include
int main()
{
//如果年龄大于等于18-成年人,否则打印-未成年人
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年人\n");
else
printf("未成年人\n");
return 0;
}
#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;
}
我们先来看看下面的代码
int main()
{
int age = 0;
scanf("%d", &age);
if (age >= 18)
printf("成年了\n");
printf("可以开车了\n");
return 0;
}
输出结果如下:
原因就是缺少代码块。那代码块又是什么呢?
#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;
}
观察下列代码,你觉得结果会是什么呢?
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。让我们看看运行结果:
那为什么没有输出结果呢
这便是悬空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;
}
由此可见,优秀的代码风格会降低犯错的风险,适当的使用代码块{},会使你的代码逻辑更加稳健
代码如下:
//代码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)的话,编译器就直接报错了,因为不能把变量赋给一个常量值。
这里给大家提供两个练习题:
//判断一个数是否为奇数
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;
}
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;
}
以上代码提供给大家参考,检验一下自己所学的知识。
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;
}
那么switch的语法结构就出来了。
switch(整型表达式)
{
语句项;//是一些case语句
}
当需求一变,全新的代码便出来了
#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;
}
此时,输入1-5,输出的是weekday,6-7则输出的是weekend.而break语句的实际效果则是把语句列表划分为不同的分支部分。这就是break在switch语句中的作用。(在每一个case语句中加上case语句)
当 switch 表达式的值并不匹配所有 case 标签的值时,这个 default 子句后面的语句就会执行。 所以,每个switch语句中只能出现一条default子句。 但是它可以出现在语句列表的任何位置,而且语句流会像执行一个case标签一样执行default子句。
由于我们发现生活中很多的实际的例子是:同一件事情我们需要完成很多次。 那我们怎么做呢? C语言中给我们引入了: while 语句,可以实现循环。
//while 语法结构
while(表达式)
循环语句;
while语句执行的流程图:
实现在屏幕上打印1-10的数字。代码如下:
#include
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i);
i = i+1;
}
return 0;
}
//break 代码实例
#include
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
代码输出结果如下:
break在while循环中的作用:
其实在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
所以:while中的break是用于永久终止循环的。
//continue 代码实例1
#include
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
输出结果如下:
再来看一个代码实例:
//continue 代码实例2
#include
int main()
{
int i = 1;
while(i<=10)
{
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
}
return 0;
}
输出结果如下:
continue在while循环中的作用就是:
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
这里提供一个清理缓冲区的代码:
#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;
}
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1为初始化部分,用于初始化循环变量的。
表达式2为条件判断部分,用于判断循环时候终止。
表达式3为调整部分,用于循环条件的调整。
#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循环中直接终止循环,直接结束。
1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
int i = 0;
//前闭后开的写法
for(i=0; i<10; i++)
{}
//两边都是闭区间
for(i=0; i<=9; i++)
{}
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;
}
do
循环语句;
while(表达式);
循环至少执行一次,使用的场景有限,所以不是经常使用。
#include
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
与while循环中的一样,在循环中只要遇到break,就停止后期的所有的循环,直接终止循环。
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳转到while语句的判断部分。进行下一次循环的入口判断。
今天的内容就分享到这里了,喜欢的友友们可以点赞,评论,收藏哦!
希望所分享的东西可以帮助到您......