文章目录
1.if语句2.分支与循环操作符2.1关系操作符2.2条件操作符2.3逻辑操作符 3.switch语句4.while循环语句5.for循环语句6.do-while循环语句7.break和continue语句8.goto语句希望读者们多多三连支持小编会持续更新你们的鼓励就是我前进的动力!C语言的结构分为顺序结构、选择结构、循环结构,结构化程序设计离不开这三种结构或这三种结构的组合,合理快速的运用这些结构是学好C语言的基础
1.if语句
if 语句,显而易见是如果的意思,通过判断真假来确认语句是否执行,其语法形式为:
if ( 表达式 ) 语句
表达式内语句为真,则语句执行,表达式内语句为假,则语句不执行,会直接跳过该语句
在C语言中,0表示为假,非0表示为真
如果判断一个事物的正反面写两个 if 语句,就太麻烦了,这里就需要用到 if…else… 语句了
例如:输入⼀个年龄,>= 18岁就输出:成年,否则就输出:未成年
#include <stdio.h>int main(){ int age = 0; scanf("%d", &age); if(age>=18) printf("成年\n"); else printf("未成年\n"); return 0;}
在 if 和 else 语句中都默认只控制一条语句,还是上面的例子,如果想要既打出"成年",又想打出"可以谈恋爱了",那就需要用大括号将两个 printf 输出语句括起来
#include <stdio.h>int main(){ int age = 0; scanf("%d", &age); if(age >= 18) //if 后使⽤{} 控制多条语句-这个块也叫:程序块,或者复合语句 { printf("成年了\n"); printf("可以谈恋爱了\n"); } return 0;}
那如果在 if 语句中嵌套 if 语句呢,这叫做嵌套 if ,但是如果连着多个 if 语句嵌套的话,会显得代码特别复杂不易理解,而且花括号多了,检查代码时也很难一一对应不遗漏,所以可以使用 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 相当于嵌套在else语句中,形成了嵌套结构 printf("输⼊的数字是正数\n"); else printf("输⼊的数字是负数\n"); return 0;}
这里注意,如果 else 语句前有多个 if ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配,相当于前面的 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.分支与循环操作符
2.1关系操作符
用于比较的操作符称为关系表达式
• > 大于运算符
• < 小于运算符
• >= 大于等于运算符
• <= 小于等于运算符
• == 相等运算符
• != 不相等运算符
关系表达式通常返回 0 或 1 ,表示真假,比如, 20 > 12 返回 1 , 12 > 20 返回 0
注意不要把相等运算符 == 和赋值运算符 = 弄混
要避免多个运算符连用,举个例子: i < j < k
这是个合法表达,但不能保证 j 在 i 和 k 之间,这是因为关系运算符是从左往右运算,即 (i < j) < k
所以应改为这种写法 i < j && j < k
2.2条件操作符
条件操作符也叫三目操作符,需要接受三个操作数,其语法形式为:
exp1 ? exp2 : exp3
如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果
2.3逻辑操作符
逻辑运算符用于逻辑的判断
• ! :逻辑取反运算符(改变单个表达式的真假)
• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
• || :逻辑或运算符,就是或者的意思(两侧至少有⼀个表达式为真,则为真,否则为假)
C语言的逻辑运算有个特点,就是优先对左侧的表达式求值,再对表达式右边的值求值
如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为短路
3.switch语句
switch 语句用于实现分支结构,在循环结构中相当于 else if
使用 switch 能够更好解读代码,其语法形式为:
switch (expression) { case value1: statement case value2: statement default: statement}
语句会依次执行 case 分支,如果找不到对应的分支语句,就执行 default 语句
注意:
• switch 后的 expression 必须是整型表达式
• case 后的值,必须是整形常量表达式
举个例子:输入任意⼀个整数值,计算除3之后的余数
#include <stdio.h>int main(){ int n = 0; scanf("%d", &n); switch(n%3) { case 0: printf("整除,余数为0\n"); break; case 1: printf("余数是1\n"); break; case 2: printf("余数是2\n"); break; default: printf("输入错误"); } return 0;}
注意:
• case 和后边的数字之间必须有空格
• 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句,否则会继续执行别的语句,就达不到我们想要的分支效果了
• default 在语句中没有顺序要求,通常把 default 放最后更符合逻辑
4.while循环语句
while 语句也是一种常用的循环语句,while 语句的语法结构和 if 语句非常相似
举个例子:
#include <stdio.h>int main(){ while(1) printf("hehe\n"); //while后边的条件满⾜,死循环的打印hehe return 0;}
首先上来就是执行判断表达式,表达式的值为0,循环直接结束;表达式的值不为0,则执行循环语
句,语句执行完后再继续判断,是否进行下⼀次判断
5.for循环语句
for 循环在循环结构中是最常使用的,其语法形式为:
for(表达式1; 表达式2; 表达式3) 语句;//如果循环体想包含更多的语句,可以加上⼤括号
表达式1 用于循环变量的初始化
表达式2 用于循环结束条件的判断
表达式3 用于循环变量的调整
举个例子:计算1~100之间3的倍数的数字之和
#include <stdio.h>int main(){ int i = 0; int sum = 0; for(i=1; i<=100; i++) { if(i % 3 == 0) sum += i; } printf("%d\n", sum); return 0;}
首先执行表达式1:初始化循环变量,接下来就是执行表达式2:判断,表达式2的结果如果==0,则循环结束
表达式2的结果如果!=0则执行循环语句,循环语句执行完后,再去执行表达式3:调整循环
然后再去表达式2的地方执行判断,表达式2的结果是否为0,决定循环是否继续
整个过程中表达式1:初始化只被执行过一次
6.do-while循环语句
do-while 语句在循环结构中使用的最少,其语法形式为:
do 语句;while(表达式);
举个例子:在屏幕上打印1~10的值
#include <stdio.h>int main(){ int i = 1; do { printf("%d ", i); i = i + 1; }while(i<=10); return 0;}
首先执行 do 里的语句,然后判断表达式
判断表达式的结果是!=0,则继续循环,执行循环语句;判断表达式的结果 == 0,则循环结束
7.break和continue语句
在循环执行的过程中,如果某些状况发生的时候,需要提前终止循环,这是非常常见的现象。C语言中
提供了 break 和 continue 两个关键字,就是应用到循环中的。
• break 的作用是用于永久的终止循环,只要 break 被执行,直接就会跳出循环,继续往后执行
• continue 的作用是跳过本次循环中 continue 后边的代码, for 循环中直接跳到循环调整部分,while 循环直接跳到循环判断部分
8.goto语句
goto 语句可以实现在同⼀个函数内跳转到设置好的标号处
举个例子:
#include <stdio.h>int main(){ printf("hehe\n"); goto next; printf("haha\n"); next: printf("跳过了haha的打印\n"); return 0;}
goto 语句如果使用的不当,就会导致在函数内部随意乱跳转,打乱程序的执行流程,所以我们的建
议是能不用尽量不去使用;但是 goto 语句也不是一无是处,在多层循环的代码中,如果想快速跳出
使用 goto 就非常的方便了
比如本来 for 循环想提前退出得使用 break ,⼀个 break 只能跳出⼀层 for 循环,如果3层循环嵌套
就得使用3个 break 才能跳出循环,所以在这种情况下我们使用 goto 语句就会更加的快捷