分支和循环语句
C语言有3种结构
1、顺序结构
2、选择结构(如:if、switch,为分支)
3、循环结构(如:while、for、do while为循环)
C语言中,由一个分号隔开的就是一条语句,此文章重点学习分支语句和循环语句
分支语句(选择结构)
if语句
语法结构
如果表达式的结果为真,语句执行。
C语言中,0表示假,非零表示真
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
可以用{}执行多条语句,如:
if(表达式)
{
语句列表1;
}
else
{
语句列表2;
}
常碰到的问题
问题1:悬空else
#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;
}
最终什么也不打印,原因是在不加花括号的情况下else与最近的if匹配。
改正:
int main()
{
int a = 0;
int b = 2;
if(a == 1)
{
if(b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
适当地是用{}能让你的代码的逻辑更加清楚。
问题2:书写习惯1
有如下代码
代码1:
if (condition) {
return x; }
return y;
代码2:
if (condition)
{
return x;
}
else
{
return y;
}
代码1与代码2效果是一样的,但更推荐代码2的写法,逻辑更加清晰。
书写习惯2
代码1:
int num = 1;
if (num == 5)
{
printf("hehe\n");
}
但如果判断号==变成赋值=,则会出现错误,并且编译器不会报错。
int num = 1;
if (num = 5)
{
printf("hehe\n");
}
更推荐以下写法
int num = 1;
if(5 == num)
{
printf("hehe\n");
}
当==为=时,会出现报错。
int num = 1;
if(5 = num) //error
{
printf("hehe\n");
}
switch语句
switch语句也是一种分支语句。 常常用于多分支的情况。
语法结构
switch(整型表达式)
{
语句项;
}
其中的语句项是一些case语句,如下:
case 整形常量表达式:
语句;
switch中的break
在switch语句中,我们没法直接实现分支,搭配break使用才能实现真正的分支。如:
#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;
}
有时候我们的需求变了:
1. 输入1-5输出的是“weekday”;
2. 输入6-7输出“weekend”
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;
}
编程好习惯:在最后一个case语句中加一条break语句。
default语句
当表达的值与所有case标签的值都不匹配,程序不会终止,也不会报错。但是,如果你并不想忽略不匹配所有标签的表达式的值时,可以增加一条default语句。这条语句可以出现在任何case标签可以出现的位置。
注意:switch是顺序,default放的位置不同,可能会使程序出现不同的情况。
代码1:
#include<stdio.h>
int main()
{
int n = 1;
int b = 0;
switch (n)
{default:
b = 0;
case 1:
b = 1;
case 2:
b = 2;
}
printf("%d", b);
return 0;
}
输出2。
代码2:
#include<stdio.h>
int main()
{
int n = 1;
int b = 0;
switch (n)
{
case 1:
b = 1;
case 2:
b = 2;
default:
b = 0;
}
printf("%d", b);
return 0;
}
输出0。
循环语句
while循环
语法结构
while(表达式)
循环语句;
break介绍
在循环中遇到break,终止所有循环。如:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;
printf("%d ", i);
i = i+1;
}
return 0;
}
代码输出1 2 3 4 5
continue
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,而是直接
跳转到while语句的判断部分,进行下一次循环的入口判断。如:
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
i = i+1;
if(i == 5)
continue;
printf("%d ", i);
}
return 0;
}
代码输出是1 2 3 4 6 7 8 9 10。
for循环
语法结构
for(表达式1;表达式2;表达式3)
循环语句;
表达式1 表达式1为初始化部分,用于初始化循环变量的。 表达式2 表达式2为条件判断部分,用于判断
循环时候终止。 表达式3 表达式3为调整部分,用于循环条件的调整。
如:是用for循环,在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
for循环中的break和continue
代码1:
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ",i);
}
return 0;
}
代码2:
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;
printf("%d ",i);
}
return 0;
}
出现死循环。
建议:1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
do…while循环
语法结构
do
循环语句;
while(表达式);
使用情况有限。