欢迎各位点赞👍 评论**✍收藏⭐**
引言:
大家好,我是坊钰,为了让大家深入了解C语言,我开创了**【玩转C语言系列】** ,将为大家介绍C语言相关知识,另外,还会不定时更新**【C语言训练题库】,想学好C语言的宝子们,一定要收藏**起来,一起努力吧!
点赞!收藏!以防以后找不到了!!!
目录
[1. if 语句](#1. if 语句)
[1.1 语法形式](#1.1 语法形式)
[1.2 else 语句](#1.2 else 语句)
[1.3 分支中包含多条语句](#1.3 分支中包含多条语句)
[1.4 嵌套if 语句](#1.4 嵌套if 语句)
[1.5 else 语句悬空问题](#1.5 else 语句悬空问题)
[2. 关系操作符](#2. 关系操作符)
[3. 条件操作符](#3. 条件操作符)
[4. 逻辑操作符 && || !](#4. 逻辑操作符 && || !)
[4.1 取反操作符 !](#4.1 取反操作符 !)
[4.2 与运算符 &&](#4.2 与运算符 &&)
[4.3 或运算符 ||](#4.3 或运算符 ||)
[4.4 闰年的判断](#4.4 闰年的判断)
[5. switch 语句](#5. switch 语句)
[5.1 switch 计算除以3后的余数](#5.1 switch 计算除以3后的余数)
[5.2 switch 中的 break 语句](#5.2 switch 中的 break 语句)
[5.3 switch 语句中的 default 语句](#5.3 switch 语句中的 default 语句)
[5.4 case 和 default 的顺序问题](#5.4 case 和 default 的顺序问题)
[6. while 循环](#6. while 循环)
[6,1 语法结构](#6,1 语法结构)
[6.2 while 循环实践](#6.2 while 循环实践)
[7. for 循环](#7. for 循环)
[7.1 for 循环语法形式](#7.1 for 循环语法形式)
[7.2 for 循环执行流程](#7.2 for 循环执行流程)
[编辑 7.3 for 循环的实践](#编辑 7.3 for 循环的实践)
[8. do-while 循环](#8. do-while 循环)
[8.1 语法形式](#8.1 语法形式)
[8.2 执行流程](#8.2 执行流程)
[8.3 循环实践](#8.3 循环实践)
[9. 小结](#9. 小结)
1. if 语句
1.1 语法形式
if 语句的语法形式如下:
cs
if (表达式)
语句;
表达式成立(为真),则语句执行,表达式不成立(为假),则语句不执行
C语言中,0 表示为假,非 0 表示为真;
例:
cs
//判断一个数是否为奇数
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
return 0;
}
1.2 else 语句
如果上述不为奇数,为偶数,那就要用到 else 语句了
if else 语句语法形式
cs
if (表达式)
语句1;
else
语句2;
若表达式为真,执行语句1 ,若表达式为假,执行语句2;
上述判断奇数的代码可以优化一下
cs
#include <stdio.h>
int main()
{
int num = 0;
scanf("%d", &num);
if(num % 2 == 1)
printf("%d 是奇数\n", num);
else
printf("%d 是偶数\n", num);
return 0;
}
1.3 分支中包含多条语句
看下面的代码,猜猜输出的是什么?
cs
#include <stdio.h>
int main()
{
int a = 10;
if (a > 5)
printf("haha");
printf("hhhh");
return 0;
}
答案是输出 haha;
因为,if 语句后只能执行一条语句,如果想要两条都执行,那要加上大括号 例:
cs
#include <stdio.h>
int main()
{
int a = 10;
if (a > 5)
{
printf("haha");
printf("hhhh");
}
return 0;
}
这样就打印两条语句了
1.4 嵌套if 语句
if 里面也可以嵌套if 语句
cs
#include <stdio.h>
int main()
{
int n = 10;
if (n>0)
{
if (n>5)
{
printf("haha");
}
else
{
printf("hehe");
}
}
else
{
printf("hello");
}
return 0;
}
1.5 else 语句悬空问题
如果有多个 if 和 else ,可以记住这样⼀条规则, else 总是跟最接近的 if 匹配
cs
#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 和 else ,可以记住这样⼀条规则, else 总是跟最接近 的 if 匹配
如果我们希望else确实和第⼀个if匹配,可以这样修改代码
cs
#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. 关系操作符
C语言主要的关系操作符有下面6个
- > 大于运算符
- < 小于运算符
- >= 大于等于运算符
- <=小于等于运算符
- == 相等运算符
- != 不相等运算符
关系操作符通常返回 0 或 1 ,表示真假
比如: (20>10) ----> 返回 1 ,(10>20) ---> 返回 0
注意: 相等运算符(==) 和 赋值运算符(=) 两个不一样
另⼀个需要避免的错误是:多个关系运算符不能连用
要表达 1 < 2 < 3 时的用法:
cs
//错误用法
1 < 2 < 3
//正确用法
1 < 2 && 2 < 3
3. 条件操作符
条件操作符也叫三目操作符,需要接受三个操作数的
cs
exp1 ? exp2 : exp3
条件操作符的计算逻辑是:
- 如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果
- 如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果
例:求两个数中的最大值
cs
#include <stdio.h>
int main()
{
int n = 0;
int m = 0;
scanf("%d %d", &n, &m);
int max = m > n ? m : n;
printf("%d", max);
return 0;
}
4. 逻辑操作符 && || !
逻辑运算符提供逻辑判断功能,用于构建更复杂的表达式,主要有下⾯三个运算符
- ! :逻辑取反运算符(改变单个表达式的真假)
- && :与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)
- || :或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)
4.1 取反操作符 !
如果 a 为真的,那 !a 就是假的,反之 a 为假的,那 !a 就是真的
4.2 与运算符 &&
cs
(exsp 1) && (exsp 2) && (exsp 3)
注意:如果 exsp 1 为假( 0 ),那后面两个 exsp 2 和 exsp 3 都不计算了
如果exsp 1 为真,则依次往下计算
4.3 或运算符 ||
cs
(exsp 1) || (exsp 2) || (exsp 3)
注意:如果 exsp 1 为真( 1 ),那后面两个 exsp 2 和 exsp 3 都不计算了
如果exsp 1 为假,则依次往下计算
4.4 闰年的判断
输闰年判断的规则:
- 能被4整除并且不能被100整除是闰年
- 能被400整除是闰年
cs
#include <stdio.h>
//代码1
int main()
{
int year = 0;
scanf("%d", &year);
if(year%4==0 && year%100!=0)
printf("是闰年\n");
else if(year%400==0)
printf("是闰年\n");
return 0;
}
//代码2
int main()
{
int year = 0;
scanf("%d", &year);
if((year%4==0 && year%100!=0) || (year%400==0))
printf("是闰年\n");
return 0;
}
5. switch 语句
除了 if 语句外,C语言还提供了 switch 语句来实现分支结构
switch 语句是⼀种特殊形式的 if...else 结构,用于判断条件有多个结果的情况。它把多重的 else if 改成更易用、可读性更好的形式
cs
switch (expression)
{
case value1: statement
case value2: statement
default: statement
}
- switch 后的 expression 必须是整型表达式
- case 后的值,必须是整形常量表达式
5.1 switch 计算除以3后的余数
练习:输入任意⼀个整数值,计算除3之后的余数
cs
#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;
}
- case 和后边的数字之间必须有空格
- 每⼀个 case 语句中的代码执行完成后,需要加上 break ,才能跳出这个switch语句
5.2 switch 中的 break 语句
我们如果把上述代码中的break全都去掉,看看结果
cs
#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;
}
所以在 switch 语句中 break 语句是非常重要的,能实现真正的分支效果。 当然, break 也不是每个 case 语句都得有,这就得根据实际情况来看了
5.3 switch 语句中的 default 语句
cs
#include <stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
switch (n)
{
case 0:
printf("输入数为 0\n");
case 1:
printf("输入数为 1\n");
case 2:
printf("输入数为 2\n");
default :
printf("输入错误,请重新输入\n");
}
return 0;
}
5.4 case 和 default 的顺序问题
在 switch 语句中 case 子句和 default 子句有要求顺序吗? default 只能放在最后吗?
其实,在 switch 语句中 case 语句和 default 语句是没有顺序要求的,只要你的顺序是满⾜实 际需求的就可以。 不过我们通常是把 default 子句放在最后处理的
6. while 循环
6,1 语法结构
cs
while(表达式)
{
语句;
}
6.2 while 循环实践
例:打印 1~10 数字
cs
#include <stdio.h>
int main()
{
int a = 1;
while (a <= 10)
{
printf("%d ", a);
a++;
}
return 0;
}
7. for 循环
7.1 for 循环语法形式
cs
for(表达式1; 表达式2; 表达式3)
{
语句;
}
- 表达式1 用于循环变量的初始化
- 表达式2 用于循环结束条件的判断
- 表达式3 用于循环变量的调整
7.2 for 循环执行流程
7.3 for 循环的实践
练习:在屏幕上打印1~10的值
cs
#include <stdio.h>
int main()
{
for (int i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
8. do-while 循环
8.1 语法形式
cs
do
语句;
while(表达式)
8.2 执行流程
8.3 循环实践
在屏幕上打印1~10的值
cs
#include <stdio.h>
int main()
{
int a = 1;
do
{
printf("%d ", a);
a++;
} while (a <= 10);
return 0;
}
9. 小结
以上就是关于【玩转C语言】第四讲的内容了,具体还需宝子们去实践,如果觉得该博客对你有用的话,希望一键三连,点个关注不迷路,谢谢支持!