lh-04 多分支结构和循环结构程序设计_第1页
lh-04 多分支结构和循环结构程序设计_第2页
lh-04 多分支结构和循环结构程序设计_第3页
lh-04 多分支结构和循环结构程序设计_第4页
lh-04 多分支结构和循环结构程序设计_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

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

文档简介

1、主要内容多分支选择结构switch语句循环结构while语句多分支的选择结构多分支的选择结构根据同一个表达式的各种取值分情况处理表达式e?语句序列1值1语句序列2值2语句序列n+1其他值语句序列n值n.switch语句switch语句用于表示多分支的选择结构,其基本形式为:switch (表达式e) case 常量表达式1: 语句序列1;break; case 常量表达式2: 语句序列2;break; . case 常量表达式: 语句序列;break; default: 语句序列+1;switch语句的含义是:若表达式e的值等于某个常量表达式i的值,则执行相应的语句序列i;否则,执行defau

2、lt的语句序列。什么是常量表达式?switch语句的使用举例问题:输入一个百分制的成绩,将其转换为等级分制输出。规则如下:90100: A8089: B7079: C6069: D低于60: F成绩转换1(用if语句)#include main( ) int score; printf(input a score(0100): ); scanf(%d,&score); if (score = 90 ) printf( grade = An ); else if (score = 80) printf( grade = Bn ); else if (score =70) printf( grad

3、e = Cn ); else if (score = 60) printf( grade = Dn ); else printf( grade = Fn ); 成绩转换2#include main() int score; /* score用于表示百分制分数 */ printf(input score(0100): ); scanf(%d,&score); switch (score / 10) case 10: printf( grade = An ); break; case 9: printf( grade = An ); break; case 8: printf( grade = B

4、n ); break; case 7: printf( grade = Cn ); break; case 6: printf( grade = Dn ); break; case 5: printf( grade = Fn ); break; case 4: printf( grade = Fn ); break; case 3: printf( grade = Fn ); break; case 2: printf( grade = Fn ); break; case 1: printf( grade = Fn ); break; case 0: printf( grade = Fn );

5、 break; 没有这些break,该程序的执行结果是什么?缺少break的switch语句示例 switch (n) case 1: printf( grade = An ); case 2: printf( grade = Bn ); case 3: printf( grade = Cn ); case 4: printf( grade = Dn ); case 5: printf( grade = Fn ); n = 1?YesNo输出grade = A输出grade = Bn = 2?YesNo输出grade = C输出grade = D输出grade = Fn = 3?YesNon

6、= 4?YesNon = 5?YesNoswitch中的break 语句break 语句的目的终止 switch 语句的执行如果没有 break 语句,则程序会从指定的 case 分支开始,并在该分支结束后继续执行下去除非 switch 语句结束,后面的其他 case 分支或 default 分支中的语句都会得到执行原因:case 子句中的常数表达式仅起到语句标号的作用,不是分支之间的分隔标记省略 break 语句的场合允许多个分支执行同样的代码成绩转换3#include main() int score, grade; printf(input a score(0100): ); scanf

7、(%d,&score); grade = score / 10; switch (grade) case 10: case 9: printf( grade = An ); break; case 8: printf( grade = Bn ); break; case 7: printf( grade = Cn ); break;成绩转换3(续) case 6: printf( grade = Dn ); break; case 5: case 4: case 3: case 2: case 1: case 0: printf( grade = Fn ); break; default: p

8、rintf( Invalid input!n ); 成绩转换4(if和switch结合使用)#include main() int score, n; printf(input a score(0100): ); scanf(%d,&score); if (score = 90 ) n = 1; else if (score = 80) n = 2; else if (score =70) n = 3; else if (score = 60) n = 4; else n = 5; switch (n) case 1: printf(grade = An ); break; case 2: p

9、rintf(grade = Bn ); break; case 3: printf(grade = Cn ); break; case 4: printf(grade = Dn ); break; case 5: printf( grade = Fn ); break; /*end of switch*/*end of main*/ 成绩转换5(if和switch结合使用)#include main() int score, n; printf(input a score(0100): ); scanf(%d,&score); if (score 60 ) n = 0; else n = (s

