C语言程序设计实例教程(慕课版)(第3版)课件常中华第45章算法与结构化程序设计选择结构程序设计.pptx

选择结构摘要4.1条件判断表达式4.1.1关系运算符和关系表达式4.1.2逻辑运算符和逻辑表达式4.2if选择语句4.2.1单分支if语句4.2.2多分支if语句4.2.3条件运算符4.3switch语句实例分析与实现满1000元就打9折满2000元就打8折消费3000元,应收?问题1:如何描述判断条件?问题2:用哪种语句实现选择结构?4.1条件判断表达式4.1.1关系运算符和关系表达式4.1.1关系运算符和关系表达式1.关系运算符①>大于②>=大于等于③<小于④<=小于等于⑤==相等⑥!=不相等

低高>,>=,<,<===,!=

算术运算符

关系运算符

赋值运算符4.1.1关系运算符和关系表达式【例】设定三个变量a、b、c

(1)a>b+c等价于a>(b+c)(2)c=a>b等价于

a=(a>b)4.1.1关系运算符和关系表达式2.关系表达式【例】设定a为变量,使用关系表达式描述下列条件。(1)a为正数。a>0(2)a和数值0相等。a==0(2)a为偶数。a%2==0关系表达式的值:成立(“真”)

不成立(“假”)【例】设定a的值为2,b的值为3,c的值为5,则:(1)表达式a>0的值:(2)表达式b%2==0的值:4.1.1关系运算符和关系表达式4.1条件判断表达式4.1.2逻辑运算符和逻辑表达式4.1.2逻辑运算符和逻辑表达式1.逻辑运算符①&&逻辑与②||逻辑或③!

逻辑非

低高!&&,||

赋值运算符【例】(1)a>=1&&a<5

等价于

(a>=1)&&(a<5)(2)

!a||b+c等价于(!a)||(b+c)4.1.2逻辑运算符和逻辑表达式a&&b:若a和b都为“真”,结果为“真”。a||b:若a和b之一为“真”,结果为“真”;

若a和b都为“假”,结果为“假”。!a:若a为“真”,结果为“假”。4.1.2逻辑运算符和逻辑表达式4.1.2逻辑运算符和逻辑表达式2.逻辑表达式【例】设定a、b为变量,使用逻辑表达式描述下列条件。(1)a的值限定在21-27之间。(2)c为闰年。闰年的判断条件是:非百年能被4整除的为闰年;或者能被400整除的也为闰年。4.1.2逻辑运算符和逻辑表达式逻辑表达式的值:“真”

“假”在判断一个数据的逻辑值时:

非0值表示“真”0表示

“假”【例】计算下列表达式的值。(1)a=4,表达式a>=1&&a<5(2)

!5(3)a=3,b=-4,c=5,表达式(a&&b)==(a||c)逻辑运算时并不是所有的表达式都参与运算。【例】设定a的值为1,b的值为2,c的值为1,d的值为1。计算下列表达式的值。(1)a+bc||c==d(3)a+b

语句执行过程【例】分析程序运行后的输出结果。#includeintmain(){

intx=10,y=20;if(x>y)printf("%d",x);if(x<=y)

printf("%d",y);return0;}4.2.1单分支if语句【例】输入两个整数,输出两个数中的最大数。4.2.1单分支if语句

程序流程图【例】输入两个整数,按照从小到大的顺序输出。4.2.1单分支if语句4.2if选择语句4.2.2多分支if语句语法结构:if(条件判断表达式)

语句1else

语句2执行过程1、双分支if_else语句【例】编写程序,输入一个整数,判断该数是奇数,还是偶数。

程序流程图1、双分支if_else语句【例】编写程序,判断某一年是否是闰年。

程序流程图1、双分支if_else语句【例】有一函数,编写程序,根据输入的x值,输出相应的y值。2、多分支if语句2、多分支if语句

程序流程图4.12

程序流程图4.132、多分支if语句

为了使逻辑关系清晰,一般采用方法二所使用的结构,将内嵌的if语句放在外层的else子句中,正如流程图4.13所示,这是一种锯齿形的缩进结构。【例】对学生的考试成绩进行等级的划分90以上:等级为优;80~90:等级为良;70~80:等级为中;60~70:等级为及;低于60:等级为不及。2、

多分支if语句

程序流程图2、

