【C语言从不挂科到高绩点】04-流程控制语句-if
Hello!彦祖们,俺又回来了!!!,继续给大家分享 《C语言从不挂科到高绩点》课程
本套课程将会从0基础讲解C语言核心技术,适合人群:
- 大学中开设了C语言课程的同学
- 想要专升本或者考研的同学
- 想要考计算机等级证书的同学
- 想要从事C/C++/嵌入式开发的同学
前文传送:
【C语言从不挂科到高绩点】01-C语言概述-CSDN博客
【C语言从不挂科到高绩点】02-变量、数据类型、标识符、关键字-CSDN博客
【C语言从不挂科到高绩点】03-C语言运算符
分享不易,耗时耗力,麻烦给个不要钱的关注和赞吧
承接毕设指导,技术答疑,学习路上缺少导师的同学可以私信我
更多学习资料,公众号:墨轩学习网,B站:墨轩大楼
五、选择结构和循环结构
C 语言中三大结构:
- 顺序结构:就是让程序从头到尾依次逐行执行每一条语句,不重复执行代码
- 选择结构:可以根据不同的条件从而选择执行不同的代码
- 循环结构:可以让程序循环重复执行某段代码
5.1 选择结构-if
5.1.1 if 语句格式 1
if(条件表达式){
代码块;
}
表示:如果条件表达式成立,结果为 1,就执行代码块,否则就不执行
#include <stdio.h>
int main(){
// 输入年龄判断是否成年了
// 1. 定义变量
int age = 0;
// 2. 提示输入
printf("请输入年龄:");
// 3. 将输入的内容扫描到变量中
scanf("%d",&age);
// 如果age<18 ,条件成立,就会执行if语句中的代码块
// 如果age<18 不成立,if语句中的代码就不会执行
if(age<18){
printf("你是未成年\n");
}
printf("O(∩_∩)O哈哈~\n");
return 0;
}
此种 if 格式,适用于,当达到某个条件时,才去执行某段代码。比如:如果我中了 500 万,给你们每人发 20 万。
5.1.2 if 语句格式 2
if(条件表达式){
代码块1;
}else{
代码块2;
}
表示:如果条件表达式成立,结果为 1,就执行代码块 1.否则就执行代码块 2
#include <stdio.h>
int main(){
printf("我:我能进网吧吗?\n");
int age = 0;
printf("网管:你多大了?");
scanf("%d",&age);
// 网管开始做判断
if(age>=18){// 如果age满足大于或者等于18
printf("网管:你已经成年了!可以进来happy了\n");
}else{
printf("网管:滚~回家写作业去!\n");
}
return 0;
}
此种格式适用于如果满足条件就执行一个操作,不满足就执行另外一种操作。
需要注意的问题:如果 if 或者 else 中只有一行代码。这个时候 if 或者 else 的大括号可以省略。
if(age>=18)// 如果age满足大于或者等于18
printf("网管:你已经成年了!可以进来happy了\n");
// printf("O(∩_∩)O哈哈~"); // 添加此行代码,编译就会出错
else
printf("网管:滚~回家写作业去!\n");
printf("┭┮﹏┭┮");
省略大括号之后,if 或者 else 只能管住 1 行代码,后面的代码实际上已经不在 if 语句里面了。虽然可以省略,但是建议不要省略。
5.1.3 if 语句的格式 3
if(条件表达式1){
代码块1;
}else if(条件表达式2){
代码快2;
}else if(条件表达式3){
代码块3;
}
......
else{
代码块n
}
表示:从上到下依次判断条件表达式是否成立,如果条件表达式成立,就会执行对应的代码块。执行完代码块之后,整个 if 语句就结束了。后面的条件将不再做判断
如果所有的条件表达式都不成立,最终会执行 else 中的代码块。
#include <stdio.h>
int main(){
int n=2;
// 特别注意:在if语句中,等值判断一定要用==
// 如果写成n=1,就意味着将1赋值给了n,此时的n就是一个非0值,条件成立
// if(n) 这个条件就恒成立了
if(n==1){
printf("1\n");
}else if(n<3){
printf("3\n");
}else if(n<6){ // 当条件满足时,会执行这个if语句里面的代码
printf("6\n");// 执行完这个代码,if语句就结束了
}else if(n<8){ // 上面条件满足,执行完代码,if语句就结束了,此处条件不做判断
printf("8\n");
}else{
printf("666\n");
}
return 0;
}
需要注意的点:在 if 语句的条件表达式中,做等值判断时,要用==,而不是=。=等号是赋值语句,会让条件表达式变成恒成立的状态。
【练习 1】根据输入的月薪判断夜生活
【题目需求】
- 如果月薪小于 4000 回家看小电影
- 如果月薪在 4000-7000 出去下馆子
- 如果月薪 7000-12000 约女朋友出去逛吃逛吃
- 如果月薪 12000-18000 出去蹦迪
- 如果月薪 18000 以上,为所欲为
【参考代码】
/**
【题目需求】
1. 如果月薪小于 4000 回家看小电影
2. 如果月薪在 4000-7000 出去下馆子
3. 如果月薪 7000-12000 约女朋友出去逛吃逛吃
4. 如果月薪 12000-18000 出去蹦迪
5. 如果月薪 18000 以上,为所欲为
**/
#include <stdio.h>
int main(){
int salary = 0;
printf("请输入月薪:");
scanf("%d",&salary);
// 在if语句中,如果要实现多个条件同时满足,可以使用 &&,表示并且
// 如果要实现多个条件满足其中一个,可以使用|| ,表示或者
// if(salary<4000){
// printf("回家看小电影\n");
// }else if(4000<=salary && salary<7000){
// printf("出去下个馆子\n");
// }else if(7000<=salary && salary<12000){
// printf("约女朋友出去逛吃逛吃\n");
// }else if(12000<=salary && salary<18000){
// printf("出去蹦迪\n");
// }else{
// printf("为所欲为,我与赌毒不共戴天\n");
// }
if(salary<4000){
printf("回家看小电影\n");
}else if(salary<7000){
printf("出去下个馆子\n");
}else if(salary<12000){
printf("约女朋友出去逛吃逛吃\n");
}else if(salary<18000){
printf("出去蹦迪\n");
}else{
printf("为所欲为,我与赌毒不共戴天\n");
}
return 0;
}
我知道你小子在想什么,O(∩_∩)O哈哈~
【练习 2】使用 if 语句完成菜单功能:
/**
【练习 2】使用 if 语句完成菜单功能:
**/
#include <stdio.h>
int main(){
printf("*******************************************\n");
printf("***** 欢迎来到王者峡谷 ****\n");
printf("*******************************************\n");
printf("* 1.注册账号 2.登录游戏 3.充值 4.观看直播 *\n");
printf("*******************************************\n");
printf("请选择:");
int con = 0;
scanf("%d",&con); // 选择的内容,存到con中
if(con==1){ // 如果输入1
printf("进入注册账号的功能\n");
}else if(con==2){
printf("登录游戏功能\n");
}else if(con==3){
printf("充值功能\n");
}else if(con==4){
printf("观看直播的功能");
}else{
printf("沙雕!只能输入1-4\n");
}
return 0;
}
5.1.4 if 语句的嵌套
if 语句中可以嵌套 if 语句,通常用来对条件做进一步的判断。
比如:当年龄大于 18 岁,并且口袋里面至少有 20 元的时候才能上网。
/**比如:当年龄大于 18 岁,并且口袋里面至少有 20 元的时候才能上网。**/
#include <stdio.h>
int main(){
// 定义年龄变量
int age = 0;
// 定义钱的变量
int money = 0;
printf("请输入年龄:\n");
scanf("%d",&age);
// 判断年龄是否大于等于18
if(age>=18){
// 如果成年了,再问有多少钱
printf("请输入金钱:");
scanf("%d",&money);
if(money<20){
printf("滚~穷逼!\n");
}else{
printf("大爷,里面请!\n");
}
}else{// 小于18
printf("滚回家写作业!\n");
}
return 0;
}
【练习案例】判断某年某月一共有多少天
【题目需求】
- 输入年份和月份
- 输出 XX 年 XX 月一共有 XX 天
比如:年份输入 2024 月份输入 2 ,输出:2024 年 2 月一共有 29 天
提示: 闰年判断公式 : year%4==0&&year%100!=0||year%400==0
【参考代码】
/**
【题目需求】
1. 输入年份和月份
2. 输出 XX 年 XX 月一共有 XX 天
比如:年份输入 2024 月份输入 2 ,输出:2024 年 2 月一共有 29 天
提示: 闰年判断公式 : year%4==0&&year%100!=0||year%400==0
**/
#include <stdio.h>
int main(){
// 1.输入年份和月份
int year=0,month=0;
printf("请输入年份和月份:\n");
scanf("%d %d",&year,&month);
// 2.先判断月份
// 月份:1,3,5,7,8,10,12 一共有31天
if(month==1||month==3 || month==5 || month==7
||month==8 || month==10 ||month==12){
printf("%d年%d月一共有31天\n",year,month);
}else if(month==4||month==6||month==9||month==11){
// 月份:4,6,9,11 一共有30天
printf("%d年%d月一共有30天\n",year,month);
}else if(month==2){
// 月份:2 进一步判断闰年还是平年
// 闰年:2月份有29天
// 平年:2月份有28天
if(year%4==0&&year%100!=0||year%400==0){
printf("%d年%d月一共有29天\n",year,month);
}else{
printf("%d年%d月一共有28天\n",year,month);
}
}else{
printf("月份输入有误,请重新输入\n");
}
return 0;
}
【练习案例】输入三个数,找出 3 个数中的最大值
1. 使用3目运算符
2. 使用if语句
【参考代码】
/**
练习案例】输入三个数,找出 3 个数中的最大值
**/
#include <stdio.h>
int main(){
int a,b,c;
printf("请输入三个数:");
scanf("%d %d %d", &a,&b,&c);
// 最大值
int max = 0;
if(a>b){
// 如果能进入到这个if语句中,说明a>b,b不可能是最大值,不考虑b
// 此时只需要拿a和c进行比较
if(a>c){
max = a; // 设置最大值
}else{
max = c; // 实则之最大值
}
}else if(b>c){ // 能进入到这个判断语句,那必定是a>b不成立,此时的a必定小于或者等于b
max = b;
}else{
// 能进入到这个里面来,说明 a<=b,b<=c 此时说明c是最大值
max = c;
}
printf("最大值是%d\n",max);
// 三目运算符的方式
// 1. 假如 a>b 成立的,b不可能为最大值,
// 此时比较a和c 此时就会选择a>c?a:c
// 2. 如果 a>b 不成立,a不可能为最大值,
// 此时比较b和c 此时就会选择b>c?b:c
max = a>b?(a>c?a:c):(b>c?b:c);
printf("最大值是%d\n",max);
return 0;
}
打完收工,把关注和赞留下,你可以走了!去享受你幸福美满的生活吧!