C++程序设计-大模型思维与实践课件 第05章 分支程序设计-进阶内容_第1页
C++程序设计-大模型思维与实践课件 第05章 分支程序设计-进阶内容_第2页
C++程序设计-大模型思维与实践课件 第05章 分支程序设计-进阶内容_第3页
C++程序设计-大模型思维与实践课件 第05章 分支程序设计-进阶内容_第4页
C++程序设计-大模型思维与实践课件 第05章 分支程序设计-进阶内容_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章分支结构程序设计-进阶内容C++程序设计——大模型思维与实践内容导航流程图else与if的匹配规则大模型实践大模型探究流程图3流程图流程图是一种可视化地表示程序执行过程的方法。开始/结束框符号名称执行框输入输出框决策框流程线语义开始/结束处理输入/输出判断活动流注释框解释说明4流程图举例a和b交换的流程顺序结构分支结构内容导航流程图else与if的匹配规则大模型实践大模型探究else与if的匹配规则6匹配原则当没有使用花括号{}明确界定if语句的主体时,else子句将与其之前的最近的、未与任何else配对的if语句匹配。称为“最近匹配原则”。当使用花括号{}定义复合语句,else只与之前的最近的、未配对的、同层级的if匹配。else与if的匹配原则(1)没有使用花括号,遵循最近匹配原则if(condition1) statement1;elseif(condition2)//else的if遵循相同的匹配原则 statement2;else statement3;(2)使用花括号区分层级y=-1;if(x!=0){if(x>0)y=1;}elsey=0;7else与if的匹配原则(3)未使用花括号可能导致潜在错误。if(condition1)statement1;if(condition2)statement2;else//这个else与第二个if配对,而不是第一个ifstatement3;if(condition1){ statement1; if(condition2) statement2;}else//这个else与第一个if配对 statement3;修改:与第一个if匹配8else与if的匹配原则(3)未使用花括号可能导致潜在错误。if(condition1)statement1;if(condition2)statement2;else//这个else与第二个if配对,而不是第一个ifstatement3;错误修改if(condition1) statement1; { if(condition2) statement2; }else statement3;单分支语句无if语句匹配的else子句一个复合语句编译错误内容导航流程图else与if的匹配规则大模型实践大模型探究大模型实践10大模型实践例1现代公历以地球围绕太阳公转为基础,每年约365.25天,通过设立闰年和闰月来调整与太阳年的微小偏差。现代公历以12个月为一年,其中1月、3月、5月、7月、8月、10月和12月各有31天,4月、6月、9月和11月各有30天,而2月则有28天或29天(闰年为29天)。请编写程序,输入年和月,输出这个月的天数。向大模型提问【提问1】:用C++编程,输入年和月,输出这个月的天数,从计算思维的角度,请详细阐述解题思路。要求详细到能根据描述将每一句话转换成流程图的一个框,并需要分析为什么要进行该处理。可以采取逐步细化的方式自顶向下逐步阐述。11大模型实践例1【回复1】:解题思路1.程序初始化定义变量:定义两个整型变量year和month用于存储用户输入的年份和月份,以及一个整型变量days用于存储计算得到的月份天数。2.用户输入输入提示:向用户显示提示信息,告知需要输入年份和月份。读取输入:使用cin从标准输入读取用户输入的年份和月份,并分别赋值给year和month。3.判断是否为闰年判断条件:根据闰年的定义(能被4整除但不能被100整除,或者能被400整除)来判断year是否为闰年。结果存储:使用一个布尔型变量(如isLeap)来存储判断结果。12大模型实践例1【回复1】:4.根据月份和是否为闰年确定天数条件分支:根据month的值和isLeap的值来确定days的值。如果month在1到12之间(包括1和12),则根据月份和是否为闰年来设置days的值。否则,显示错误信息并结束程序。5.输出结果输出结果:使用cout将计算得到的月份天数days输出到标准输出。6.程序结束13大模型实践例1现代公历以地球围绕太阳公转为基础,每年约365.25天,通过设立闰年和闰月来调整与太阳年的微小偏差。现代公历以12个月为一年,其中1月、3月、5月、7月、8月、10月和12月各有31天,4月、6月、9月和11月各有30天,而2月则有28天或29天(闰年为29天)。请编写程序,输入年和月,输出这个月的天数。向大模型提问【提问2】:如何根据月份和闰年来设置days的值?具体思路如何?14大模型实践例1【回复2】:根据月份和闰年来设置days的值,我们需要考虑每个月份对应的天数,并且特别关注2月份,因为2月的天数会根据年份是否为闰年而变化。以下是具体的思路和步骤:初始化days为0:在开始设置days的值之前,首先将其初始化为0,以确保没有之前的值干扰。检查月份范围:首先检查输入的月份month是否在1到12的范围内。如果不在这个范围内,输出错误信息并结束程序。设置固定月份的天数:对于除了2月以外的其它月份,它们的天数是固定的。例如,1月、3月、5月、7月、8月、10月和12月都有31天;4月、6月、9月和11月都有30天。所以可以直接根据月份设置这些月份的天数。检查是否为闰年并设置2月的天数:如果年份year是闰年,则2月有29天。如果年份year不是闰年,则2月有28天。将设置好的天数赋值给days:将上述步骤中计算得到的天数赋值给变量days。15大模型实践例1根据以上思路,可以尝试编写代码:#include<iostream>usingnamespacestd;intmain(){ //定义两个整型变量year和month,以及一个整型变量days

