P 61 双分支介绍和使用 2022/9/10
一、双分支基本语法
基本语法:
if(条件表达式){
执行代码块1; }
else{
执行代码块2;
}
说明:当条件表达式成立(为真),执行代码块1,否则执行代码块2.
案例说明:
/*
请大家看个案例[IfDemo2.c]:
编写一个程序,可以输入人的年龄,如果该同志的年龄大于18岁,则输出 “你年龄大于18,要对 自己的行为负责!”。否则 ,输出”你的年龄不大这次放过你了.
*/
#include<stdio.h>void main(){// 分析:// 1. int age 接收输入的年龄// 2. 使用if-else双分支来判断,进行相应处理int age = 0;printf("请输入当前的年龄:");scanf("%d",&age);if(age > 18){printf("你的年龄大于18,要对自己行为负责");} else {printf("你的年龄不大这次放过你了");}printf("\nok~~");getchar();getchar();
}
二、双分支控制流程图
三、单分支和多分支练习题
// 1) 对下列代码,若有输出,指出输出结果。
#include<stdio.h>
void main(){int x = 4;int y = 1;if (x > 2) {if (y > 2) {printf("x+y=%d", x + y);
}printf("atguigu");
} else // 如果 if – else 中的代码块,只有一条语句,则可以省略 {}printf("x is =%d" , x);
//结果是 atguigugetchar();
}
P 62 单分支、双分支题目练习 2022/9/10
一、题目一
/*
编写程序,声明2个int型变量并赋值。判断两数之和,如果大于等于50,打印
“hello world!” [if 语句可以]
*/
#include<stdio.h>
void main(){int a,b,sum;printf("请输入两个数:");scanf("%d,%d",&a,&b);if(a + b >50){printf("Hello,world");}getchar();getchar();
}
二、题目二
题目二/*编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第2个数小于20.0,打印两数之和。*/分析:1. 定义两个double d1 和 d2 2. 使用逻辑与3. 使用if
#include<stdio.h>
void main(){double d1 = 146.7;double d2 = 20.3;if(d1 > 10.0 && d2 < 20.0){printf("d1+d2=%.2f",(d1 + d2));}getchar();
}
三、题目三
// 题目三
/*
定义两个变量int,判断二者的和,是否既能被3又能被5整除,打印提示信
息
*/
#include<stdio.h>
void main(){int a = 5;int b = 11;int sum = a + b;if(sum%3 == 0 && sum%5 == 0){printf("Hello,world");} else printf("NOT");getchar();
}
四、题目四
/*
题目四
判断一个年份是否是闰年,闰年的条件是符合下面二者之一:
(1)年份能被4整除,但不能被100整除;(2)能被400整除
*/
// 分析:
// 1. 定义一变量 year
// 2. 有逻辑与和逻辑或的综合使用
// 3. if-else
#include<stdio.h>
void main(){int year = 2020;if((year % 4 == 0 && year % 100 != 0) || year % 400 == 0){printf("%d是闰年",year);}else printf("%d不是闰年",year);getchar();
}
P 63 多分支课堂练习(1)2022/9/11
一、多分支
基本语法:
if(条件表达式1){执行代码块1;
}
else if (条件表达式2){执行代码块2;
}
……
else{ 执行代码块n;
}
二、多分支的流程图
说明:
-
当条件表达式1成立时,即执行代码块1
-
如果表达式1不成立,才去判断表达式2是否 成立,
-
如果表达式2成立,就执行代码块2
-
以此类推如果所有的表达式都不成立 ,则执行 else 的代码块,注意, 只能有一个执行入口(就是有一个为真后面的就不会去判断,真的执行完毕就已经结束了)。
三、案例演示
#include<stdio.h>
void main(){/*请大家看个案例[IfDemo3.c]:
岳小鹏参加C二级考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone7plus;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的C二级考试,并加以判断, 输出提示分析:1. 定义一个double 保存成绩2. 因为判断条件有多个,因此我们使用多分支处理*/double score = 0.0;printf("请输入成绩");scanf("%lf", &score);if(score == 100){printf("奖励一辆BMW");} else if(score > 80 && score <= 90) {printf("奖励一台iphone7plus");} else if(score >= 60 && score <= 80 ){printf("奖励一个iPad");} else printf("没有奖励");getchar(); // 用来接收回车getchar(); // 暂停住控制台
}
P 64 多分支课堂练习(2)2022/9/11
一、案例演示
题目一:
案例演示2
int b = 1;if(b = 0) //如果写成if(b==0)能编译通过吗?如果能,结果是?printf("a"); // 0 赋值给a,a为0,则为假,不执行。else if(b) // if(b) 等价于 if(b!=0),就是说b不是零,就是假的,不执行大括号里的;若为真,则执行。printf("b"); // b不是0,但是b是零,为假,则不执行。else if(!b) // !b是b是0,所以为真,则执行,所以最后结果为cprintf("c");//celseprintf("d");
/// 可以编译,并运行,结果是 c//思考:如果写成if(b==0)能编译通过吗?如果能,结果是?int b = 1;if(b == 0) // b等于0,但b为1,则假printf("a"); // 所以不执行else if(b) // if(b) 等价于if(b!=0),b等于1,所以为真,则输出为bprintf("b");else if(!b)printf("c");//celseprintf("d");
// 可以编译,运行结果是c
题目二:
#include<stdio.h>
#include<math.h>void main(){/*求ax2+bx+c=0方程的根。a,b,c分别为函数的参数,如果:b^2-4ac>0,则有两个解;b^2-4ac=0,则有一个解;b^2-4ac<0,则无解;
提示1:x1=(-b+sqrt(b^2-4ac))/2ax2=(-b-sqrt(b^2-4ac))/2a
提示2:sqrt(num),需要 #include <math.h>分析:1. 定义三个 double a,b,c x1,x22. b^2-4ac 的值在程序中使用很多次(>=3次),因此我们可以使用变量来保存,从而避免重复计算,提高效率。3. 使用到多分支*/double a=3,b=2,c=6,x1=0,x2=0;double t = b * b - 4 * a * c;if( t>0 ){x1=(-b + sqrt(t)) / (2 * a);x2=(-b - sqrt(t)) / (2 * a);printf("\nx1=%.2f",x1);printf("\nx2=%.2f",x2);} else if(t == 0){x1=(-b + sqrt(t)) / (2 * a);printf("\nx1=%.2f",x1);} else {printf("无解"); }getchar();
}
题目三:
#include<stdio.h>
void main(){int height;double money;double handsome;printf("请输入你的条件:");scanf_s("%d,%lf,%d", &height, &money, &handsome);if (height >= 180 && money >= 10000000 && handsome == 1){printf("我一定要嫁给他!!!");}else if (height >= 180 || money >= 10000000|| handsome == 1){printf("嫁吧,比上不足,比下有余");}else{printf("不嫁!!");}getchar();getchar();
}
P 65 嵌套分析讲解和应用 2022/9/12
一、基本介绍
在一个分支结构中又完整的嵌套了另一个完整的分支结构,里面的分支的结构称为内层分支外面的分支结构称为外层分支。嵌套分支不适合过多,最多不要超过3层。
二、基本语法
if(){if(){ //被包含的可以是单分支,双分支,多分支}else{ } }
三、应用案例
案例一:
#include<stdio.h>void main(){/*参加百米运动会,如果用时8秒以内进入决赛,否则提示淘汰。并且根据性别提示进入
男子组或女子组。【可以让学员先练习下】, 输入成绩和性别,进行判断。1分钟思考
思路
double second; char gender;分析:1. 变量double time 保存时间2. 变量 char gender 保存性别3. 使用嵌套分支
*/double time = 0.0;char gender = ' ';printf("请输入跑步成绩(s)");scanf("%lf",&time);// 根据time判断是否进入决赛if(time <= 8){// 进入决赛printf("请输入性别(m/f)");scanf("%c",&gender); // gender是字符,所以接收到上次的回车,会消失,需要写两行scanf("%c",&gender); // 这次才接受到性别;只有char类型的数据才会接收回车。if(gender == 'm'){ // male 男printf("请进入男子组");} else{printf("请进入女子组");} }else{printf("你被淘汰");// 你被淘汰}getchar();getchar();
}
案例二:
/*
出票系统:根据淡旺季的月份和年龄, 打印票价 [考虑学生先做]
4_10 旺季:
成人(18-60):60
儿童(<18):半价
老人(>60):1/3
淡季:
成人:40
其他:20
*/
void main() {
int month = 0;
int age = 0;
double price = 60.0;printf("month:");scanf("%d", &month);printf("age:");scanf("%d", &age);
if(month>=4 && month<=10){ //旺季
if(age>60){printf("¥%.2f", price / 3);
}else if(age>=18){printf("¥%.2f", price);
}else{printf("¥%.2f", price / 2);
}
}else{//淡季
if(age>=18&&age<60){printf("¥40");
}else{printf("¥20");
} }getchar();getchar();
}
P 66 switch流程和快速入门 2022/9/14
一、switch分支结构
基本语法:
switch(表达式){case 常量1: //当表达式 值等于常量1语句块1;break; //退出switchcase 常量2; // 含义一样语句块2;break;...case 常量n;语句块n;break;default:default语句块;break;
}
流程图:
二、案例分析
#include<stdio.h>void main(){/*案例:请编写一个程序,该程序可以接收一个字符,比 如: a,b,c,d,e,f,g a表示星期一,b表示星期二 … 根据用户的输入显示相依的信息.要求使用switch 语句完成*/char c1 = ' ';printf("请输入一个字符(a,b,c,d)");scanf("%c",&c1);// switch// 表达式 :任何有值的都可以看成是一个表达式switch(c1){case 'a':printf("今天星期一,猴子穿新衣");break; //退出switchcase 'b':printf("今天星期二,猴子当小二");break;case 'c':printf("今天星期三,猴子爬雪山");break;// 问题:break 如将此处break注释或者不写,输入c,会怎么输出?// 解释:如果输出c,则会输出 当前语句和下面的语句,因为这里没有break结束。case 'd':printf("今天星期四,猴子有急事");break;default:printf("没有匹配到任何值~");}printf("switch 结束~");getchar();getchar();
}
P 67 switch注意事项和细节 2022/9/14
一、switch细节讨论
- switch 语句中的 expression (表达式) 是一个常量表达式,必须是一个整型(char、short, int, long等) 或枚举类型
switch(expression){case 97: // 输入一个a,还是会输出“今天…………穿新衣”,因为字符a对应的ASCII是97。printf("今天星期一,猴子穿新衣");break; //退出switch
- case子句中的值必须是常量,而不能是变量
case 'b': // 要求这里是一个常量,不能是一个变量printf("今天星期二,猴子当小二");break;
- default子句是可选的,当没有匹配的case时,执行default
default: // default子句是可以没有,不是必须的;如没有,当你输入的值没有匹配到,就不会有任何输出。printf("没有匹配到任何值~");
- break语句用来在执行完一个case分支后使程序跳出switch语句块;
- 如果没有写break,会执行下一个case 语句块,直到遇到break 或者执行到switch结尾, 这个现象称为穿透.
case 'b':printf("今天星期二,猴子当小二");break;case 'c':printf("今天星期三,猴子爬雪山");// break;// 问题:break 如将此处break注释或者不写,输入c,会怎么输出?// 解释:如果输出c,则会输出 当前语句和下面的语句,因为这里没有break结束。// 这种现象叫做 穿透现象
P 68 switch课堂练习和梳理 2022/9/15
一、switch题目练习
题目一:
#include<stdio.h>void main(){// 题目 :使用 switch 把小写类型的 char型转为大写(键盘输入)。只转换 a, b, c, d, e. 其它的输出“other”。char c1 = ' ';printf("请输入(a,b,c,d,e):");scanf("%c",&c1);switch(c1){case 'a':printf("A");break;case 'b':printf("B");break;case 'c':printf("C");break;case 'd':printf("D");break;case 'e':printf("E");break;default:printf("other");}getchar();getchar();
}
题目二:
#include<stdio.h>
void main(){// 题目: 对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。(注:输入的成绩不能大于100)double d1 = 0.0;printf("请输入成绩");scanf("%lf",&d1);switch( (int)(d1/60) ){ // 即switch()括号中,可以是一个复杂的表达式// int 会直接取整,如果如果小于60,则为0,大于则为1case 0:printf("不合格");break;case 1:printf("合格");break;default:printf("你输入的成绩有误");}getchar();getchar();
}
题目三:
#include<stdio.h>void main(){// 题目: 根据用于指定月份,打印该月份所属的季节。3,4,5 春季 6,7,8 夏季 9,10,11 秋季 12, 1, 2 冬季int month = 0;printf("请输入月份");scanf("%d",&month);switch(month){case 3: // 使用 switch 穿透来简化case 4:case 5:printf("春季");break;case 6: // 使用 switch 穿透来简化case 7:case 8:printf("夏季");break;case 9: // 使用 switch 穿透来简化case 10:case 11:printf("秋季");break;case 12: // 使用 switch 穿透来简化case 1:case 2:printf("东季");break;}getchar();getchar();
}
题目四:
#include<stdio.h>void main(){//根据用户输入显示对应的星期时间(char[]),如果“星期一”,显示“干煸豆角”如果
//“星期二”,显示“醋溜土豆”如果“星期三”,显示“红烧狮子头”如果“星期四”,
//显示“油炸花生米”如果“星期五”,显示“蒜蓉扇贝”如果“星期六”,显示“东北
//乱炖”如果“星期日”,显示“大盘鸡”int week;printf("请输入星期几(数字1,2,3,4,5,6,7):");scanf("%d",&week);switch(week){case 1:printf("干煸豆角");break;case 2:printf("醋溜土豆");break;case 3:printf("红烧狮子头");break;case 4:printf("油炸花生米");break;case 5:printf("蒜蓉扇贝");break;case 6:printf("东北乱炖");break;case 7:printf("大盘鸡");break;default:printf("哪来的星期%d",week);}getchar();getchar();
}
二、switch 和 if 的比较
-
如果判断的具体数值不多(比如:就只有三四个数值、或者游戏方向判断,上下左右),
而且符合整型 、枚举类型。虽然两个语句都可以使用,建议使用swtich语句。
-
其他情况:对区间判断,对结果为 真假 的判断,使用if,if的使用范围更广。
P 69 for循环的实际需求 2022/9/16
一、for循环简介
基本介绍:基本听其名而知其意,就是让你的代码可以循环的执行
实际需求:
/*
请大家看个案例[forTest.c]:编写一个程序, 可以打印5句“你好,尚硅谷!”。请大家想想怎么做?
*/// 方法一 : 传统解决方法
void main() {
printf("你好,尚硅谷!");
printf("你好,尚硅谷!");
printf("你好,尚硅谷!");
printf("你好,尚硅谷!");
printf("你好,尚硅谷!");
}
// ???如果需要打印50000句呢?
// ▲ 如果不使用循环控制,代码的维护性很差 => for 循环
P 70 for循环执行流程分析 2022/9/16
一、基本语法
循环变量定义
for(①循环变量初始化;②循环条件;④循环变量迭代){
③循环操作(多条语句);
}
二、for循环执行流程分析
1. 使用for循环完成前面的题
#include<stdio.h>void main(){// 定义循环变量int i;for(i = 1; i <= 5; i++ ){
// i = 1 循环变量初始化;i <= 5 循环条件;i++ 循环变量迭代 printf("\n你好,尚硅谷 i=%d",i); }getchar();
2. 画出流程图
3. 代码执行内存分析图
方法:可以通过变量在内存中的变化,来分析程度执行的效果。