从今天开始我们开始第三模块《分支语句和循环语句》的学习,在本模块中我们将会涉及到以下9个内容:什么是语句、分支语句——if语言、分支语句——switch语句、循环语句——while循环、循环语句——for循环、循环语句——do while循环、折半查找算法、猜数字游戏、goto语句。
第三部分 分支语句和循环语句
一、什么是语句
/*
什么是语句?
C语言中由一个分号 ; 隔开的就是一条语句。
比如:
printf("hehe");
1 + 2;
*/
/*
C语言中的语句主要分为五类
1、表达式语句
2、函数调用语句
3、控制语句
4、复合语句
5、空语句
而我们在第三部分《分支语句和循环语句》中学习到的都是控制语句。
控制语句用于控制程序的执行流程,以实现程序的各种结构方式。
C语言是一门结构化的程序设计语言。支持三种结构——顺序结构、选择结构、循环结构
控制语句由特定的语句定义符组成,C语言有九种控制语句,又可细分以下三类:
1、条件判断语句(分支语句):if语句、switch语句
2、循环执行语句:do while语句、for语句、while语句
3、转向语句:break语句、goto语句、continue语句、return语句
接下来我们将详细的学习这九种语句。
*/
二、分支语句——if语句
(一)、if语句的语法结构
/*
if 语句的语法结构
1、标准结构:
if(表达式)
语句;
2、单分支选择结构:
if(表达式)
语句1;
else
语句2;
3、多分支选择结构:
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
当表达式的结果为真时,则执行对应的语句。
在C语言中,0表示假,非0表示真。
另外if语句也支持嵌套。
*/
// 下面我用一个实例——“年龄的判断”,通过不断完善其功能展现if语句的语法结构
// 第一步:当输入的年龄小于18时,显示“未成年”
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入一个年龄:");
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
return 0;
}
// 上面这段代码,展现了一个if语句的标准结构
// 第二步:当输入的年龄小于18时,显示“未成年”;否则显示“成年”
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入一个年龄:");
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else
printf("成年\n");
return 0;
}
// 这是一个标准的单分支选择语句语法结构
// 第三步:将成年继续细分成四个阶段
#include <stdio.h>
int main()
{
int age = 0;
printf("请输入一个年龄:");
scanf("%d", &age);
if (age < 18)
printf("未成年\n");
else if (age >= 18 && age < 30)
printf("青年\n");
else if (age >= 30 && age < 50)
printf("中年\n");
else if (age >= 50 && age < 80)
printf("老年\n");
else
printf("老寿星\n");
return 0;
}
// 这是一个标准的多分支选择语句语法结构
// 上面的代码的执行语句都是单句话,如果要执行多条语句,则应该使用代码块
// 比如下面我用一段代码来展现C语言中if语句的嵌套与执行多条语句
#include<stdio.h>
int main()
{
int choice1 = 0;
int choice2 = 0;
printf("请选择你是否准备认真学习(1代表认真学习,0代表不学习) >> ");
scanf("%d", &choice1);
if (1 == choice1)
{
printf("你选择了一条正确的道路.\n");
printf("你将获得一个好offer!\n");
}
else if (0 == choice1)
{
printf("请选择你家是否有百亿家产 (1代表有,0代表没有) >> ");
scanf("%d", &choice2);
if (1 == choice2)
printf("呵呵\n");
else
printf("那你只能卖红薯了\n");
}
else
printf("输入错误,请输入0或1\n");
return 0;
}
(二)、悬空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 ,是一种非常不好的代码习惯
/*
悬空else 是指在有多个 if 语句嵌套的情况下,else 语句与哪个 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;
}
// 接下来我们比对几个代码来观察下养成良好代码习惯的重要性
// 代码一
if (condition)
{
return x;
}
return y;
// 代码二
if (condition)
{
return x;
}
else
{
return y;
}
// 代码一和代码二的实际含义以及效果是一模一样的
// 但是代码二的形式明显优于代码一,代码一往往会让人产生误解
// 代码三
int num = 5;
if (num == 5)
{
printf("hehe\n");
}
// 代码四
int num = 5;
if (5 == num)
{
printf("hehe\n");
}
// 代码三和代码四的实际含义以及效果是一模一样的
// 但是我们建议当比较一个变量和一个常量是否相等的时候
// 把常量放在等式的左边
// 这样增强了代码的可读性和一致性,同时也避免了将“==”写成“=”而造成的错误
(三)、练习
1、判断一个数是否为奇数
#include<stdio.h>
int main()
{
int num = 0;
printf("请输入一个整数:");
scanf("%d",&num);
if (1 == num % 2)
printf("奇数");
else
printf("不是奇数");
return 0;
}
2、输出1-100之间的奇数
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
if (1 == i % 2)
printf("%d ", i);
i++;
}
return 0;
}
另外一种写法:
#include<stdio.h>
int main()
{
int i = 1;
while (i <= 100)
{
printf("%d ", i);
i += 2;
}
return 0;
}
// 这个代码的效率明显高于上面的代码,因为其省略了判断的步骤和循环的次数
以上便是本篇笔记的全部内容,我们对第三部分的学习进行了一个开篇,介绍了什么是语句以及对分支语句——if语句进行了详细的讲解。在下一篇笔记中,我们将继续第三部分的学习。