程序流程图4.2if选择语句4.2.3条件运算符表达式1?表达式2:表达式【例】x=2,计算下列表达式的值。(1)x%2==01:04.2.3条件运算符【例】使用条件表达式,实现输出两个数中最大数的功能。#includeintmain(){inta,b,max;scanf("%d%d",&a,&b);max=a>ba:b;printf("最大数是:%d",max);return0;}4.2.3条件运算符4.3switch语句语法结构:switch(表达式){case常量表达式1:语句1;[break];case常量表达式2:语句2;[break];。。。case常量表达式n:语句n;[break];default:语句n+1;}4.3switch语句【例】编译、运行下列程序,分析程序的运行结果。#includeintmain(){charch='a',a=0,b=0;switch(ch){case'a':a++;break;case'b':b++;

}printf("a=%d,b=%d",a,b);return0;}4.3switch语句【例】使用数字1-7来表示星期一至星期日。根据输入的数字1-7,输出对应的星期值。【例】使用数字1-7来表示星期一至星期日,当输入的数字为1,2,3,4,5时输出信息是工作日;当输入数字为6,7时输出信息是休息日。4.3switch语句switch(表达式){case常量表达式1:语句1;[break];case常量表达式2:语句2;[break];。。。case常量表达式n:语句n;[break];default:语句n+1;}4.3switch语句【小提示】1.switch后表达式的值、case后常量表达式的值,必须是整型或字符型。2.每个case后常量表达式的值必须各不相同。3.break语句的作用是跳出switch语句,一般情况下case语句后需要有break语句,否则程序会继续执行其他的case后的语句。【例】使用switch语句实现学生成绩的等级划分功能。90≤s≤100:等级为优;80≤s﹤90

:等级为良;70≤s﹤80

:等级为中;60≤s﹤70:等级为及;0≤s﹤60:等级为不及。4.3switch语句【小提示】在程序设计过程中,需要适时选择多分支if语句和switch语句。(1)switch语句只能判断“相等”的逻辑关系,即switch后表达式的值是否和case常量值相等;(2)switch后的表达式不能描述某范围的数据,表达式的值是一个确定的整型或字符型数据。4.3switch语句实例分析与实现实例分析与实现

编写程序计算个人所得税。要求输入收入金额,输出应缴的个人所得税。年度个人所得税税率表如图4.21所示。个人所得税征收办法如下:应纳税所得额=年收入-60000元(免征额)-专项扣除(三险一金等)-专项附加扣除-依法确定的其他扣除

例如,已婚人士小李在北京上班,年收入15万元,三险一金专项扣除为每月2000元,每月房贷4000元,有一个孩子在上幼儿园,同时他的父母已经60多岁。

小李可以享受住房贷款每月1500元扣除、子女教育每月1000元扣除、赡养老人每月1000元扣除(跟姐姐分摊扣除额),所以有如下计算

。专项扣除:2000×12=24000元。专项附加扣除:1500×12+1000×12+1000×12=42000元。应纳税所得额:150000-60000-24000-42000=24000元。个人所得税:由于24000<36000,由图4.21可算得个人所得税为24000×0.03=720元。分析:(1)输入年收入income、专项扣除items、专项附加扣除和依法确定的其他扣除addition。(2)计算应纳税所得额pay。(3)使用多分支选择结构,根据不同等级的个人所得税税率计算应缴税款,累加后的结果就是应缴纳的个人所得税。实例分析与实现Thechapterisover!第5单元循环结构摘要5.1while语句5.2do-while语句5.3for语句5.4嵌套的循环5.4.1嵌套的循环5.4.2break语句和continue语句实例分析与实现5.1while语句5.1while语句while循环语句属于当型循环,即先判断条件,再执行循环体语句。一般形式为:while(表达式)循环体语句5.1while语句【例5.1】使用while语句,输出50个“*”。#include"stdio.h"main(){inti=50;

while(i>0)

{printf("*");i--;}}运行程序,结果为:515.1while语句【例5.2】统计一个小组学生考试成绩某班级一个小组10名学生进行数学考试,统计该小组学生的总分和平均分。分析:根据题目要求,需要在主函数中实现10名学生成绩录入、计算并输出总分及平均分。因此将重复执行输入学生成绩、将其加入总分这两步操作。525.1while语句程序代码:#include"stdio.h"intmain(){inti=1,sum=0,score;floatave;printf("\n计算学生总成绩和平均成绩\n");printf("请输入10名学生的成绩:\n");while(i<=10)

53

{scanf("%d",&score);sum=sum+score;i++;}ave=sum/10.0;printf("总成绩为%d平均成绩为%.2f\n",sum,ave);return0;}

