C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第4、5章 算法与结构化程序设计、选择结构程序设计_第1页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第4、5章 算法与结构化程序设计、选择结构程序设计_第2页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第4、5章 算法与结构化程序设计、选择结构程序设计_第3页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第4、5章 算法与结构化程序设计、选择结构程序设计_第4页
C语言程序设计实例教程(慕课版)(第3版)课件 常中华 第4、5章 算法与结构化程序设计、选择结构程序设计_第5页
已阅读5页,还剩84页未读 继续免费阅读

下载本文档

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

文档简介

第4单元

选择结构摘要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+b<c&&c==d(2)a+b>c||c==d(3)a+b<c||c==d4. 1.2逻辑运算符和逻辑表达式4.2if选择语句4.2.1单分支if语句4.2.1单分支if语句语法结构:if(条件判断表达式)

语句执行过程【例】分析程序运行后的输出结果。#include<stdio.h>intmain(){

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、

多分支if语句

程序流程图4.2if选择语句4.2.3条件运算符表达式1?表达式2:表达式【例】x=2,计算下列表达式的值。(1)x%2==0?1:04.2.3条件运算符【例】使用条件表达式,实现输出两个数中最大数的功能。#include<stdio.h>intmain(){ inta,b,max; scanf("%d%d",&a,&b); max=a>b?a: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语句【例】编译、运行下列程序,分析程序的运行结果。#include<stdio.h>intmain(){ 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个“*”。#include<stdio.h>intmain(){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<stdio.h>#include<math.h>intmain(){

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结束嵌套循环#include<stdio.h>main(){ 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#include<stdio.h>main(){ 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语句,列举出个位、十位、百位树的所有可能取值,满足条件的数就是水仙花数。#include<stdio.h>main(){ 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(){

int

i,j=1

温馨提示

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

评论

0/150

提交评论