10、core 60) / 10 + 1; switch (n) case 5: case 4: printf(grade = An ); break; case 3: printf(grade = Bn ); break; case 2: printf(grade = Cn ); break; case 1: printf( grade = Dn ); break; case 0: printf( grade = Fn ); break; /*end of switch*/*end of main*/ 至此,我们已经了解了if语句和switch语句的含义和用法,那么,程序中使用if语句的地方能否用

11、switch语句替换呢?switch示例5编写程序,接受用户输入的年份和月份,输出该月天数#include #include zylib.hint main() int year, month, days_of_month;BOOL leapyear = FALSE; /* 输入部分 */ printf( The program gets a year and a month, and prints days of the month.n ); printf( The year: );year = GetIntegerFromKeyboard(); printf( The month: );m

12、onth = GetIntegerFromKeyboard(); if( month 12 )printf( Month error!n );return 1; /* 计算部分 */ leapyear = year % 4 = 0 & year % 100 != 0 | year % 400 = 0; switch( month ) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days_of_month = 31; break; case 4: case 6: case 9: case 11: days_of_month

13、= 30; break; case 2: days_of_month = 28 + (int)leapyear; break; /* 输出部分 */ printf( Days in %4d-%2.2d is %d.n, year, month, days_of_month ); return 0;#include void main() int a=1,b=6,c=4,d=2; switch(a+) case 1: c+;d+; case 2: switch(+b) case 7: c+; case 8: d+; case 3: c+;d+; break; case 4: c+; d+; pr

14、intf(%d,%dn,c,d);switch示例6switch语句小结switch语句用于表示多分支的选择结构,可以用if语句等价地表示switch (表达式e) case 常量表达式1: 语句序列1;break; case 常量表达式2: 语句序列2;break; . case 常量表达式: 语句序列n;break; default: 语句序列n+1;可以将各种情况进行归纳后再用switch语句表示,例如 grade = score / 10;break语句在switch语句中有很重要的作用选择结构程序设计小结掌握并熟练应用if语句和switch语句pAB成立不成立ab选择结构1pA成立不

15、成立ab选择结构2表达式e?语句序列1值1语句序列2值2语句序列n+1其他值语句序列n值n.C的循环语句C语言提供了描述循环计算的语句: while语句 do.while语句 for语句学习循环结构程序设计就是掌握以上语句的使用方法while语句while语句的格式和含义while语句的格式:while (表达式p) 循环体语句ApA真 假循环结构while语句的含义:1) 计算表达式p;2) 若表达式的值为“假”,则结束while语句的执行;否则,执行循环体语句A,然后转1);while语句使用举例1#include int main( ) int i, s; i = 1; s = 0; w

16、hile (i = 100) s += i; i+; printf( %dn ,s); return 0;BYNI 1S 0I=100?S S+I输出S的值开始结束I I+1AC求最大公约数和最小公倍数void main()int a,b,s1,s2;/s1:最大公约数 s2:最小公倍数int i,j,min,max;printf(请输入两个整数:n); scanf(%d%d,&a,&b);min = ab ? a : b;s1 = s2 = 0;for(i = 1;i = max;j-)if(j%max = 0 & j%min = 0)s2 = j;else continue;printf(

17、%d与%d的最大公约数为:%dt最小公倍数为:%dn,a,b,s1,s2);ABCD求最大公约数流程图(欧氏算法)YNr不等于0?输出n的值输入正整数m和n开始结束m n; n rr m % nABCDr m % n求最大公约数程序#include int main( ) return 0;YNr不等于0?输出n的值输入正整数m和n开始结束m n; n rr m % nr m % nwhile (r != 0) m = n; n = r; r = m % n;printf(input two integers:);scanf(%d%d,&m,&n); r = m % n; int m, n,

18、r;printf(ngcd = %dn ,n);分析问题,在求解过程中:存在一个(些)运算(动作)需要重复进行(循环)若干次。重复的次数是事先确定的,或者是根据条件确定的。处理循环计算需要明确的三个问题:循环体:哪些运算(动作)是需要重复进行的;循环条件:重复这些运算的条件是什么,即在什么情况下终止/继续这个重复的过程。循环准备:在进行重复的运算处理之前,需要进行的准备工作是什么;循环结构程序的编写要点程序设计练习一球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹的高度是多少?落地-反弹一球从100m高度自由落下,每次落地后反跳回原来高度的一半,再落下。求它在第10次落地时,共经过多少米?第10次反弹的高度是多少?100m5

温馨提示

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

评论

0/150

提交评论