分支语句:
1.if...else...语句
1.概念
if
语句控制条件分支。 如果表达式的值不为零,则执行 if
语句的主体,否则,则执行else语句的主体。(0即为假,非0即为真)
先来看看if...else...执行结构流程图
#include<stdio.h>
int main()
{
int a = 0;
if (a==0)
printf("呵呵\n");
else
printf("hehe\n");
return 0;
}
2.其他写法
if...else...语句可省略else部分,写成只有if语句的形式
#include<stdio.h>
int main()
{
int a = 0;
if (a == 0)
printf("呵呵\n");
return 0;
}
也可写成if...else if....else if...else...的形式,分支成多个部分
#include<stdio.h>
int main()
{
int a = 0;
if (a == 0)
printf("呵呵\n");
else if(a == 1)
printf("hehe\n");
else if (a < 0)
printf("哈哈\n");
else
printf("哈哈\n");
return 0;
}
3.注意事项
1.if...else...语句在具有多个分支的情况下只会进入其中的一个分支
#include<stdio.h>
int main()
{
int a = 0;
if (a == 0)
printf("呵呵\n");
else if (a < 1)
printf("哈哈\n");
else
printf("哈哈\n");
return 0;
}
2.在if()里判断相等时可能会因疏忽把“==”打成“=”,而在c语言里”=”是赋值,“==”才是判断是否相等,若是将变量赋值成一个非0的值,那么判断的语句将直接为真。所以在进行判断相等时需要多加注意。
#include<stdio.h>
int main()
{
int a = 0;
if (a = 1)
printf("呵呵\n");
return 0;
}
推荐一个写法
在判断一个变量的值是否与常量相等时可以利用(1==a)这种形式,若是少了一个“=”,编译器会因为把常量赋值给变量直接报错。
#include<stdio.h>
int main()
{
int a = 0;
if (0 == a)
printf("呵呵\n");
if(0 = a)
printf("hehe\n");
return 0;
}
3.if语句的嵌套
嵌套 if
语句和 else
子句时,请使用大括号将语句和子句组合成复合语句,以阐明你的意图。 如果没有大括号,编译器会将每个 else
与缺少 else
的最近 if
关联,从而解决二义性
#include<stdio.h>
int main()
{
int a = 0;
int b = 0;
if (0 == a)
if (0 != b)
printf("呵呵\n");
else
printf("hehe\n");
else
printf("哈哈\n");
}
为了方便阅读,嵌套时请加上{}
4.分支的执行语句若是有多个,别忘记加{}哦
2.switch语句
1.概念
switch
语句使控件根据 表达式 的值转移到其语句正文中的一个标记语句
流程图如下
判断星期几
#include<stdio.h>
int main()
{
int day = 0;
switch (day)
{
case 1:
printf("Monday\n");
break;
case 2:
printf("Tuesday\n");
break;
case 3:
printf("Wednesday\n");
break;
case 4:
printf("Thursday\n");
break;
case 5:
printf("Friday\n");
break;
case 6:
printf("Saturday\n");
break;
case 7:
printf("Sunday\n");
break;
default:
break;
}
return 0;
}
2.注意事项
1.case的后面不能出现相同的值
2.case后面的后面只能接整型常量表达式
char,short,int,long,long long,以上都是整型,若是char类型的数据,别忘记‘ ’哦,应该是case ‘a’的形式
3.不加break的结果
#include<stdio.h>
int main()
{
int day = 2;
switch (day)
{
case 1:
printf("早八\n");
case 2:
printf("早八\n");
case 3:
printf("早八\n");
case 4:
printf("早八\n");
case 5:
printf("早八\n");
case 6:
printf("休息\n");
case 7:
printf("休息\n");
defauilt:
printf("哪来的这一天啊\n");
}
return 0;
}
通过以上代码,我们可以发现case后面若是没有break,那他将会从匹配的case持续执行到switch执行语句的末尾,所以别忘了加break哦。
有时候也可以通过少用break简化代码
#include<stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("日々早八、日々早八、烦たます\n");
break;
case 6:
case 7:
printf("休息\n");
defauilt:
printf("哪来的这一天啊\n");
}
return 0;
}
4.defauilt的位置必须在末尾吗?
defauilt是缺省的其他条件。众所周知,编译器读取数据是从上至下读取,所以defauilt必须放在switch语句末尾吗?答案是否定的,它可以放在switch语句中的任意位置
循环语句
1.while语句
1.概念
while是计算机的一种基本循环模式。 当满足条件时进入循环,进入循环后,当条件不满足时,跳出循环。
流程图
#include<stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
printf("%d\n",i);
i++;
}
return 0;
}
2.do while语句
1.概念
do...while 循环是 while 循环的变体。 在检查while条件是否为真之前,该循环首先会执行一次do之内的语句,然后在while内检查条件是否为真,如果条件为真的话,就会重复do...while这个循环,直至while为假。
流程图
特点:至少执行一次
3.for循环
1.概念
4.break和continue
1.break
break
语句将终止执行其所在位置最接近的外围 do
、for
或 while
语句。
利用该功能,我们可以提前跳出循环
#include<stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
printf("%d\n", i);
if (5 == i)
break;
i++;
}
return 0;
}
利用这个特点,我们在不知道到底循环多少次时可以写个死循环,再利用内部判断跳出循环
#include<stdio.h>
int main()
{
int i = 0;
while (1)
{
printf("%d\n", i);
if (5 == i)
break;
i++;
}
return 0;
}
2.continue
continue的作用是在不结束循环的前提下跳过本次循环体中continue后面的部分
#include<stdio.h>
int main()
{
int i = 0;
while (i < 10)
{
printf("%d\n", i);
i++;
if (5 == i)
continue;
}
return 0;
}