1. if语句
1.1 语法格式
if(条件表达式)
{
语句;
...
}
if语句通常与else配合使用:
if(条件表达式)
{
语句1;
...
}
else
{
语句2;
...
}
1.2 执行过程
第一种情况:
- 条件表达式结果为真(即非零) ⟹ \Longrightarrow ⟹ 执行if代码块内的语句。
- 条件表达式结果为假(即零) ⟹ \Longrightarrow ⟹ 不执行if代码块内的语句,程序流转到if语句后面。
示例:
#include <stdio.h>
int main(void)
{
//声明变量并初始化
int a = 1;
int b = 2;
if(a == 1)
print("%d",a);
if(b == 1)
printf("%d",b);
return 0;
}
这段代码中,我们声明了变量a、b,并且初始化a为1、b为2,在执行if(1)时,因为a=1,所以a==1
判断成立,执行printf()
函数,屏幕上打印出数字1;但是在执行if(2)时,由于b=2,所以b==1
不成立,不执行printf()
函数,程序流转到return
,程序结束。最终屏幕上只打印出数字1
第二种情况:
- 条件表达式结果为真 ⟹ \Longrightarrow ⟹ 执行语句1;
- 条件表达式结果为假 ⟹ \Longrightarrow ⟹ 执行语句2;
示例:
#include <stdio.h>
int main(void)
{
int a = 1;
if(a == 1)
printf("哈哈");
else
printf("呵呵");
if(a != 1)
printf("哈哈哈");
else
printf("呵呵呵");
return 0;
}
这段代码最终会在屏幕中打印出“哈哈呵呵呵”。
1.3 注意事项
- if和else默认都只控制一条语句,所以需要if或者else控制多条语句时,需要用{}包裹代码块。
示例:
#include <stdio.h>
int main(void)
{
int a = 1;
if (a == 1)
printf("haha");
printf("hehe");
else
printf("hellow");
printf("hi");
return 0;
}
在这段代码中,由于我没有使用{}包裹代码块,在编译时编译器会报错。
正确的写法如下:
#include <stdio.h>
int main(void)
{
int a = 1;
if (a == 1)
{
printf("haha");
printf("hehe");
}
else
{
printf("hellow");
printf("hi");
}
return 0;
}
这时就能成功在屏幕上打印出“hahahehe”。
- 在if-else语句中,else可以与另外一个if语句连用,构成多重判断。
示例:
#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;
}
在这个示例中,else与第二个if匹配。
2. 关系运算符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式”(relational expression),⾥⾯使⽤的运算符就称为“关系运算符”(relational operator),主要有下⾯6个。
> | 大于运算符 |
---|---|
< | 小于运算符 |
<= | 小于或等于运算符 |
>= | 大于或等于运算符 |
== | 相等运算符 |
!= | 不相等运算符 |
关系表达式通常返回0或1,表示真假。其中1表示真,0表示假。
但是在C语言中,0表示假,所有的非零值表示真。
注意:
=
和==
是两个不一样的运算符,=
是赋值运算符,==
是关系运算符。
3. 逻辑运算符
! | 逻辑取反运算符 |
---|---|
&& | 与运算符 |
\\ | 或运算符 |
注:这里的\\
实际上应该是||
,只是由于我使用的是md编辑器,||
在表格中显示不出来。
示例:
#define _CRT_SECURE_NO_WARNINGS/* 这是一个预处理指令,用于告诉编译器忽略与安全警告相关的编译错误或警告信息。*/
#include <stdio.h>
int main()
{
//声明变量并初始化
int year = 1;
//输入年份
scanf("%d",&year);
//判断时候是闰年
if((year % 4 == 0 && year %100 !=0) || (year %400 ==0))
printf("%d年是闰年\n", year);
else
printf("%d不是闰年\n", year);
}
4. switch语句
4.1 语法格式
switch (expression)
{
case value1:
{
statement1;
...
}
case value2:
{
statement2;
...
}
...
defaule:
{
statement;
...
}
}
在这段代码中,根据表达式expression
不同的值,执行相应的case
分支。如果找不到对应的值,就执行idefault
分支。
4.2 注意事项
switch
后的expression
必须是整型表达式case
后的值,必须是整型常量表达式
5.while循环
5.1 语法格式
while(expression)
{
statement;
...
}
5.2 执行过程
- 判断表达式结果为假(即零) ⟹ \Longrightarrow ⟹ 循环结束
- 判断表达式结果为真(即非零) ⟹ \Longrightarrow ⟹ 执行循环体 ⟹ \Longrightarrow ⟹ 继续判断 ⟹ \Longrightarrow ⟹ …
5.3 if语句与while语句
相似性:结构相似
if(expression)
{
statement;
...
}
while(expression)
{
statement;
...
}
区别:
示例:
#include <stdio.h>
int main(void)
{
if(1)
printf("hehe");
return 0;
}
#include <stdio.h>
int main(void)
{
while(1)
printf("haha");
return 0;
}
第一段代码只会在屏幕上打印出“hehe”,但是第二段代码会在屏幕上打印出无数个“haha”。
这就是if语句和while语句的区别,while语句可以实现循环效果。
6. for循环
6. 1 语法格式
for(expression1;expression2;expression3)
{
statement;
...
}
解释:
expression1 | 用于循环变量的初始化 |
---|---|
expression2 | 用于循环结束条件的判断 |
expression3 | 用于循环变量的调整 |
6.2 执行过程
expression1:初始化 ⟹ \Longrightarrow ⟹ expression2:判断 ⟹ \Longrightarrow ⟹
- 判断为假 ⟹ \Longrightarrow ⟹ 结束循环
- 判断为真 ⟹ \Longrightarrow ⟹ 执行循环体 ⟹ \Longrightarrow ⟹ expression2:判断 ⟹ \Longrightarrow ⟹ …
7. do-while循环
7.1 语法格式
do
{
statement;
...
}
while(expression);
7.2 执行过程
执行statement ⟹ \Longrightarrow ⟹ 执行expression ⟹ \Longrightarrow ⟹
- 判断为真 ⟹ \Longrightarrow ⟹ 继续循环 ⟹ \Longrightarrow ⟹ …
- 判断为假 ⟹ \Longrightarrow ⟹ 循环结束
8. break和continue语句
break
的作用是用于永久终止循环,只要break
被执行,直接就会跳出循环,继续往后执行。continue
的作用是跳过本次循环continue
后面的代码,在for
循环和while
循环中有所差异。
9. goto语句
goto
语句可以实现在同一个函数内跳转到设置好的标号处。
语法格式:
goto label;
...
label:
statement1;
statement2;
示例:
#include <stdio.h>
int main()
{
printf("hehe\n");
goto next:
printf("haha\n");
next:
printf("跳过了haha的打印\n");
return 0;
}