文章目录
前言
本文主要学习分支语句与循环语句
一、什么是语句?
C语言可分为一下五类?
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
后续主要介绍控制语句
控制语句主要用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成。
C语言共有九种控制语句,可分为一下三类:
- 条件判断语句 – 分支语句
- if选择语句
- switch选择语句
- 循环执行语句
- do while循环语句
- while循环语句
- for循环语句
- 转向语句
- break语句
- goto语句
- continue语句
- return语句
二、分支语句(选择结构)
1)if语句
if语句流程图
if语句语法结构
#include <stdio.h>
int main()
{
// 语法结构:
if(表达式)
{
语句1;
...
}
else if(表达式)
{
语句2;
...
}
else
{
语句3;
...
}
return 0;
}
#include <stdio.h>
int main()
{
int a = 1;
int b = 3;
if(a == 1)
if(b == 2)
printf("a=1,b=2");
else
printf("a=1,b=3");
return 0;
}
// 打印a=1,b=3
这里为什么会有打印结果呢??
解:因为这和else的匹配规则有关系,else的匹配规则和最近的if进行匹配,这里是与if(b==2)这条if语句进行匹配的
#include <stdio.h>
// 改进后的代码
int main()
{
int a = 1;
int b = 3;
if(a == 1)
if(b == 2)
{
printf("a=1,b=2");
}
else
{
printf("a!=1");
}
return 0;
}
编程好习惯
建议:在进行分支语句时,无论代码少与多都应写在一个代码块中`
好处是:代码可读性更强,逻辑更清晰
小结:
1、表达式结果为真,则语句执行
2、在C语言中0表示为假,非0表示为真
3、一对 { } 就是一个代码块,一个代码块中可以包含很多条代码
4、else的匹配:else是和它离的最近的if匹配的。
2)switch语句
switch语句也是一种分支语句,常常用于多分支的情况
switch流程图
switch语法结构
#include <stdio.h>
int main()
{
switch(表达式)
{
case 常量表达式1: 语句1;
case 常量表达式2: 语句2;
……
case 常量表达式n: 语句n;
default: 语句n+1;
}
return 0;
}
switch语句规则
- case标签必须是常量表达式,如18或者’18’等
- case标签必须是惟一性的表达式;也就是说,不允许两个case具有相同的值
- case和default子句的先后顺序可以变动,而不会影响程序执行结果
switch语法解释
- case语句 – 需要将当前的case的值和switch中表达式进行比较,是否匹配
- break语句 – 表示结束,中断 switch语句
- default – case后面都不匹配,执行default
需求:数字1-7,根据用户输入数字输出星期几
#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;
default:
printf("输入错误,请重新输入\n");
break;
}
return 0;
}
巧用break语句
需求:用户输入1-5输出weekday,用户输入6-7输出weekend
#include <stdio.h>
int main()
{
int day = 0;
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;
}
编程好习惯
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break;
三、循环语句
1)while循环
while流程图
while语法结构
#include <stdio.h>
int main()
{
while(表达式)
{
循环语句;
...
}
return 0;
}
1.1)break与continue语句
break语句
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
if(i == 5)
{
break;
}
printf("%d ", i);
i++;
}
return 0;
}
// 这段代码的输出结果是什么呢?
// 输出:1 2 3 4, 你是否答对了呢?
小结:
在循环中只要遇到break,就停止后面的所有的循环,直接跳出循环
所以:while中的break是用于永久终止循环的
continue语句
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
i++;
if(i == 5)
{
continue;
}
printf("%d ", i);
}
return 0;
}
// 这段代码的输出结果是什么呢?
// 输出:2 3 4 5 6 7 8 9 10 11 你是否答对了呢?
小结
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行
而是直接跳转到while语句的判断部分,进行下一次循环的入口判断
2)for循环
for循环流程图
for循环语法结构
#include <stdio.h>
int main()
{
for(表达式1; 表达式2; 表达式3)
{
循环语句;
...
}
return 0;
}
- 表达式1为初始化部分,用于初始化循环变量的
- 表达式2为条件判断部分,用于判断循环时候终止
- 表达式3为调整部分,用于循环条件的调整
小结:
1、不可在for 循环体内修改循环变量,防止 for 循环失去控制
2、for循环中break和continue,他们的意义和在while循环中是一样的
3)do-while循环
do-while循环流程图
do-while循环语法结构
#include <stdio.h>
int main()
{
do
{
循环语句;
...
} while(表达式)
return 0;
}
小结
1、do-while循环语句的特点:循环至少执行一次,使用的场景有限,所以不是经常使用
2、do-while循环中break和continue,他们的意义和在while循环中是一样的
四、练习
1)九九乘法表
#include <stdio.h>
int main()
{
int i, j;
for (i = 1; i <= 9; i++)
{
for (j = 1; j <= i; j++)
{
printf("%d*%d=%-4d", i, j, i * j);
}
printf("\n");
}
return 0;
}
2)二分查找
int main()
{
int arr[] = {1,2,3,4,5,6,7,8,9,10};
int left = 0;
int right = sizeof(arr)/sizeof(arr[0])-1;
int key = 7;
int mid = 0;
while(left<=right)
{
mid = (left+right)/2;
if(arr[mid]>key)
{
right = mid-1;
}
else if(arr[mid] < key)
{
left = mid+1;
}
else
{
break;
}
}
if(left <= right)
{
printf("找到了,下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
}
总结:
本章到这里就结束啦!感谢各位的阅读。最后送几句话,对你,也对我:
1、读万卷书,行万里路
2、书是灵魂最好的医学专用剂
3、时间是脑力劳动者的资本