1.if循环结构
if 语句的语法形式如下: if ( 表达式 ) 表达式成⽴(为真),则语句执⾏,表达式不成⽴(为假),则语句不执⾏ 如: #include<stdio.h> int main() { int a = 8; if (a < 9) { //默认情况下,if else后只跟一条语句时,不需要大括号括进 printf("hehe"); //如果多条语句,则放进大括号 注:为方便理解,最好都放进大括号里! } return 0; } 输入8,满足8<9,则输出hehe;
1.1else语句(常常与if搭配)
如果一个数不是奇数,那就是偶数了,如果任意一个整数,我们要清楚的判断是奇数还是偶数怎么表示呢?
这⾥就需要 if...else... 语句了,语法形式如下: 判断一个整数为偶数还是奇数: #include <stdio.h> int main() { int num = 0; scanf("%d", &num); if (num % 2 == 1) printf("%d 是奇数\n", num); else //不满足奇数则执行else语句输出偶数 printf("%d 是偶数\n", num); return 0; }
在 if else 语句中, else 可以与另⼀个 if 语句连用,构成多重判断。
如:要求输入一个整数,判断输入的整数是0,还是正数或者负数。请看如下代码:
#include <stdio.h> 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; }
如有更多要求,可无限嵌套。
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配。
我们⾸先从下⾯代码开始
#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; }
运行代码,输出的结果是:什么都不输出
2.关系操作符
>、<、>=、<=、==、!=(不等于)
通常返回0或1表示真假
&&:并且
||:或者
条件操作符
1. exp1?exp2::exp3
如果exp1为真,则执行exp2,且exp2的结果为整个表达式的结果,如果exp1为假,则执行exp3,exp3的结果为整个表达式的结果
逻辑操作符:&&,||,!
!:逻辑取反运算符(改变单个表达式的真假,真变假,假变真)
&&:与运算符,并且的意思(两侧为真,则为真,否则为假)
||:或运算符,或者的意思(至少一个表达式为真,则为真,否则为假)
!:
a | !a |
非0 真--> | 0 假 |
0 假--> | 非0 真 |
&&:
a | b | a&&b |
非0 | 0 | 0 |
0 | 0 | 0 |
非0 | 非0 | 非0 |
||:
a | b | a||b |
0 | 0 | 非0 |
非0 | 非0 | 非0 |
非0 | 0 | 非0 |
3.短路
C语言逻辑运算符还有一个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值。这种情况称为“短路”。
if ( day>= 3 && day <= 5)
表达式中&& 的左操作数是 day >= 3 ,右操作数是 day<= 5 ,当左操作数 day >= 3 的结果是0的时候,即使不判断 day<= 5 ,整个表达式的结果也是0。
所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执⾏。
对于 || 操作符是怎么样呢?我们结合前面的代码:
if (day == 12 || day==1 || day == 2)
如果day== 12,则不用再判断day是否等于1或者2,整个表达式的结果也是1。
所以, || 操作符的左操作数的结果不为0时,就无需执行右操作数。
总结:
对于&&操作符来讲:有假则输出假
对于||操作符来讲:有真则输出真
4.switch语句
除了 if 语句外,C语言还提供了 switch 语句来实现分支结构。
switch 语句是一种特殊形式的if...else 结构,用于判断条件有多个结果的情况。它把多重的else if 改成更易用、可读性更好的形式。
如:
switch (expression) { case value1: statement case value2: statement default: statement }
注意:
- switch 后的 expression 必须是整型表达式
- case 后的值,必须是整形常量表达式
- case 和后边的数字之间必须有空格
- 每一个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句。否则将会执行下一个case,直到执行完
问:想一想,如果switch语句中没有break将会怎么样呢?
输入5,结果出来为“余数是1”,好像与加了break输出是一样的,是否觉得没有问题呢?
那我们接着往下看:
怎么输出了两个。我们从表达式中看,输入4,4/2==0,则运行case 0;输出“整数,余数为0”,因为没有返回语句,所以接着运行case 1;所以输出了两个。
如果switch的表达式中无法表达case()时,就要引用default了
switch (expression) { case value1: statement case value2: statement // 如果不满足case 1,case 2 default: statement //则运行default的表达式 }
在 switch 语句中case语句和default语句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满足实际需求的就可以。
但一般情况下是把default语句放在最后处理的(易于对循环的理解)。
5.while与for循环
C语言提供了3种循环语句, while就是其中⼀种,接下来就介绍⼀下 while 语句。
while 语句的语法结构和 if 语句非常相似。
if与while #include <stdio.h> int main() { if(1) printf("hehe\n"); //if后边条件满⾜,打印⼀次hehe return 0; } 让我们再来看看while语句 #include <stdio.h> int main() { while(1) printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe return 0; }
他们的区别是while语句是可以实现循环效果的。
for 循环是三种循环中使用最多的,for循环的语法形式如下: for(表达式1; 表达式2; 表达式3) 语句();
如果有多个表达式时,要用大括号括起来
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
6.do while语句
while 和 for 这两种循环都是先判断,条件如果满足就进⼊循环,执行循环语句,如果不满足就跳
出循环;
而do while 循环则是先直接进⼊循环体,执⾏循环语句,然后再执行while 后的判断表达式,表
达式为真,就会进行下⼀次,表达式为假,则不再继续循环。
#include <stdio.h> int main() { int i = 1; do //当i的值进入,先执行的printf(“%d”,i),在进行i=i+1,最后在进行i的判断 { printf("%d ", i); i = i + 1; } while(i<=10); return 0;
7.continue
continue 是继续的意思,在循环中的作用就是跳过本次循环中continue 后边的代码,继续进行
下⼀次循环的判断。
#include <stdio.h> 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; }
8.goto语句
C语言提供了⼀种⾮常特别的语法,就是 goto 语句和跳转标号, goto 语句可以实现在同一个函数内跳转到设置好的标号处。
例如:
#include <stdio.h> int main() { printf("hehe\n"); goto next: printf("haha\n"); //这里本应该打印hehe,但由于goto next next: //所以直接跳过进行当行语句 printf("跳过了haha的打印\n"); return 0; }
注:
对于goto语句一般需要少使用,因为大量的goto语句会使你逻辑混乱
oi!!!点个赞走吧