1 / 51

第三章 控制结构

第三章 控制结构. 上一章内容回顾. 基本数据类型 运算符 赋值表达式与变量的自增自减 基本输入输出 函数:自定义函数、库函数. 本章内容. 重点: 分支结构 if…else… (条件语句) switch (多分支语句) 循环结构 while do…while for. 真. 假. 条件. 语句 1. 语句 2. 分支结构:条件语句 if…else…. 条件语句的形式: if ( 条件 ) 语句 1; else 语句 2; “ 条件 ”就是逻辑表达式。

radha
Download Presentation

第三章 控制结构

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 第三章 控制结构

  2. 上一章内容回顾 • 基本数据类型 • 运算符 • 赋值表达式与变量的自增自减 • 基本输入输出 • 函数:自定义函数、库函数

  3. 本章内容 重点: • 分支结构 • if…else… (条件语句) • switch (多分支语句) • 循环结构 • while • do…while • for

  4. 假 条件 语句1 语句2 分支结构:条件语句if…else… 条件语句的形式: if (条件) 语句1; else 语句2; • “条件”就是逻辑表达式。 • 如果“语句”不只一句,则用花括号把它们封装起来成为一个复合语句。 • 有时候可能只有if而不需要else,但有else必须有if。

  5. 【例3-1】 输入3个整数,求其最大值。 算法: ①输入的3个整数存于变量a、b、c中; ②max=a; ③如果max<b,则max=b; ④如果max<c,则max=c; ⑤输出变量max。 讨论: 按上面的算法,最后得到max一定是最大值吗?

  6. 【例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 吗? 上面两个算法,哪个算法更方便处理更多个数据?

  7. 课堂练习 • 输入5个整数,输出其最小值。 讨论: 如果有一个函数能求两个数的最大(小)值,用它能否求得更多数的最大(小)值呢?

  8. 【例3-2】输入3个数,判断能组成何种三角形。【例3-2】输入3个数,判断能组成何种三角形。 [分析] • 必须是正数; • 必须能组成三角形; • 等边三角形、等腰三角形、直角三角形、一般三角形

  9. if 语句的嵌套 if ..else配对原则 :它缺省{ }时, else总是与上面的最近的、未配对的if配对 • if 语句的嵌套: • 在if语句中又包含一个或多个if语句,称为if语句嵌套if (条件1)if (条件2) 语句1; else 语句2;else if (条件3) 语句3; else 语句4;

  10. if 语句的嵌套 if ..else配对原则 :它缺省{ }时, else总是与上面的最近的、未配对的if配对 • if 语句的嵌套: • 在if语句中又包含一个或多个if语句,称为if语句嵌套 if (条件1) if (条件2) 语句1;else语句2; if (条件1)if (条件2) 语句1; else语句2;

  11. if 语句的嵌套 if ..else配对原则 :它缺省{ }时, else总是与上面的最近的、未配对的if配对 • if 语句的嵌套: • 在if语句中又包含一个或多个if语句,称为if语句嵌套 if (条件1){ if (条件2) 语句1;} else语句2; if (条件1) if (条件2) 语句1;else语句2;

  12. 【例3-3】谁做了好事? [分析] 满足什么条件的人才是做好事的人? 穷举法: 假设是A 假设是B 假设是C 假设是D

  13. 上机作业 • 上机理解例题3-4; • 习题3.3和3.15。

  14. 小结 ① if语句 ② if可以没有else,但else必须有if ③ else总是与上面的最近的、未配对的if配对

  15. 内容回顾 • 条件语句 if (条件) 语句1; else 语句2; 如果条件为真,则执行语句1,否则执行语句2。 如果“语句”不只一句,怎么办? • 条件语句的嵌套 • if必须有else吗? else必须有if吗?当有多个if时,else如何配对?

  16. 分支结构:多分支语句switch • 一个if语句处理的是两个分支;要处理多分支问题,可以采用if语句的嵌套来实现。 • 当分支越多时,嵌套的if语句的层数越多程序会越冗长,可读性越低。

  17. switch 表达式 case E1 E2 En default 语句组1 语句组2 语句组n 语句组 ... 分支结构:多分支语句switch switch后面的“开关表达式”,不能是实数; case 后面的常数,也不能是实数。 switch (开关表达式) { case 常数1: 语句1; case 常数2: 语句2; ……. case 常数N: 语句N; [default: 语句组 N+1;] } • swith 的一般形式为:

  18. 【例3-4】简单菜单。 [分析] 第1步:屏幕显示菜单列表,提示选择: 0. 退出程序 A. 华氏转摄氏 B. 摄氏转华氏 请选择: 第2步:根据选择的字符,做相应的事情。

  19. 【例3-4】简单菜单。 [分析] 第2步:根据选择的字符,做相应的事情。 细化: 如果输入的字符是: ① ‘0’,则return; ② ‘A’或者‘a’,则输入华氏温度x,调用H2C(x)得到摄氏温度; ③ ‘B’或者‘b’,则输入摄氏温度x,调用C2H(x)得到华氏温度; ④其它值,则输出“选择错误!”。 (1)用if ……else 实现 (2)用switch实现

  20. 课堂练习 • 算法: • 输入成绩 score (float型) • 若score<0或score>100,则退出 • 若score≥90 ,则输出'A' • 否则,若score≥80 输出'B' • 否则,若score≥70 输出‘C' • 否则,若score≥60 输出‘D' • 否则,输出‘E' • [90, 100]: 等级 A • [80, 90): 等级 B • [70, 80): 等级 C • [60, 70): 等级 D • [0, 60): 等级 E • 根据学生的百分制成绩,输出学生成绩的等级。

  21. 课堂练习 • 算法: • 输入成绩 score (float型) • 若score<0或score>100,则退出 • 若score≥90 ,则输出'A' • 否则,若score≥80 输出'B' • 否则,若score≥70 输出‘C' • 否则,若score≥60 输出‘D' • 否则,输出‘E' • [90, 100]: 等级 A • [80, 90): 等级 B • [70, 80): 等级 C • [60, 70): 等级 D • [0, 60): 等级 E • 根据学生的百分制成绩,输出学生成绩的等级。

  22. 求整数1到5的连加,怎么编程? 讨论  • 求整数1到100的连加,怎么编程? 分析:让我们找出问题的规律 sum=sum+i (i=1,2,3,…,100) • sum=sum+i被重复执行 • 变量i有规律的变化 解决这类问题可以采用 #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); } #include”stdio.h” void main() { int sum=0; sum=sum+1; sum=sum+2; sum=sum+3; ........ sum=sum+100; printf("sum=%d",sum); } 循环结构

  23. 假(=0) 条件? 真 语句 下一语句 循环:while 语句 • while 语句的一般形式: while (条件) { 语句; } • 当“条件”成立,反复执行“语句”。 • 先判断“循环条件”,再执行“循环体”。

  24. 开始 i=1, sum=0 N i<=100 循环条件 Y sum = sum+i i=i+1 输出sum 结束 while语句 #include”stdio.h” void main( ) { int i=1, sum=0; while ( i<=100 ) { sum=sum+i; i++; } printf("%d",sum); } • 用while语句求: 循环体

  25. 讨论 • 循环体部分的花括号{ }去掉,可以吗? • 如果i置为0,可以吗? • 如果i置为0,i++放到sum=sum+i的前面,可以吗? • 求和:1+2+3+…+n (其中,n由用户从键盘输入)。 • 求1到n的偶数之和。

  26. 循环: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; while ( i <= 100 ) { if ( i%2 ) sum += i; ++i; }

  27. 小结 ①条件语句最多提供两条路选择,二选一; 多分支语句,提供多条路选择,多选一。

  28. 小结 ② while循环 • 循环体包含一个或多个语句,当包含多个语句时,应以复合语句形式出现 • 循环体中一定要有能够使循环趋向于结束的语句,避免出现“死循环”

  29. 上机作业 • 默写例题3-5的程序; • 预习外两种循环: do … while for • 习题3.1和3.4。

  30. 内容回顾 • 条件语句:if … else… • 多分支语句:switch • while循环

  31. 课堂练习 • 求1到100的奇数之和。 • 学会使用continue和break

  32. break和continue • break: • 在循环语句中,跳出并终止循环体 • break只能终止并跳出最近一层的结构 • continue: • 结束本次循环,跳过循环体中尚未执行的语句,进行下一次是否执行循环体的判断

  33. 【例3-6】合成键盘输入的数。 [分析] 从键盘输入数字字符,如’1’、’2’、’3’,把这些字符变成一个整数,如123(一百二十三)。 • 如何接收字符? • ‘1’ —> 1 ?如何转换? • 如何合成?

  34. 循环 • while • do…while • for

  35. 循环:while 语句 • while 语句的一般形式: while (条件) { 语句; } • 当“条件”成立,反复执行“语句”。 • 先判断“循环条件”,再执行“循环体”。

  36. 表达式1 假(=0) 表达式2? 真 语句 表达式3 循环:for 语句 • for 语句的一般形式: for(表达式1;表达式2;表达式3) 语句; • 表达式1:准备。 • 表达式2:条件。 • 表达式3:善后处理。 • 先判断“条件”,后执行“循环体” • 括号中的两个分号是必需的!!!

  37. for语句转换成while语句 求1……100的和 sum = 0; for( i= 1; i<=100; i++) sum += i; for (准备;条件;善后处理) 语句; 相当于: 准备; while(条件) { 语句; 善后处理; } 求1……100的和 sum = 0; i = 1; while( i<=100 ) { sum += i; i++; }

  38. 【例3-8】求1到100之间奇数之和。 #include”stdio.h” void main( ) { int i=1, sum; sum=0; for(i=1; i<=100; i++) { if(i%2!=0) sum+=i ; } printf(“结果=%d\n",sum); } 用for实现。

  39. 讨论 • 变量sum赋初值可以放到for里吗?如何放?(用逗号隔开,构成逗号表达式) • for( i=1; i<=100; i++); ? • 循环体{ if(i%2!=0) sum+=i ; }的花括号{ }可以去掉吗? • 程序的循环体可以用continue吗?如何修改?

  40. 讨论 • for 语句的一般形式: for(表达式1;表达式2;表达式3) 语句; for语句中表达式1,表达式2,表达式3都可省略,但分号不可省略! ①如何理解for( ; ; )?for( ; ; ) putchar(‘A’); ②for( ; ; ) ; putchar(‘A’); ③for( ; 0 ; ) ; putchar(‘A’); ④ for( ; ; ) 相当于 while(1)

  41. 【例3-9】 判断正整数是否为素数。 输出1000以内的素数。

  42. 小结 循环结构的三种表达方式: • while • do…while • for break continue

  43. 上机作业 • 习题3.2和3.5。

  44. 语句 真 条件? 假(=0) 循环:do…while 语句 • do…while 语句的一般形式: do 语句; while (条件); • 先执行“循环体”,再判断“循环条件”。 • “语句”很可能是“复合语句”。 • 与while很像,但do…while至少执行一次“语句”,而while不一定。

  45. 循环条件 例:求1到100之和。 #include”stdio.h” void main( ) { int i=1, sum=0; do { sum=sum+i; i++; } while( i<=100 ); printf("%d",sum); } 用do…while 实现。 循环体

  46. do…while 语句 1  101  1  101  5050 0 5050 101 void main( ) { int i, sum=0; scanf("%d", &i); while ( i<=100 ) { sum=sum+i; i++; } printf("%d",sum); } void main( ) { int i, sum=0; scanf("%d", &i); do { sum=sum+i; i++; } while ( i<=100 ); printf("%d",sum); } • while语句 和 do…while 语句比较: • while语句——先判断条件,后执行语句do~while语句——先执行循环体,后判断条件 • while语句——循环体执行次数≥0do~while语句——循环体执行次数≥1

  47. 例:输入错误,则重新输入。 …… do { printf(“请输入一个不小于2的整数:”); scanf(“%d”,&n); } while( n<2 ); ……

  48. 本章内容回顾 • 控制结构有哪些? • 分支 • if(条件)…else… • switch(开关表达式) • 循环 • while (条件) • do…while (条件) • for(准备;条件;善后) • 另外涉及的保留字 • case break continue goto

  49. 【例3-3】谁做了好事? [分析] 满足什么条件的人才是做好事的人? 穷举法: 假设是A 假设是B 假设是C 假设是D (1)用多个if ……else 实现,不用循环结构 (2)用循环结构

  50. 综合应用 • 习题3.1~3.5 • 习题3.15 • 例题3-12

More Related