目录
1. 引言:你是否了解C语言?
2. if语句
2.1 语法形式
2.2 执行流程
编辑
2.3 代码示例
2.4 if...else...语句
2.4.1 语法形式
2.4.2 执行流程
2.4.3 代码示例
2.5 分支中包含多条语句
2.6 嵌套if
2.7 悬空else问题
3. switch语句
3.1 语法形式
3.2 if语句和switch语句的对⽐
1. 使用if语句完成
2. 使⽤switch语句完成
3.3 switch语句中的break
3.4 switch语句中的default
3.5 switch语句中的case和default的顺序问题
4. while循环
4.1 语法形式
4.2 执行流程
4.3 代码示例
5. for循环
5.1 语法形式
5.2 执行流程
5.3 代码示例
6. do-while循环
6.1 语法形式
6.2 执行流程
6.3 代码示例
7. break语句和continue语句
7.1 while循环中的break和continue
7.1.1 break举例
7.1.2 continue举例
7.2 for循环中的break和continue
7.2.1 break举例
7.2.2 continue举例
7.3 do while循环中的break和continue
7.3.1 break举例
7.3.2 continue举例
8. 结言
前面的文章中提到了if---else语句,其属于分支和循环的知识,为了更好的理解分支和循环,下面逐一介绍这几个语句。
if ( 表达式 )//表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。
{
语句
}
注意:C语言中,0为假,非0为真。
即表达式的结果如果是0,则语句不执⾏,表达式的结果如果不是0,则语句执⾏。
//输⼊⼀个整数,判断是否为奇数
#include
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 1)
//表达式成⽴(为真),即num为奇数,语句执⾏。
//表达式不成⽴(为假),即num为偶数,语句不执⾏。
{
printf("%d 是奇数\n", num);//语句
}
return 0;
}
一个数如果不是奇数,那么就是偶数,如果任意⼀个整数,我们要清楚的判断是奇数还是偶数该怎么表示呢?
if(表达式)//表达式成⽴(为真),则语句1执⾏。
{
语句1
}
else//表达式不成⽴(为假),则语句2执⾏。
{
语句2
}
即在if语句流程上变化,表达式为0时,执行else下的语句,然后结束。
#include
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num % 2 == 1)
{
printf("%d 是奇数\n", num);
}
else
{
printf("%d 是偶数\n", num);
}
return 0;
}
注意:默认在 if 和 else 语句中,它们都只控制⼀条语句。
代码示例
#include
int main()
{
int age = 0;
printf("请输入年龄:");
while (scanf("%d", &age) == 1)
{
if (age >= 18)
printf("成年了\n");
printf("可以谈恋爱了\n");
}
return 0;
}
上面代码运行结果为:
上面的运行结果:无论年龄是否大于等于18岁,“可以谈恋爱了”都会数输出,但小于18岁只会输出“可以谈恋爱了”,而不会输出“成年了”。
由此可以看出:printf("成年了\n")语句是受if语句控制的,而printf("可以谈恋爱了\n")语句不受if语句控制。即if语句只控制一条语句。
下面加上else:
#include
int main()
{
int age = 0;
printf("请输入年龄:");
while (scanf("%d", &age) == 1)
{
if (age >= 18)
printf("成年了\n");
else
printf("未成年\n");
printf("不可以谈恋爱\n");
}
return 0;
}
上面代码运行结果为:
天理难容啊,未成年不可以谈恋爱也就算了,成年了竟然也也不可以。
由此可见,else语句也只能控制一条语句。
那么如何让它们控制多条语句呢?使用{}就可以实现了。
#include
int main()
{
int age = 0;
printf("请输入年龄:");
while (scanf("%d", &age) == 1)
{
if (age >= 18)
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else
{
printf("未成年\n");
printf("不可以谈恋爱\n");
}
}
return 0;
}
运行结果为:
这样就完美了。
//一个整数要么是0,要么是正数,要么是负数。
#include
int main()
{
int num = 0;
scanf("%d", &num);
if(num == 0)
printf("输⼊的数字是0\n");
else if(num > 0) //这⾥的if 相当于嵌套在els语句中,形成了嵌套结构
printf("输⼊的数字是正数\n");
else
printf("输⼊的数字是负数\n");
return 0;
}
与前面的代码结合一下
//先判断是否为正数,如果是,再判断是奇数还是偶数,并输出;如果不是,则输出非正数。
#include
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d", &num);
if (num > 0)//正数
{
if (num % 2 == 0)
printf("偶数\n");
else
printf("奇数\n");
}
else//非正数
{
printf("⾮正数\n");
}
return 0;
}
注意:如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
代码示例:
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
为什么呢?
#include
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匹配,修改一下代码就可以实现。
#include
int main()
{
int a = 0;
int b = 2;
if (a == 1)//a!=1,故表达式a==1为假,不执行下{}里的语句。
{
if (b == 2)
printf("hehe\n");
}
else//语句执行,输出haha。
{
printf("haha\n");
}
return 0;
}
而且代码更具有逻辑性,更加清晰,这是{}的功劳。只要带上适当的⼤括号,代码的逻辑就会更加的清晰,所以⼤家以后在写代码的时候要注意括号的使⽤,让代码的可读性更⾼。
下面介绍实现分支结构的另一个语句switch语句:
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
下面通过一个练习题,进行if语句和switch语句的对比:
练习题:输⼊任意⼀个整数值,计算除3之后的余数。
#include
int main()
{
int n = 0;
printf("请输入一个整数:\n");
scanf("%d", &n);
if (n % 3 == 0)
printf("整除,余数为0\n");
else if (n % 3 == 1)
printf("余数是1\n");
else
printf("余数是2\n");
return 0;
}
#include
int main()
{
int n = 0;
printf("请输入一个整数:\n");
while (scanf("%d", &n) == 1)
{
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
break;
case 1:
printf("余数是1\n");
break;
case 2:
printf("余数是2\n");
break;
}
}
return 0;
}
运行结果:
使用不同的语句实现相同的功能,可见C语言的魅力。
上面代码中出现了break与default,下面我们展开介绍:
break既然在switch语句中出现了,就一定有它的作用,如果把其去掉,会出现什么情况呢?
下面我们来观察一下:
#include
int main()
{
int n = 0;
printf("请输入一个整数:\n");
while (scanf("%d", &n) == 1)
{
switch (n % 3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
}
return 0;
}
运行结果:
输入整数1,应该输出余数是1,却还输出了余数是2;输入整数2,输出正确;输入整数3,应该输出整除,余数是0,却还输出了余数是1,余数时2。
基于上面的情况,我们调整一下case的语序,观察不同:
#include
int main()
{
int n = 0;
printf("请输入一个整数:\n");
while (scanf("%d", &n) == 1)
{
switch (n % 3)
{
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
case 0:
printf("整除,余数为0\n");
}
}
return 0;
}
运行结果:
可以观察到结果明显不同。
#include
int main()
{
int day = 0;
while (scanf("%d", &day) == 1)
{
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;
}
运行结果:
#include
int main()
{
int day = 0;
while (scanf("%d", &day) == 1)
{
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
}
}
return 0;
}
运行结果:
#include
int main()
{
int day = 0;
while (scanf("%d", &day) == 1)
{
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日\n");
break;
case 6:
case 7:
printf("休息日\n");
break;
default:
printf("输入错误,请重新输入\n");
break;
}
}
return 0;
}
运行结果:
介绍了break和default后,下面介绍:
while(表达式)//表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏。
{
语句;
}
//在屏幕上打印 1~10 的值
#include
int main()
{
int i = 1;//定义变量i,并初始化为1。
while (i <= 10)
//i小于等于10,表达式成立,为真,语句执行,先打印i的值,再对i的值加1;i大于10,表达式不成立,为假,语句不执行。
{
printf("%d ", i);
i = i + 1;
}
return 0;
}
for(表达式1; 表达式2; 表达式3)
//表达式1 ⽤于循环变量的初始化
//表达式2 ⽤于循环结束条件的判断
//表达式3 ⽤于循环变量的调整
{
语句;
}
//在屏幕上打印 1~10 的值
int main()
{
int i = 0;
// 初始化 判断 调整
for (i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
和上面的代码对比一下:
运行结果:
do
{
语句;
}while(表达式);
为什么do-while语句使用最少?
原因是:⼀般 do while 使⽤在循环体⾄少被执⾏⼀次的场景下,所以较少⼀些。
下面通过一个练习题,来实现这种场景:
练习题:输⼊⼀个正整数,计算这个整数是⼏位数。
例如:
#include
int main()
{
int n = 0;
scanf("%d", &n);
int cnt = 0;
do
{
cnt++;
n = n / 10;
} while (n);
printf("%d\n", cnt);
return 0;
}
#include
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i + 1;
}//继续往后执行
return 0;
}
运行结果:
#include
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
continue;
//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊死循环
printf("%d ", i);
i = i + 1;
}
return 0;
}
运行结果:
#include
int main()
{
int i = 1;
for (i = 1; i <= 10; i++)
{
if (i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
上面的代码跳过了5的打印。
运行结果:
#include
int main()
{
int i = 1;
do
{
if (i == 5)
break;
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
运行结果:
#include
int main()
{
int i = 1;
do
{
if (i == 5)
continue;
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
运行结果:
do.while 语句中的 break 和 continue 的作⽤和 while 循环中⼏乎⼀模⼀样。
本篇文章介绍了分支与循环的相关知识,篇幅较长,可以根据目录分部去看,希望对大家 学习C语言有所帮助,也希望大家多多支持,后续会带来更多创作(下一篇文章会运用循环的嵌套来进行牛刀小试-找出素数并打印)。