5.1while语句注意:while语句先判断表达式的真假,再决定是否执行循环体while(表达式)后面不要加“;”。为了避免陷入“死循环”,while语句的循环体中应包含使循环趋于结束的语句。如果循环体包含一个以上的语句,必须使用{}括起来,组成复合语句。如果不含花括号,则while语句循环体只包含while语句后的第一条语句。例如:inti=1,sum=0;while(i<=100){

sum=sum+i;

i++;}这段程序求出1+2+…+100的和,如果循环体内没有“i++;”语句,则i的值不变,循环条件永远为真,造成死循环。例如:inti=1;while(i<=100)

printf("%d",i);i++;这段程序中,while循环体本意要控制printf("%d",i);和i++;两条语句,可是由于这两条语句没有加{}括起来,while循环体只控制了printf("%d",i);这一条语句,造成了死循环。5.2do-while语句5.2do-while语句

do-while循环语句属于直到型循环。这种类型的循环首先执行一次循环体,然后对是否执行下一次循环体进行条件判断,其一般形式为:

do

循环体语句while(表达式);5.2do-while语句图5.4do-while语句流程图5.2do-while语句58【例5.3】某班级一个小组10名学生进行数学考试,统计该小组学生的总分和平均分。#include"stdio.h"main(){inti=1,sum=0,score;floatave=0;

printf("\n计算学生总成绩和平均成绩\n");printf("请输入10名学生的成绩:\n");do

{scanf("%d",&score);sum=sum+score;i++;}while(i<=10);

ave=sum/10.0f;printf("总成绩为%d平均成绩为%.2f\n",sum,ave);}运行程序,结果为:5.2do-while语句【例5.4】使用do-while语句,输出50个“*”。#includeintmain(){inti=1;do{printf("*");i++;}while(i<=50);return0;}运行程序,结果为:595.2do-while语句注意:①do是C语言的关键字,必须和while联合使用。②do-while循环由do开始,至while结束。在while(表达式)后的“;”不能丢,它表示do-while语句的结束。③如果循环体是一个以上语句,必须用“{}”括起来,组成复合语句。5.2do-while语句注意:④do-while语句中的循环体语句组至少执行一次。而while语句的循环体可能一次也不执行。⑤通常while语句和do-while语句可以互相改写,但要注意修改循环控制条件。避免出现“死循环”。5.3for语句5.3for语句for语句是一种方便灵活、功能强大的循环语句。for循环的一般形式为:for(表达式1;表达式2;表达式3)循环体语句5.3for语句图5.6for语句流程图5.3for语句

注意:(1)for循环相当于如下while循环:

表达式1;while(表达式2){循环体;

表达式3;}(2)for语句内必须有两个分号,程序编译时,将根据两个分号的位置来确定三个表达式。for语句中的表达式可以部分或者全部省略,但两个分号不可省略。例如:在计算机屏幕上输出10个“*”:方法一:#include"stdio.h"intmain(){inti;for(i=1;i<=10;i++)printf("*");return0;}方法二:#include"stdio.h"intmain(){inti;for(i=1;i<=10;)

{printf("*");i++;}return0;}方法三:#include"stdio.h"intmain(){inti=1;for(;i<=10;)

{printf("*");i++;}return0;}5.3for语句(3)三个表达式是都可以是逗号表达式。例如:inti,sum;for(i=1,sum=0;i<=10;i++)sum=sum+i;//sum的值是1+2+3+…+10=55(4)循环体可以是空语句。例如:inti=1,sum;for(i=1,sum=0;i<=10;sum=sum+i,i++);//sum的值同上5.3for语句(5)通常用表达式1进行循环变量赋初值,用表达式2控制循环条件,用表达式3控制循环变量递增或递减。所以规范的for语句形式为:for(循环变量赋初值;循环条件;循环变量增/减值){循环体语句}5.3for语句68【例5.5】某班级一个小组10名学生进行数学考试,统计该小组学生的总分和平均分,用for语句完成。#include"stdio.h"intmain(){inti,sum=0,score;floatave=0;printf("\n计算学生总成绩和平均成绩\n");printf("请输入10名学生的成绩:\n");

for(i=1;i<=10;i++){scanf("%d",&score);sum=sum+score;}

ave=sum/10.0;printf("总成绩为%d平均成绩为%.2f\n",sum,ave);return0;}5.3for语句69【例5.6】棋盘摆大米问题#include#includeintmain(){

doublesum=0;

//double类型数据取值范围更广

inti;

for(i=1;i<=64;i++)

sum=sum+pow(2,i-1);