intyear,month,days; //提示用户输入年份和月份

cout<<"请输入年份和月份:"<<endl; //读取用户输入的年份和月份,并分别赋值给year和month。

cin>>year>>month; boolisLeap; //使用isLeap存储闰年的判断结果

if((year%4==0&&year%100!=0)||year%400==0){isLeap=true;}

else{isLeap=false;}16大模型实践例1根据以上思路,可以尝试编写代码: //初始化days为0 days=0; //根据month的值,计算days的值,month不在1到12的范围内则提示错误 if(month<1||month>12){ cout<<"输入的月份不在1到12的范围内"<<endl;} else{ switch(month){ case1:case3:case5:case7:case8:case10:case12: days=31;break; case4:case6:case9:case11: days=30;break;17大模型实践例1根据以上思路,可以尝试编写代码: case4:case6:case9:case11: days=30;break; case2: if(isLeap){days=29;} else{days=28;} break; } //输出days的值 cout<<year<<"年"<<month<<"月有"<<days<<"天"<<endl; } return0;}18大模型实践例2光盘行动与节约美德:传承中华节俭精神

在中国传统文化中,节俭一直被视为一种美德,它不仅体现了对资源的尊重,也反映了个人品德的高尚。为了弘扬这一美德,并推动社会各界共同参与到节约粮食的行动中来,某自助餐馆特别推出了“光盘行动”的优惠政策与惩罚机制。

该餐馆为每位顾客提供88元的自助餐服务。然而,为了体现对老年人和儿童的关爱,餐馆特别规定:60岁(含)以上的老人和12岁(含)以下的儿童在就餐时可享受8折优惠。同时,考虑到3岁以下的婴儿饮食需求特殊,餐馆更是为他们提供免费的就餐服务。

然而,在享受美食的同时,我们也应该时刻铭记“粒粒皆辛苦”的道理。为了引导顾客合理消费,避免食物浪费,餐馆制定了一项严格的惩罚措施:顾客在离开时,如果剩余食物超过100克,则需要根据超出部分按每克0.5元的价格额外缴纳餐费。这一措施旨在让每一位顾客都深刻认识到食物的来之不易,从而养成珍惜粮食、勤俭节约的好习惯。

