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);
//结果是 atguigu
getchar();
}
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,所以为真,则执行,所以最后结果为c
printf("c");//c
else
printf("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,所以为真,则输出为b
printf("b");
else if(!b)
printf("c");//c
else
printf("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))/2a
x2=(-b-sqrt(b^2-4ac))/2a
提示2:sqrt(num),需要 #include <math.h>
分析:
1. 定义三个 double a,b,c x1,x2
2. 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; //退出switch
case 常量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; //退出switch
case '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,大于则为1
case 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. 代码执行内存分析图
方法:可以通过变量在内存中的变化,来分析程度执行的效果。
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » C语言 | 第七章 | 选择 循环结构-1
发表评论 取消回复