一.分支语句--if语句
if语句的语法形式:
1 if(表达式)
2 语句
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行。
在C语言中,0为假(语句不执行),非0即为真(语句执行)。
其流程图如下:
如果同级选择有两种及以上的的关系,就需要用到if...else...语句。
语法形式如下:
1 if ( 表达式 )
2 语句1;
3 else
补充:if和else语句中默认都只控制一条语句,那如果我们需要if或者else语句同时控制多条语句,那就需要我们用{}将其代码括起来。
eg:
#include <stdio.h>
int main()
{
int age=0;
scanf("%d",&age);
if(age<=18)
{
printf("未成年人\n");
printf("不可以谈恋爱\n");
}
else
{
printf("成年人\n");
printf("可以谈恋爱\n");
}
return 0;
}
PS:还要注意 if语句的嵌套,和语句的适当简化,养成良好的代码风格。
悬空的else问题:
如果有多个if和else,请记住这样一条规则:else总是和最近的if匹配。
eg:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("你好\n");
else
printf("你吃了吗\n");
return 0;
}
改代码执行的结果并不是你吃了吗,而是根据以上规则快可知是啥也不运行。
二.操作符补充
1.关系操作符:
C语言用于比较的表达式,称为“关系表达式”,里面使用的运算符就称为“关系运算符”,主要有下面六个:
> 小于运算符
< 大于运算符
<= 大于等于运算符
>= 小于等于运算符
== 等于运算符
!= 不等于运算符
关系表达式通常返回0或1,表示真假。eg:20>10返回1。关系表达式常用于if或者while结构。
PS:==与=是两个不一样的运算符,不要混淆。前者主要用于条件语句中的条件判断,后者则截然不同。为了防止这种情况的出现,有的程序员喜欢将变量写在等号的右边。此外,多个关系运算符不宜连用。
2.条件操作符
条件操作符也叫三目操作符,需要接受三个操作数的,形式如下:
1 exp1 ? exp2 : exp3
条件操作符的计算逻辑:如果exp1为真,exp2计算的结果为整个表达式的结果,如果exp1为假,exp3计算的结果为整个表达式的结果
3.逻辑操作符
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下面3个:
!:逻辑取反运算符(改变单个表达式的真假);
&&:与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假);
||:或运算符,就是或者的意思(两侧至少有一个表达式为真,则为真,否则为假)。
例题:输入一个年份year,判断year是否为闰年。
#include <stdio.h>
int main()
{
int year = 0;
scanf("%d", &year);
if ((year%400==0)||((year%4==0)&&(year%100!=0)))
printf("%d年为闰年\n",year);
else
printf("%d年不是闰年\n",year);
return 0;
}
补充:短路---C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满足逻辑运算符的条件,就不在对右边的表达式求值。这种情况称为“短路”。
仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。
三.switch语句(实现分支结构)
1 switch (expression)
{
2 case value1: statement
3 case value2: statement4 default: statement
}PS:1.每个case和后边的数字之间必须有空格;
2.每一个case语句中的代码执行完成之后,需要加上break,才能跳出这个switch语句。
3.default语句和case语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。不过我们通常是把default子句放在最后。
四.循环语句
1.while循环
语法形式:
1 while (表达式)
2 语句;
2.for循环(三种循环中使用最多的)
语法形式:
1 for(表达式1;表达式2;表达式3)
2 语句;
注:1.表达式1 用于循环变量的初始化;
2.表达式2 用于循环结束条件的判断;
3.表达式3 用于循环变量的调整。
for和while在实现循环的过程中都有初始化,判断和调整这三个部分。但是for循环的三个部分非常集中,便于代码的维护,而如果代码较多的时候while循环的三个部分就比较分散,所以从形式上for循环要更优一些。
3.do-while循环
语法形式:
1 do
2 语句;
3 while(表达式);
五.break及continue语句,goto语句
break:
1.break的作用是永久的终止循环,只要break被执行,直接就会跳出循环,继续往后运行。for循环和while循环的break一样,都是用来终止循环的。
2.Switch语句中的break语句是非常重要的,能实现真正的分支效果。当然break也不是每个case 一句都有,这句得根据实际情况来看了。
continue:
1.它的作用是跳过本次循环continue后边的代码,在for循环和while循环中有所差异的。
2.在for循环中continue的作用是跳过本次循环的中的continue后的代码,直接去到循环的调整部分。未来当某个条件发生的时候,本次循环的无需再执行后续某些操作的时候,就可以使用continue来实现。
goto语句:
可以实现同一个函数内跳转到设置好的标号。goto语句如果使用的不当,就会导致在函数内部随意跳转,打乱程序的执行流程,所以建议是尽量不要去使用,但是goto语句也不是一无是处,在多层循环的代码中,如果想快速跳出就使用goto就非常的方便了。
eg:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("heihei\n");
return 0;
}
六.循环的嵌套
参考代码:找出100~200之间的所有素数。
#include <stdio.h>
int main()
{
int i = 0;
for (i == 100; i <= 200; i++)
{
int j = 0;
int flag = 1;
for (j = 2; j < i; j++)
{
if (i % j == 0)
{
flag = 0;
break;
}
}
if (flag == 1)
printf("%d\n", i);
}
return 0;
}