现在,请你根据提供的顾客年龄和剩余食物重量,计算出他们的总就餐费用。19大模型实践【提问1】:用C++编程,输入顾客年龄和剩余食物重量,计算出他们的总就餐费用。收费标准为:每位顾客餐费88元,60岁(含)以上的老人和12岁(含)以下的儿童8折优惠。3岁以下婴儿免费。顾客在离开时,如果剩余食物超过100克,则根据超出部分按每克0.5元的价格额外缴纳餐费。从计算思维的角度,请详细阐述解题思路。要求详细到能根据描述将每一句话转换成流程图的一个框,并需要分析为什么要进行该处理。可以采取逐步细化的方式自顶向下逐步阐述。向大模型提问20大模型实践例2【回复1】:解题思路1.初始化输入:接收用户输入的顾客年龄和剩余食物重量。2.判断顾客类型并计算基础餐费判断年龄:根据输入的年龄判断顾客类型。如果年龄<3:基础餐费为0元。否则如果年龄<=12:基础餐费为88元的8折。否则如果年龄>=60:基础餐费为88元的8折。否则:基础餐费为88元。3.判断是否需要额外缴纳餐费判断剩余食物重量:根据输入的剩余食物重量判断是否需要额外缴纳餐费。如果剩余食物重量<=100克:不需要额外缴纳餐费,总餐费为基础餐费。否则:需要额外缴纳餐费,计算方式为:额外餐费=(剩余食物重量-100)*0.5元。4.计算总餐费=基础餐费+额外餐费。5.输出结果6.结束21大模型实践例2根据以上思路,可以编写如下代码:#include<iostream>usingnamespacestd;intmain(){intage;doubleremainingFoodWeight;doublebaseMealPrice=88.0;doublediscountRate=0.8;doubleextraChargePerGram=0.5;doublebasePrice,extraCharge,totalPrice;//输入顾客年龄和剩余食物重量

cin>>age>>remainingFoodWeight;22大模型实践例2根据以上思路,可以编写如下代码://判断顾客类型并计算基础餐费

if(age<3){basePrice=0.0;//3岁以下婴儿免费

}elseif(age<=12){basePrice=baseMealPrice*discountRate;//12岁(含)以下儿童8折

}elseif(age>=60){basePrice=baseMealPrice*discountRate;//60岁(含)以上老人8折

}else{basePrice=baseMealPrice;//普通成人原价

}23大模型实践例2根据以上思路,可以编写如下代码://判断是否需要额外缴纳餐费

if(remainingFoodWeight<=100){extraCharge=0.0;//不需要额外缴纳餐费

}else{extraCharge=(remainingFoodWeight-100)*extraChargePerGram;//计算额外餐费

}//计算总餐费

totalPrice=basePrice+extraCharge;//输出结果

cout<<"顾客的总餐费为:"<<totalPrice<<"元"<<endl;return0;}内容导航流程图else与if的匹配规则大模型实践大模型探究大模型探究25大模型探究探究1C++中,代码inta=0;intb=10;执行表达式a>0&&++b>10后,b的值为什么保持为10?虽然有短路运算的规则,但是前置++的优先级最高,为什么不先执行++运算?26大模型探究探究1【回复】:

作者实践时,得到回复如下:

在C++中,逻辑与运算符&&具有短路行为,这意味着如果&&运算符的左侧表达式的结果为false,那么整个表达式的结果已经确定为false,因此不会再去计算右侧的表达式。这种行为是为了提高效率,避免不必要的计算。

在表达式a>0&&++b>10中,a>0是&&运算符的左侧表达式。由于变量a的初始值为0,所以a>0的结果为false。根据短路行为,一旦左侧表达式的结果为false,整个表达式的结果已经可以确定为false,因此不会再去计算++b>10这一右侧表达式。这就是为什么变量b的值保持为10的原因。

关于操作符优先级的问题,虽然前置++运算符的优先级确实很高,但是这里的关键在于逻辑与运算符&&的短路行为。优先级决定了操作的顺序,但是短路行为决定了是否执行这些操作。在这个例子中,由于左侧表达式的结果为false,导致右侧表达式(包括其中的++b操作)根本就没有被执行。

因此,即使前置++的优先级很高,但在逻辑与&&的短路行为下,如果左侧表达式结果为false,右侧表达式(包括所有操作)将不会被执行。27大模型探究探究2

右边代码输出的结果为什么是4?其中的break已经跳出了switch语句,为什么还是执行了case1后的m++

语句?intmain(){inta=15,b=21,m=0;switch(a%3){case0:m++;switch(b%2){default:m++;case0:m++;break;}case1:m++;}cout<<m;}28大模型探究探究2【回复】:

在这段代码中,switch语句的行为可能会让人感到困惑,特别是当涉及到嵌套的switch语句和没有break语句时导致的“case穿透”(casefall-through)现象。让我们一步步分析这段代码:首先,变量a和b被初始化为15和21,变量m被初始化为0。主switch语句基于a

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论