某大师说:程序如人生,不可能一帆风顺,一路走到尾
正如我上面说的那句话一样,咱们之前学的程序都是一帆风顺,一路走到尾,要打印什么,输出什么就直接按照我们编写的程序顺序来输出,但我们程序的世界,就是如此平坦吗?No!!
我们程序也如人生一般,面临着很多分支选择,也会如人生般需要重复做着某事。
因此,咱们程序也把人生高度抽象为三种结构:
1、顺序结构
顺序结构是最简单也是最基本的程序结构,它是由若干段代码组成,并按照从上到下的顺序依次执行的。
图片来源于网络
这就好比一条路从头到尾走到头,没有任何分叉!
程序流程图:
程序流程图
2、分支结构
花满楼大师又说了:人生不断分支做选择,无论选哪种,也许结果完全不一样。程序中也如此,可能有时候代码并不是从上往下顺序执行完,而是在某个分支时,你的程序需要判断,是执行这一段代码,还是那一段代码。所以我们把这种结构称之为分支结构。
图片来源于网络
程序流程图:
程序流程图
经典运用:
QQ登录界面
3、循环结构
花满楼大师还说:你的人生其实并不是那么的多变,很多时候无非也仅仅是在做着一些重复的事情。程序如人生,当你有某段程序就想坚持不懈重复做很多次时,就有了循环结构这一东西帮你!
图片来源于网络
总结:
顺序结构:程序从上到下依次执行
分支结构:程序具备逻辑判断的能力,有选择地执行一段
循环结构:程序多次执行同一个操作
二、【掌握】分支结构之if篇
1.【掌握】if语句的四种形式
2.【掌握】if语句的注意事项
思考:
一个女生给你表白了,但是你对择偶有要求,你比较喜欢萝莉,如果小于18岁,那么你就接受,如果大于18岁你就拒绝。如果你是程序,你怎么做这个判断?
age <18
1、if语句的四种形式
1)一般形式:
if(条件){
//语句
…………
}
此种形式是当条件为真时,才会执行里面的语句块,否则不执行
2)二般形式:
if(条件){
语句1
}else{
语句2
}
此种形式是当条件为真时,则执行语句1,否则执行语句2.即:语句1或者语句2一定会有一个被执行
课堂练习:
让用户输入账号和密码,如果账号等于admin并且密码等于88888,则提示登录成功,否则提示登录失败
示意图
3)three般形式:if和else的嵌套
if(条件1){
…………
if(条件2){
语句
}else{
语句
}
……
}else{
……
}
将一开始思考的表白问题再进行改良,改成:女方如果是18岁,则接受,但是回答方式不一样:身高170以上则回答“女神,我也爱你很久了”,否则回答“我们在一起吧”
4)the last形式:
if(表达式1){
语句1
}else if(表达式2){
语句2
}else if(表达式3){
语句3
}else{
语句4
}
思考&实现:
请土豪输入他儿子的成绩:
题目
三、【掌握】三目运算符
三目运算符为【?和:】组成,因为需要三个操作数参与运算,所以称为三目运算符
由此运算符组成的表达式一般形式为:
表达式1 ? 表达式2:表达式3
表达式详解:如果表达式1为真,则执行表达式2,否则执行表达式3
翻译成口水话:
先问问表达式1成立吗?如果成立就执行表达式2,否则执行表达式3
例:
int a =10,b=20;
int c =a < b ? a+b : a-b;
//表达式1 ? 表达式2 : 表达式3
printf("c=%d",c);//打印30
解释:因为a的值是10,b的值是20,很明显a是小于b的,所以表达式1成立,则执行a+b,所以最后c的值为30,上面这句相当于
int c;
if(a < b){
c = a + b;
}else{
c = a - b;
}
四、【掌握】代码块
代码块:简单来说,用{}包起来的代码就叫代码块
变量作用域:在当前代码块中申明的变量的作用域仅从申明这个变量的位置开始到其所在的代码块的结束部分。
如果在代码块中定义的变量在代码块之前就已经被申明过了,那么在代码块内什么的同名变量会暂时遮住原来的变量。
代码块
五、【掌握】if语句的注意事项
if使用注意
1)分号:
a.在C语言之中,分号代表1条指令的结束. 一般情况下,我们应该在1条语句的后面跟上1个分号.
b.如果是一个代码块的话,就不需要为这个代码块加分号
代码块:凡是1对大括号就代表一个代码块
因为大括号本身就代表开始和结束,所以不需要再加额外的分号去结束了,就算要加也应该加在大括号的后面
2)if语句括号内的条件问题:
C语言中语法规定条件中什么表达式都可以写,无论是什么表达式都是先计算出表达式的结果,0 代表假 非0代表真(负数也为真)
但是我们在条件里一般都写条件表达式,因为只有条件表达式比较有意义
3)永真永假的问题:
if(1)这个条件永远成立
if(0)这个条件永远不成立
凡是可以写表达式的地方都可以写数据,因为表达式有结果
4)if语句作用域问题:
在if或else语句块里定义的变量,只能在当前代码块中访问
5)if语句的大括号可以省略:
但只限只有一句话执行时,并且不可以声明变量
6)if或者else语句块中可以写任意行代码
六、【理解】if语句的课堂练习
课堂练习:
思考&实现:
请用户输入一个年份,判断这个年份是不是闰年
(能被4整除的年份就是闰年)
思考&实现:
输入一个属于0-100的成绩,按
0-59(E),60-69(D),70-79(C),80-89(B),90-100(A)
分成几等。
思考&实现:
XXXX网站的访问实现
七、【理解】猜拳游戏的制作
1.【掌握】随机数的使用
2.【理解】猜拳游戏的实现
思考:怎样用C语言做一个人与电脑猜拳的游戏呢?
1)要让玩家输入要出的拳
2)要让电脑随机出拳
规则:剪刀胜布、石头胜剪刀、布胜石头
1、随机数:
1)引入头文件:stdlib.h
2)int num = arc4random_uniform(写1个整型的数);
就会返回0 —— 这个传入的整型的数-1 中的任一一个随机的整数. 然后赋值给num变量.
2、猜拳游戏实现的思路:
1)两个角色:一个是玩家自己,一个是电脑
2)玩家自己选择出拳,电脑随机出拳
3)判断输赢
八、【掌握】分支结构之switch篇
1、思考&实现:
设计一个选择学科报名的软件。
步骤:
1)提示用户选择学科
2)根据用户输入的序号打印出结果
定义学科如下:
题目
2、switch语句的基本格式
switch (表达式) {
case 常量表达式1: 语句1; break;
case 常量表达式2: 语句2; break;
...
case 常量表达式N: 语句N; break;
default: 语句; break;
}
其语义是:计算表达式的值。 并逐个与其后的常量表达式值相比较,当表达式的值与某个常量表达式的值相等时, 即执行其后的语句,然后不再进行判断。如表达式的值与所有case后的常量表达式 均不相同时,则执行default后的语句
3、switch case的穿透问题
case语句执行的过程中,一旦进入某个分支后就会一直执行到switch结束。
为了避免上述情况,C语言还供了一种break语句,专用于跳出switch语句,break 语句只有关键字break,没 有参数。在后面还将详细介绍。修改例题的程序,在每一case语句之后增加break 语句, 使每一次执行之后均可跳 出switch语句,从而避免输出不应有的结果
习题:
使用switch做一个简单的计算器
1、提示用户输入需要进行的操作(+ - * / %)
2、提示用户输入两个数
3、根据用户之前输入的操作,计算出结果
九、【掌握】switch的注意事项
表达式的类型(case语句后的值)必须是整型或可以转变为整型的值(short、char和int类型)。
值1、值2...值n只能为常数或常量,不能为变量。
功能代码部分可以写任意多句。
break关键字的意思是中断,指结束switch语句,break语句为可选。
default语句可以写在switch语句中的任意位置,功能类似于if语句中的else。
执行流程:在执行的过程中,如果遇到break语句,则跳出switch语句。如果没有遇到break语句,则一直执行到switch语句的结束。
case语句可以有任意多句,可以不用加括号“{}”。
7)case后面不可以直接定义变量
8)如果在case后面定义的变量必须加上大括号
十、【掌握】switch课堂练习
练习一:
要求用户输入一个月份,判断这个月份属于哪个季节
12月1月 2月:冬季
3月4月5月:春季
6月7月8月:夏季
9月10月11月:秋季
练习二:
要求用户输入年月两个数字,然后打印出该月的天数
1月31天, 2月28天或29天,3月31天
4月30天,5月31天,6月30天
7月31天,8月31天,9月30天
10月31天,11月30天,12月31天
十一【理解】if语句和switch语句的转换和选择
1、if分支和switch分支转换:
1)if分支转switch语句
思考&实现:
请土豪输入他儿子的成绩:
题目
2)switch转if语句
思考&实现:
要求用户输入一个月份,判断这个月份属于哪个季节
12月1月 2月:冬季
3月4月5月:春季
6月7月8月:夏季
9月10月11月:秋季
用if实现
2、if分支和switch分支的选择:
1)当条件是需要判断一个范围或进行大量列举时最好用if
2)如果分支数量不是很多,但是使用if语句代码量比较大的时候,可以选用switch
十二【理解】抽查问题
1、什么是分支结构 ?
2、请简要的描述if分支的几种形式
3、请简述switch分支结构
4、什么时候使用switch代替if
5、使用switch的好处是什么
十三【理解】附加题:交换两个变量的值
用两种方法实现交换两个变量的值
如:int a =
10; int b =20;
交换后
a = 20; b = 10;