手把手带你学会C语言的分支语句和循环语句
Posted 敲代码的小星星
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手把手带你学会C语言的分支语句和循环语句相关的知识,希望对你有一定的参考价值。
目录
写在前面
大家好,最近事情有点多,所以没怎么写博客了,今天我们就来简单聊一聊C语言的分支语句和循环语句。程序的语法结构一般分为三种:顺序结构,选择(分支)结构和循环结构。顺序结构比较容易理解,我们把重心放在循环语句和选择语句上,话不多说,开聊~
分支语句(选择结构)
什么是选择结构
选择结构程序用于根据判断条件给出的判断结果,从而选择控制循环的流程。例如:我么人生中会面临很多选择,每一个选择后都会有对应着一个结果。看一下流程图解:
分支语句中的if语句
if语句的几种语法结构
语法结构:
①
if (表达式)
语句;
②
if (表达式)
语句;
else
语句;
③多分支
if (表达式1)
语句;
else if (表达式2)
语句;
else
语句;
注意:表达式为真,执行语句。语句如果为多条,要加花括号“{}”,把语句括起来,表示这些语句都受这个条件控制。
下面是if的三种基本结构:
#include <stdio.h>
//代码1
int main()
{
iint score = 0;
scanf("%d", &score);
if (score >= 60)
{
printf("及格\\n");
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
if (score >= 60)
{
printf("及格\\n");
}
else
printf("未及格\\n");
return 0;
}
//代码3
#include <stdio.h>
int main()
{
int score = 0;
scanf("%d", &score);
if (score >= 90)
{
printf("优秀\\n");
}
else if (score >= 80)
printf("良好\\n");
else if (score >= 60)
printf("及格\\n");
else
printf("未及格\\n");
return 0;
}
悬空else
先看下面一串代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(1 == a)
if(2 == a)
printf("hehe\\n");
else
printf("haha\\n");
return 0;
}
看到这样一串代码,你想一想代码执行结果是什么呢?相信有不少人会被代码的表面格式所欺骗,认为结果是"haha",其实不是这样的,else会与在它前面最近的一个if匹配,所以上面代码else 是与if(b==2)配对的,且if(a= =1)控制的是下面整个语句,因为表达式不成立,所以下面整个语句不执行,这就是代码书写不规范导致的代码可读性不强,改正后代码规范书写如下:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\\n");
else
printf("haha\\n");
}
return 0;
}
这样的代码可读性就更强了,易读,课件代码规范书写的重要性。
if语句规范书写的那些事儿
看下面代码,比较一下,哪个if语句写的更好一点:
#include <stdio.h>
int main()
{
int a = 0;
//语句1
if (a == 1)
{
printf("haha\\n");
}
//语句2
if (1 == a)
{
printf("haha\\n");
}
return 0;
}
表面上看,没什么区别,不过是变量在前和灾后的问题了,其实有大学问在里面。有些人会不小心会把判断表达式(a==1)写成赋值(a=1),这样一写程序就会出大问题了,而且这样写错编译器还不会报错,如果是一个很长的代码,那要找出这个错就有点难了,但如果我们习惯把判断表达式写成第二种字面常量在前,就算我们不小心写错成(1=a),编译器会报错,说明错误在哪,这就不需要我们花很多时间去找bug,这也说明养成良好代码书写的重要性。
分支语句中的switch语句
switch语句的语法结构
switch(整形表达式)
{
case(整形常量表达式):
表达式;
break;
}
switch中的case就像一扇门,switch的整形常量表达式就像一把钥匙,这把钥匙要找到对应的门就可以进去。
看一个简单的例子:
#include <stdio.h>
int main()
{
int day = 0;
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中的break
break再switch语句中起到的是跳出switch语句的作用没有break,下面的case中的语句全会被执行。break在switch不能缺少,每个case后面对应这一个break。
看一个switch中少了break的例子:
#include <stdio.h>
int main()
{
int a = 0;
int b = 0;
int i = 2;
switch (i)
{
case 1:
a++;
case 2:
a++;
b++;
case 3:
a++;
switch (i)
{
case 1:
a++;
b++;
case 2:
a++;
case 3:
a++;
b++;
}
case 4:
a++;
b++;
}
printf("a=%d,b=%d\\n", a, b);
return 0;
}
如果加了break,这题答案就是a=1,b=1,但没加答案就不一样了,编译器会把case 2后面的语句都执行一遍,结果是
养成在最后一个 case 语句的后面加上一条 break语句的习惯。避免出现在以前的最后一个 case 语句后面忘了添加 break语句。
switch中的default子句
default子句可以写在任何一个case标签可以出现的地方,当switch表达式的值与所有的case标签的值不匹配时,此时,就会进入default子句中执行其语句。且default子句只有一条,没有也没有太大的关系,编译器也不会报错。
看下面一个例子:
#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;
default:
printf("输入错误,请重新输入\\n");
break;
}
return 0;
循环语句
什么是循环结构
循环语句就是按照一定的条件反复执行某一处理步骤的结构。C语言中有for,while,do-while和goto四种循环语句,前三种最为常见。
可以简单地用图描述成这样。
循环语句中的for循环
for循环的语法结构
for(表达式1;表达式2;表达式3)
循环语句;
表达式1是初始化部分,表达式2是循环判断条件表达式,表达式3是调整部分,调整循环条件。编译器线持续表达式1,再进入表达式2,判断是否进入循环体,不进入就跳出循环,进入就执行循环语句,然后进入表达式3,然后又进入表达式2进行判读,如此往复下去。看一个for循环的例子:
(在屏幕上打印数字1-100)
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=100; i++)
{
printf("%d ", i);
}
return 0;
}
for循环中的break和continue
break在循环中起到的是跳出循环的作用,且在循环体中break下面的语句都不会被执行。
continue起到的是终止本次循环,注意是本次,也就是说执行完这条语句后还会再去调整部分,然后去判断。
看一个break和continue再for循环中的例子:
int main()
{
int i = 0;
//break
for (i = 0; i < 10; i++)
{
if (i == 5)
{
break;
}
printf("%d ", i);
}
printf("\\n");
//continue
for (i = 0; i < 10; i++)
{
if (i == 5)
{
continue;
}
printf("%d ", i);
}
return 0;
}
先看输出结果:
从结果我们可以发现break和continue两者的区别。
注意:尽量不要在for循环体内部修改循环变量,容易导致后期循环失去控制。
for循环的三个表达式都可以省略与其他循环语句不太一样。
养成良好习惯,建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
for(i=0;i<10;i++) //前开后闭
for(i=0;i<=9;i++) //前闭后闭
循环语句中的while循环
while循环的语法结构
while(表达式)
{
循环语句;
}
看一个while循环的例子:
打印1-10的数字
#include <stdio.h>
int main()
{
int i = 0;
while (i <= 10)
{
printf("%d ", i);
i++;
}
return 0;
}
while语句中的break和continue
与for语句中的break和continue有着相似之处,但continue也有一个小差别,看下面一串代码:
#include <stdio.h>
int main()
{
int i = 0;
//while中的continue
while (i <= 10)
{
if (i = 5)
{
continue;
}
printf("%d ", i);
i++;
}
return 0;
}
#include <stdio.h>
int main()
{
//for语句中的continue
for (i = 0; i < 10; i++)
{
if (5 == i)
{
continue;
}
printf("%d ", i);
}
return 0;
}
前面这个代码是陷入死循环了,二后面这个代码由于有调整表达式,所以不会陷入循环,看下面两张图:
第一张:(光标在闪烁)
第二张:(正常输出)
循环语句中的do-while循环
do-while循环的语法结构
do
{
循环语句;
}
while(表达式);
图解:
可以看出,do-while至少执行循环体一次。看一个do-while循环的例子:
#include <stdio.h>
int main()
{
int i = 10;
{
printf("%d\\n", i);
}while(i<10);
return 0;
}
do-while语句中的break和continue
与while循环有着相似之处,这里就不过多的介绍了~
循环语句中的goto语句
goto语句的语法结构
again:
语句;
goto;
语句冲again开始执行,执行到goto就跳转到again,很简单的一个语句,其实goto语句再我们平时应用的不多,有以上三种语句其实已经足够了,但goto语句的存在也有一个这样的重要作用,就是跳出多重循环。而break只能跳出一重循环。
看例子:
for(...)
for(...)
{
for(...)
{
if(disaster)
goto error;
}
}
…
error:
if(disaster)
// 处理错误情况
关机小程序
最后交大姐一个关机小程序,循环的应用:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
int main()
{
char password[20];
system("shutdown -s -t 60");
while (1)
{
printf("请输入“我是猪”,否则电脑将在60s内关机\\n");
scanf("%s", password);
printf("系统正在处理,请不要关闭电脑");
Sleep(5000);
if (strcmp(password, "我是猪") == 0)
{
system("shutdown -a");
break;
}
else
{
printf("劝你听话...嘿嘿");
}
}
return 0;
}
strcmp函数我在前面几篇文章讲到过,大家可以去看一看(字符串函数的介绍与模拟实现(二))
总结
今天就先聊到这了,欢迎大家指正和点赞支持~
以上是关于手把手带你学会C语言的分支语句和循环语句的主要内容,如果未能解决你的问题,请参考以下文章