if语句
if
在C语⾔中,0为假,⾮0表⽰真
//判断一个数是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
else
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age>=18)
printf("成年\n");
else
printf("未成年\n");
return 0;
}
默认在 if 和 else 语句中默认都只控制⼀条语句,如果要if语句同时控制2条语句,要使⽤ {} 将代码括起来, else 后也可以跟上⼤括号。
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if(age >= 18) //if 后使⽤{} 控制多条语句-这个块叫:程序块,或者复合语句
{
printf("成年了\n");
printf("可以谈恋爱了\n");
}
else //else 后使⽤{}控制多条语句-这个块也叫:程序块,或者复合语句
{
printf("未成年\n");
printf("不可以早恋哦\n");
}
return 0;
}
嵌套if/else
#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
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;
}
//什么也不输出
关系操作符
== != < > =
多个关系运算符不宜连⽤
比如 i < j < k ,因为关系运算符是从左到右计算, 所以变成了(i < j) < k , i < j 返回 0 或 1 ,最终是 0 或 1 与变量 k 进⾏⽐较。应改为 i < j && j < k。
条件操作符(三目操作符)
形式如下:
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
逻辑操作符
逻辑取反运算符 !
#include <stdio.h>
int main()
{
int flag = 0;
if(!flag)
{
printf("do something\n");
}
return 0;
}
上⾯的代码的意思就是 flag 为假,执⾏if语句中的代码
逻辑与运算符&&
两侧的表达式都为真,则为真,否则为假
int month = 0;
scanf("%d", &month);
if(month >= 3 && month <= 5)
{
printf("春季\n");
}
逻辑或运算符||
两侧⾄少有⼀个表达式为真,则为真,否则为假
int month = 0;
scanf("%d", &month);
if(month == 12 || month==1 || month == 2)
{
printf("冬季\n");
}
短路
C语⾔逻辑运算符总是先对左侧的表达式求值,再对右边的表达式求值。 如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。
&&操作符的左操作数的结果为0时,右边操作数就不执⾏。
|| 操作符的左操作数的结果不为0时,右边操作数就不执⾏。
像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进⾏计算的运算称为短路求值。
switch语句
switch (expression) {
case value1: statement
case value2: statement
default: statement
}
根据表达式expression 不同的值,执⾏相应的case分支,如果找不到相应的case分支,就执行default分支。
- switch后的expression 必须是整型表达式
- case 后的值,必须是整形常量表达式
#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;
}
return 0;
}
break
在 switch 语句中使⽤ break 才能跳出 ,如果一个case语句后面没有break语句,代码会继续往下执⾏,有可能执⾏其他 break语句中的代码,直到遇到break 语句,或者 switch 语句结束。
比如执行以下代码:
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch(n%3)
{
case 0:
printf("整除,余数为0\n");
case 1:
printf("余数是1\n");
case 2:
printf("余数是2\n");
}
return 0;
}
while循环
语法结构和if类似
while(表达式)
语句;
for循环
for( 表达式 1; 表达式 2; 表达式 3)
语句;
- 表达式1⽤于循环变量的初始化
- 表达式2⽤于循环结束条件的判断
- 表达式3⽤于循环变量的调整
⾸先执⾏表达式 1 初始化循环变量, 接下来执行表达式 2 的判断部分, 表达式 2 的结果如果==0则循环结束,表达式 2 的结果如果!=0则执⾏循环语句,循环语句执⾏完后,再去执⾏表达式3。(表达式 2 的结果是否为0,决定循环是否继 续)
整个循环的过程中,表达式1初始化部分只被执⾏1次,剩下的就是表达式2、循环语句、表达式3在循环。
//在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
while和for的对比
do-while循环
do while 循环先进⼊循环体,执⾏循环语句,然后再执⾏while后面的判断表达式,表达式为真,就会进⾏下⼀次,表达式为假,则不再继续循环。(而while 和 for 这两种循环都是先判断,条件如果满⾜就进⼊循环,执⾏循环语句,如果不满⾜就跳出循环 )
//在屏幕上打印1~10的值
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
}while(i<=10);
}
return 0
break和continue语句
break是⽤于永久的终⽌循环,只要 break 被执⾏,直接就会跳出循环,继续往后执⾏。
continue是跳过本次循环中continue 后边的代码,在 for 循环和 while 循环中有差异的。
while循环
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
break;//当i等于5后,就执⾏break,循环就终⽌了
printf("%d ", i);
i = i+1;
}
return 0;
}
//输出1 2 3 4
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
if(i == 5)
continue;
printf("%d ", i);
i = i+1;
}
return 0;
}
//当i等于5后,就执⾏continue,直接跳过continue的代码,去循环的判断的地⽅
//因为这⾥跳过了i = i+1,所以i⼀直为5,程序陷⼊和死循环
for循环
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
break;
printf("%d ", i);
}
return 0;
}
输出1 2 3 4
#include <stdio.h>
int main()
{
int i = 1;
for(i=1; i<=10; i++)
{
if(i == 5)
continue;//这⾥continue跳过了后边的打印,来到了i++的调整部分
printf("%d ", i);
}
return 0;
}
do while循环
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d ", i);
i = i + 1;
}while(i<=10);
return 0;
}
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf(
"%d "
, i);
i = i + 1;
}while(i<=10);
return 0;
}
goto语句
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next;
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}