1、第三章 控制结构,上一章内容回顾,基本数据类型 运算符 赋值表达式与变量的自增自减 基本输入输出 函数:自定义函数、库函数,本章内容,重点: 分支结构 ifelse (条件语句) switch (多分支语句) 循环结构 while dowhile for,分支结构:条件语句ifelse,条件语句的形式:if (条件) 语句1;else语句2;“条件”就是逻辑表达式。 如果“语句”不只一句,则用花括号把它们封装起来成为一个复合语句。 有时候可能只有if而不需要else,但有else必须有if。,【例3-1】 输入3个整数,求其最大值。,算法:输入的3个整数存于变量a、b、c中;max=a;如果m
2、axb,则max=b;如果maxc,则max=c;输出变量max。 讨论:按上面的算法,最后得到max一定是最大值吗?,【例3-1】 输入3个整数,求其最大值。,算法:输入的3个整数存于变量a、b、c中;如果a=b且a=c,则max=b;如果b=a且b=c,则max=b;如果c=a且c=b,则max=c;输出变量max。 讨论:a=b且a=c可以改为a=b且b=c 吗?上面两个算法,哪个算法更方便处理更多个数据?,课堂练习,输入5个整数,输出其最小值。讨论:如果有一个函数能求两个数的最大(小)值,用它能否求得更多数的最大(小)值呢?,【例3-2】输入3个数,判断能组成何种三角形。,分析 必须是
3、正数; 必须能组成三角形; 等边三角形、等腰三角形、直角三角形、一般三角形,if 语句的嵌套,if 语句的嵌套: 在if语句中又包含一个或多个if语句,称为if语句嵌套 if (条件1) if (条件2) 语句1; else 语句2; else if (条件3) 语句3; else 语句4;,if else配对原则 :它缺省 时, else总是与上面的最近的、未配对的if配对,if 语句的嵌套,if 语句的嵌套: 在if语句中又包含一个或多个if语句,称为if语句嵌套,if else配对原则 :它缺省 时, else总是与上面的最近的、未配对的if配对,if (条件1) if (条件2) 语句
4、1; else 语句2;,if (条件1) if (条件2) 语句1; else 语句2;,if 语句的嵌套,if 语句的嵌套: 在if语句中又包含一个或多个if语句,称为if语句嵌套,if else配对原则 :它缺省 时, else总是与上面的最近的、未配对的if配对,if (条件1) if (条件2) 语句1; else 语句2;,if (条件1) if (条件2) 语句1; else 语句2;,【例3-3】谁做了好事?,分析满足什么条件的人才是做好事的人? 穷举法:假设是A假设是B假设是C假设是D,上机作业,上机理解例题3-4; 习题3.3和3.15。,小结, if语句 if可以没有el
5、se,但else必须有if else总是与上面的最近的、未配对的if配对,内容回顾,条件语句if (条件) 语句1;else语句2; 如果条件为真,则执行语句1,否则执行语句2。 如果“语句”不只一句,怎么办? 条件语句的嵌套 if必须有else吗? else必须有if吗?当有多个if时,else如何配对?,分支结构:多分支语句switch,一个if语句处理的是两个分支; 要处理多分支问题,可以采用if语句的嵌套来实现。 当分支越多时,嵌套的if语句的层数越多 程序会越冗长,可读性越低。,swith 的一般形式为:,switch (开关表达式) case 常数1: 语句1;case 常数2:
6、语句2;.case 常数N: 语句N;default: 语句组 N+1; ,分支结构:多分支语句switch,switch后面的“开关表达式”,不能是实数; case 后面的常数,也不能是实数。,【例3-4】简单菜单。,分析 第1步:屏幕显示菜单列表,提示选择:0. 退出程序A. 华氏转摄氏B. 摄氏转华氏请选择:第2步:根据选择的字符,做相应的事情。,【例3-4】简单菜单。,分析 第2步:根据选择的字符,做相应的事情。 细化:如果输入的字符是: 0,则return; A或者a,则输入华氏温度x,调用H2C(x)得到摄氏温度; B或者b,则输入摄氏温度x,调用C2H(x)得到华氏温度;其它值,
7、则输出“选择错误!”。 (1)用if else 实现 (2)用switch实现,课堂练习,根据学生的百分制成绩,输出学生成绩的等级。,算法: 输入成绩 score (float型) 若score100,则退出 若score90 ,则输出A 否则,若score80 输出B 否则,若score70 输出C 否则,若score60 输出D 否则,输出E,90, 100: 等级 A 80, 90): 等级 B 70, 80): 等级 C 60, 70): 等级 D 0, 60): 等级 E,课堂练习,根据学生的百分制成绩,输出学生成绩的等级。,算法: 输入成绩 score (float型) 若scor
8、e100,则退出 若score90 ,则输出A 否则,若score80 输出B 否则,若score70 输出C 否则,若score60 输出D 否则,输出E,90, 100: 等级 A 80, 90): 等级 B 70, 80): 等级 C 60, 70): 等级 D 0, 60): 等级 E,讨论,求整数1到5的连加,怎么编程?,#include”stdio.h” void main() int sum=0;sum=sum+1;sum=sum+2;sum=sum+3;sum=sum+4;sum=sum+5;printf(“sum=%d“,sum); ,求整数1到100的连加,怎么编程?,#i
9、nclude”stdio.h” void main() int sum=0;sum=sum+1;sum=sum+2;sum=sum+3;sum=sum+100;printf(“sum=%d“,sum); ,分析:让我们找出问题的规律 sum=sum+i (i=1,2,3,100) sum=sum+i被重复执行 变量i有规律的变化 解决这类问题可以采用,循环结构,循环:while 语句,while 语句的一般形式:while (条件) 语句;当“条件”成立,反复执行“语句”。 先判断“循环条件”,再执行“循环体”。,while语句,用while语句求:,#include”stdio.h” voi
10、d main( ) int i=1, sum=0;while ( i=100 )sum=sum+i;i+;printf(“%d“,sum); ,循环体,讨论,循环体部分的花括号 去掉,可以吗? 如果i置为0,可以吗? 如果i置为0,i+放到sum=sum+i的前面,可以吗? 求和:1+2+3+n (其中,n由用户从键盘输入)。 求1到n的偶数之和。,循环:while语句,i = 1; sum = 0; while ( i = 100 ) sum = sum + i;+ i; ,i = 1; sum = 0; while ( i = 100 )sum += i+;,i = 1; sum = 0;
11、 while ( i = 100 ) if ( i%2 ) sum += i;+i; ,小结, 条件语句最多提供两条路选择,二选一;多分支语句,提供多条路选择,多选一。,小结, while循环 循环体包含一个或多个语句,当包含多个语句时,应以复合语句形式出现 循环体中一定要有能够使循环趋向于结束的语句,避免出现“死循环”,上机作业,默写例题3-5的程序; 预习外两种循环:do whilefor 习题3.1和3.4。,内容回顾,条件语句:if else 多分支语句:switch while循环,课堂练习,求1到100的奇数之和。 学会使用continue和break,break和continue
12、,break: 在循环语句中,跳出并终止循环体 break只能终止并跳出最近一层的结构 continue: 结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断,【例3-6】合成键盘输入的数。,分析从键盘输入数字字符,如1、2、3,把这些字符变成一个整数,如123(一百二十三)。 如何接收字符? 1 1 ?如何转换? 如何合成?,循环,while dowhile for,循环:while 语句,while 语句的一般形式:while (条件) 语句;当“条件”成立,反复执行“语句”。 先判断“循环条件”,再执行“循环体”。,循环:for 语句,for 语句的一般形式: fo
13、r(表达式1; 表达式2; 表达式3)语句;表达式1:准备。 表达式2:条件。 表达式3:善后处理。 先判断“条件”,后执行“循环体” 括号中的两个分号是必需的!,for语句转换成while语句,for (准备;条件;善后处理)语句; 相当于:准备; while(条件) 语句;善后处理; ,求1100的和 sum = 0; for( i= 1; i=100; i+)sum += i;,求1100的和 sum = 0; i = 1; while( i=100 ) sum += i;i+; ,用for实现。,【例3-8】求1到100之间奇数之和。,#include”stdio.h” void ma
14、in( ) int i=1, sum;sum=0;for(i=1; i=100; i+) if(i%2!=0) sum+=i ; printf(“结果=%dn“,sum); ,讨论,变量sum赋初值可以放到for里吗?如何放?(用逗号隔开,构成逗号表达式) for( i=1; i=100; i+); ? 循环体 if(i%2!=0) sum+=i ; 的花括号 可以去掉吗? 程序的循环体可以用continue吗?如何修改?,讨论,for 语句的一般形式: for(表达式1; 表达式2; 表达式3)语句;for语句中表达式1,表达式2,表达式3都可省略,但分号不可省略!如何理解for( ; ;
15、)?for( ; ; ) putchar(A);for( ; ; ) ; putchar(A);for( ; 0 ; ) ; putchar(A); for( ; ; ) 相当于 while(1),判断正整数是否为素数。输出1000以内的素数。,【例3-9】,小结,循环结构的三种表达方式: while dowhile for breakcontinue,上机作业,习题3.2和3.5。,循环:dowhile 语句,dowhile 语句的一般形式: do语句; while (条件);先执行“循环体”,再判断“循环条件”。 “语句”很可能是“复合语句”。 与while很像,但dowhile至少执行一
16、次“语句”,而while不一定。,例:求1到100之和。,#include”stdio.h” void main( ) int i=1, sum=0;dosum=sum+i;i+; while( i=100 );printf(“%d“,sum); ,循环体,用dowhile 实现。,dowhile 语句,while语句 和 dowhile 语句比较:,void main( ) int i, sum=0;scanf(“%d“, ,void main( ) int i, sum=0;scanf(“%d“, ,1 ,5050,1 ,5050,101 ,0,101 ,101,while语句先判断条件,
17、后执行语句 dowhile语句先执行循环体,后判断条件 while语句循环体执行次数0 dowhile语句循环体执行次数1,例:输入错误,则重新输入。,doprintf(“请输入一个不小于2的整数:”);scanf(“%d”,本章内容回顾,控制结构有哪些? 分支 if(条件)else switch(开关表达式) 循环 while (条件) dowhile (条件) for(准备;条件;善后) 另外涉及的保留字 case break continue goto,【例3-3】谁做了好事?,分析满足什么条件的人才是做好事的人? 穷举法:假设是A假设是B假设是C假设是D (1)用多个if else 实现,不用循环结构 (2)用循环结构,综合应用,习题3.13.5 习题3.15 例题3-12,上机作业,习题3.63.7,3.9,3.11,3.13,3.23。,