printf("填满棋盘大约需要%.0f粒米",sum);//只显示sum的整数部分}

5.4嵌套的循环5.4.1嵌套的循环嵌套循环若一个循环体中包含另一个完整的循环结构,则称此为循环的嵌套或多重嵌套(多层嵌套)。使用循环嵌套时,三种循环语句既可以自身嵌套,也可以互相嵌套。嵌套循环【例5.7】在屏幕上输出如下图形:***************解题思路:根据题目要求,每行输出5个星号,共输出3行。可以使用嵌套循环,内层循环控制每行输出5个星号,外层循环控制行数为3。嵌套循环Y

i=1i<=3j=j+1输出回车出”\n”ac=1输出“*”NYN图5.13例5.7程序流程图开始j=1j<=5i=i+1结束嵌套循环#includemain(){inti,j;i=1;while(i<=3)

{j=1;while(j<=5)

{printf("*");j=j+1;}printf("\n");i=i+1;}}嵌套循环【例5.8】输出乘法九九口诀表。解题思路:乘法九九口诀表共有九行九列,所以定义两个控制变量i和j,其中i表示乘数,使其从1递增到9;j表示被乘数,从1递增到9,用外层循环控制分行,内层循环输出一行的内容。75#includemain(){inti,j;for(i=1;i<=9;i++)

{for(j=1;j<=9;j++){printf("%d*%d=%2d",i,j,i*j);}printf("\n");}}注意:如果将内循环语句改成for(j=1;j<=i;j++),则运行结果只输出下三角形部分。嵌套循环【例5.9】“水仙花数”是一种三位数,其各位数的立方和等于该数。例如,153=13+53+33。编写程序,输出所有水仙花数。解题思路:设所求三位数的百位数为i,十位数为j,个位数为k,则其值应满足:i*i*i+j*j*j+k*k*k==100*i+10*j+k。因此可使用嵌套循环for语句,列举出个位、十位、百位树的所有可能取值,满足条件的数就是水仙花数。#includemain(){inti,j,k;for(i=1;i<=9;i++)for(j=0;j<=9;j++)for(k=0;k<=9;k++)if(i*i*i+j*j*j+k*k*k==100*i+10*j+k)printf("%d\t",100*i+10*j+k);}运行程序,结果为:嵌套循环【例5.10】统计一个班级的学生的考试成绩。

某班级共4个小组,每个小组有10个学生参加数学考试,分别统计各小组的总成绩和平均成绩。分析:

根据题目要求,需要在主函数中实现4个小组共40个学生的成绩录入,并分组计算总成绩和平均成绩。嵌套循环嵌套循环程序代码如下:#include"stdio.h"intmain(){

