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();
}

二、双分支控制流程图

image-20220910170212094

三、单分支和多分支练习题

// 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. 如果表达式1不成立,才去判断表达式2是否 成立,

  3. 如果表达式2成立,就执行代码块2

  4. 以此类推如果所有的表达式都不成立 ,则执行 else 的代码块,注意, 只能有一个执行入口(就是有一个为真后面的就不会去判断,真的执行完毕就已经结束了)。

    image-20220911105607764

三、案例演示

#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; 
}

流程图:

image-20220914221808676

二、案例分析

#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细节讨论

  1. switch 语句中的 expression (表达式) 是一个常量表达式,必须是一个整型(char、short, int, long等) 或枚举类型
	switch(expression){
	case 97:   // 输入一个a,还是会输出“今天…………穿新衣”,因为字符a对应的ASCII是97。
		printf("今天星期一,猴子穿新衣");
		break; //退出switch
  1. case子句中的值必须是常量,而不能是变量
		case 'b':    // 要求这里是一个常量,不能是一个变量
		printf("今天星期二,猴子当小二");
		break;
  1. default子句是可选的,当没有匹配的case时,执行default
		default:   // default子句是可以没有,不是必须的;如没有,当你输入的值没有匹配到,就不会有任何输出。
		printf("没有匹配到任何值~");  
  1. break语句用来在执行完一个case分支后使程序跳出switch语句块;
  2. 如果没有写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 的比较

  1. 如果判断的具体数值不多(比如:就只有三四个数值、或者游戏方向判断,上下左右),

    而且符合整型 、枚举类型。虽然两个语句都可以使用,建议使用swtich语句。

  2. 其他情况:对区间判断,对结果为 真假 的判断,使用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. 画出流程图

image-20220916224724392

3. 代码执行内存分析图

方法:可以通过变量在内存中的变化,来分析程度执行的效果。

点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部