C语言 | 第七章 | 选择 循环结构-1

news/2024/10/4 5:28:38 标签: c语言, 开发语言

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. 代码执行内存分析图

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


http://www.niftyadmin.cn/n/5689502.html

相关文章

python如何查询函数

1、通用的帮助函数help() 使用help()函数来查看函数的帮助信息。 如&#xff1a; import requests help(requests) 会有类似如下输出&#xff1a; 2、查询函数信息 ★查看模块下的所有函数&#xff1a; dir(module_name) #module_name是要查询的函数名 如&#xff1a; i…

《陕西科技大学学报》

《陕西科技大学学报》创刊于1982年&#xff0c;初期为半年刊&#xff0c;限国内发行&#xff0c;1984年起改为季刊&#xff0c;1986年经国家科委批准刊物面向国内外公开发行&#xff0c;2002年起改为双月刊。创刊以来&#xff0c;本刊以全面反映校内外轻工业科技、学术研究最新…

【Docker从入门到进阶】03.进阶应用

3. 进阶应用 在本节中&#xff0c;我们将深入探讨Docker的高级应用&#xff0c;包括如何通过Dockerfile定义和构建镜像&#xff0c;数据管理的最佳实践&#xff0c;网络配置&#xff0c;以及如何使用Docker Compose来管理多容器应用。 基本指令详解 FROM: 可以使用特定版本的…

统计学习理论之VC维究竟是什么

一、说明 学习机器学习不可避免的会接触到VC维&#xff0c;它在机器学习领域是一个很基础但很重要的概念&#xff0c;它给机器学习提供了坚实的理论基础。但直到在我写这篇博客之前&#xff0c;我对VC的理解还只停留在它能刻画假设空间的复杂度这样浅显的层次。本文就来理一理V…

YOLOv8 结合设计硬件感知神经网络设计的高效 Repvgg的ConvNet 网络结构 ,改进EfficientRep结构

一、理论部分 摘要—我们提出了一种硬件高效的卷积神经网络架构,它具有类似 repvgg 的架构。Flops 或参数是评估网络效率的传统指标,这些网络对硬件(包括计算能力和内存带宽)不敏感。因此,如何设计神经网络以有效利用硬件的计算能力和内存带宽是一个关键问题。本文提出了一…

ElasticSearch备考 -- 查询模版

一、题目 ### 基础版 Create a search template for the above query, so that the template (i) is named "with_response_and_tag", (ii) has a parameter "with_min_response" to represent the lower bound of the response field, (iii) has a parame…

AG-Pose 部署笔记

目录 6D目标姿态估计新标杆:AG-Pose融合几何感知 HouseCat6D 室内数据集 依赖项安装: FPS(Farthest Point Sampling)--最远点采样算法 furthest_point_sample fps安装报错: GroundingDINO报错 win11 编译报错: linux安装报错解决: AttributeError: module gorill…

[3.4]【机器人运动学MATLAB实战分析】PUMA560机器人逆运动学MATLAB计算

PUMA560是六自由度关节型机器人,其6个关节都是转动副,属于6R型操作臂。各连杆坐标系如图1,连杆参数如表1所示。 图1 PUMA560机器人的各连杆坐标系 表1 PUMA560机器人的连杆参数 用代数法对其进行运动学反解。具体步骤如下: 1、求θ1 PMUMA56