THE END
1.决策树和模型体系结构良好的训练性能本身并不是一件坏事,但是树对于训练集已经变得高度专门化,以至于它可能在测试集上表现不佳。 这是因为树已经成功地学会了训练集中的关系,这些关系可能并不真实,例如,如果你年龄在 25 岁以下,体重 60 公斤就能保证获得奖牌。 模型体系结构会影响过度拟合 https://docs.microsoft.com/zh-cn/learn/modules/machine-learning-architectures-and-hyperparameters/2-decision-trees
2.什么叫结构化的算法为什么要提倡结构化的算法结构工程师将算法分解成模块化的部分。这样做可以增强代码的清晰度和可维护性,提高编程效率。提倡结构化算法,因为https://www.bkw.cn/zcjls/ask/4577918.html
3.什么叫结构化的算法?为什么要提倡结构化的算法?结构化算法的好处是结构化算法:由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移只存在于一个基本的范围之内。 为什么要提倡结构化的算法? 机构化算法便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。https://blog.csdn.net/bookanddream/article/details/116145916
4.C语言程序设计第五版谭浩强课后答案(第二章答案)C语言2. 什么叫结构化的算法?为什么要提倡结构化的算法?结构化算法:由一些顺序、选择、循环等基本结构按照顺序组成,流程的转移只存在于一个基本的范围之内。结构化算法便于编写,可读性高,修改和维护起来简单,可以减少程序出错的机会,提高了程序的可靠性,保证了程序的质量,因此提倡结构化的算法。https://www.jb51.net/article/208821.htm
5.indexedDB的精华和使用什么是indexDB一个事务型数据库系统什么是indexDB 一个事务型数据库系统 【注】 一个基于 JavaScript 的面向对象数据库 支持索引,可快速查找数据 可以存储结构化克隆算法支持的任何对象 不能被结构化克隆算法复制的数据 结构化克隆算法用于复制复杂 JavaScript 对象的算法,它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环https://juejin.cn/post/7301968484766941218
6.深入理解数值计算网格(全篇)2. 结构化网格生成算法中,有一种间接生成方法,即首先创建非结构化网格,再合并。比如二维网格中先产生三角形,然后三角形两两组成一个四面体。六面体则是先生成四面体,然后组装六面体。这种方法又叫Morph算法。 3. 由于结构化网格有比较好的边界特性,所以多块(MultiBlock)划分也是常用的方法。即首先将几何区域分成子区域https://www.360doc.cn/article/79007735_1022656856.html
7.不懂这25个名词,好意思说你懂大数据?但是它真的是一个术语。所以一个数据湖(data lake)即一个以大量原始格式保存了公司级别的数据知识库。这里我们介绍一下数据仓库(Data warehouse)。数据仓库是一个与这里提到的数据湖类似的概念,但不同的是,它保存的是经过清理和并且其它资源整合后的结构化数据。https://gxq.guiyang.gov.cn/zjgxq/zjgxqxyzs/zjgxqxyzsdsjqy/201710/t20171013_17120534.html
8.结构化克隆算法结构化克隆算法用于复制复杂 JavaScript 对象的算法。通过来自 Worker 的 postMessage() 或使用 IndexedDB 存储对象时在内部使用。它通过递归输入对象来构建克隆,同时保持先前访问过的引用的映射,以避免无限遍历循环。http://developer.mozilla.org/zh-CN/docs/Web/API/Web_Workers_API/Structured_clone_algorithm
9.Web性能优化之Worker线程(上)结构化克隆算法可用于在两个独立上下文间共享数据 在通过postMessage()传递对象时,浏览器会遍历该对象,并在目标上下文中生成它的一个副本。 结构化克隆算法支持的类型 ![](files.mdnice.com/user/24720/…=50%x) 需要注意的点 结构化克隆算法在对象比较复杂时会存在计算性消耗。因此,实践中要尽可能避免过大、过https://developer.aliyun.com/article/1195770
10.结构化克隆算法结构化克隆算法是一种由HTML5 规范定义的新算法,用来序列化复杂的 JavaScript 对象。相比JSON,它对包含着循环图的对象序列化有着更好的支持——对象可以引用指向同一图中的其他的对象的对象。此外,在某些情况下,结构化克隆算法可能会比 JSON 有着更高的效率。 https://developer.mozilla.org.cach3.com/zh-CN/docs/Web/Guide/API/DOM/The_structured_clone_algorithm
11.055基于深度学习的搜索算法:深度结构化语义模型时长08:01 050 | 经典图算法之HITS 时长07:29 051 | 社区检测算法之“模块最大化 ” 时长06:40 052 | 机器学习排序算法经典模型:RankSVM 时长07:54 053 | 机器学习排序算法经典模型:GBDT 时长06:56 054 | 机器学习排序算法经典模型:LambdaMART 时长07:25 055 | 基于深度学习的搜索算法:深度结构化语义https://time.geekbang.org/column/article/2297
12.结构化网格生成算法及软件工程技术研讨会单菊林,中国,民族:汉。从 2001 年师从著名力学专家顾元宪教授和关振群教授至今,一直致力于固体、流体及多物理场分析优化中网格剖分理论、算法及相应的软件开发研究。尤其擅长 CAE 前处理软件架构的构建和网格生成方法的工业化研究。http://huodong.dlut.edu.cn/info/1012/6695.htm
13.挑战Transformer的Mamba是什么来头?作者博士论文理清SSM进化路径要克服这一计算瓶颈,就必须以一种适合高效算法的方式对状态矩阵 A 施加结构。作者介绍了具有各种形式结构矩阵 A 的结构化状态空间序列模型(S4)(或简称结构化状态空间)家族,以及能以任何表示形式(如循环或卷积)高效计算 S4 模型的新算法。 论文第 3 章介绍了这些高效 S4 模型的不同类型。第一种结构使用状态矩阵https://www.51cto.com/article/777511.html
14.算法概述算法具有4个性质:输入、输出、有限性、确定性 算法是方法,程序是方法的具体实现 著名计算机科学家沃思提出了下面的公式:程序 = 数据结构 + 算法; 实际上,一个程序应当采用结构化程序设计方法进行程序设计,并且用某一种计算机语言来表示。因此,可以用下面的公式表示:程序 = 算法 + 数据结构 + 程序设计方法 + 语言https://www.jianshu.com/p/8c8d20a9bde8