C++第2章02 语法规则.ppt_第1页
C++第2章02 语法规则.ppt_第2页
C++第2章02 语法规则.ppt_第3页
C++第2章02 语法规则.ppt_第4页
C++第2章02 语法规则.ppt_第5页
已阅读5页,还剩47页未读 继续免费阅读

下载本文档

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

文档简介

1、第2章02 语法规则,程序的三种控制结构,结构化程序设计的基础是采用三种程序的控制结构。,顺序结构,算法描述: f; g;,框图:,选择结构(分支结构),算法描述: if(e) f; else g;,框图:,yes,no,循环结构,三种控制结构有如下共同的特点:,一个入口和一个出口; 无死语句; 无死循环。,While(e) f; ,复合语句:用 括起的一系列的语句。 逻辑上被认为是一条语句,#include void main (void) int a,b,t; scanf(“%d,%d”, ,复合语句,复合语句,凡是可以出现单一语句的地方都可以使用复合语句。,复合语句的作用: 作为分支和循

2、环的块。 作为标识符的作用域。,2.3选择结构(分支结构),选择结构:根据条件,选择执行相应的程序段的一种程序结构. 常用if语句和switch语句来完成。,2.3.1 if语句 1. if语句的三种形式(单、双、多分支),(1)单分支: if(表达式) 语句;,表达式:非0为yes,0为no。,流程图:,#include void main(void) char ch; ch=getchar( ); if(ch=a , if else 双分支,格式: if(表达式) 语句1; else 语句2;,举例:输出| x |。,#include void main ( ) int x ; scanf

3、 ( “%d” , ,#include void main ( ) int x ; scanf ( “%d” , , if else if 多分支,格式: if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else if(表达式n-1) 语句n-1; else 语句n;,n-1个条件,满足哪个条件,执行其对应的语句,然后到出口。,if- else if 应用举例:,举例1、根据收入数额,求应缴税款。 应纳个人所得税税额= (应纳税所得额扣除标准)*适用税率 起征点:2000元。超过部分: 不超过500税率为5% 超过 5002000税率为1

4、0% 超过 20005000税率15% 超过 500020000税率20% 超过 2000040000税率25% 超过 4000060000税率30% 超过 6000080000税率35% 超过 80000100000税率40% 超过 100000以上税率45%,#include void main(void) float x ,rate,cchu; scanf(“%f ”, ,举例2 输入一个分数,输出其等级。 90分以上 打印 A80-89 打印 B 70-79 打印 C60-69 打印 D 59 以下 打印 F,#include void main(void) int score; sc

5、anf (“%d”, ,举例3. 判别键盘输入字符的类别:控制字符、数字、大写字母、小写字母或其它字符。,#include void main(void) char c; printf(“input a character:”); c=getchar( ); if(c=0 ,2. if语句的嵌套,对于如下的结构: if(e1) stat1; else stat2;,在stat1或stat2中又含有if结构: if(e2) stat3; else stat4; 称为if结构的嵌套。各种if结构都可以嵌套。,如求符号函数: -1 (x0),#include void main ( void) in

6、t x,y ; scanf (“%d” , ,外层,内层,在外层else语句中,含有一个if结构。,说明:, 书写采取缩进形式, 便于区分。,内层缩进。, else与最近的if 相匹 配,从内到外。,y=-1; if (x!=0) if (x0) y=1; else y=0;,【例2-14】 输入两个整数并判断其大小关系。,#include void main() int x,y; printf(请输入两个整数:); scanf(%d%d, ,#include void main() int x,y; printf(请输入两个整数:); scanf(%d%d, ,【举例】 一元二次方程求解程序

7、,分析: 定义变量 a,b,c,d,x1,x2; 输入系数a,b,c 求出判别式d=b*b-4*a*c,#include #include void main(void) float a,b,c,d,x1,x2; scanf(“%f,%f,%f”, ,#include #include void main(void) float a,b,c,d,x1,x2; scanf(“%f,%f,%f”, ,【举例】 分析下列程序。 #include void main() int a=2,b=0,c=-1; if(a=b+c) if(a0) b=c=a; else if(a=0) a=b=c=0; el

8、se a=b=c=2; else a=b=c=-2; printf(“%d,%d,%dn,a,b,c); ,2.3.2 switch语句(多分支结构),格式: switch (表达式) case 常量表达式1: 语句 1; case 常量表达式2: 语句 2; case 常量表达式n-1: 语句 n-1; default : 语句 n; ,只能是整型或字符型表达式。,整型或字符型常量表达式。 其值互不相等!,注意:, “case常量表达式”起语句标号作用。 当表达式的值与某一个case后面的常量值相等时, 就执行此case后面的语句。 若所有的常量值都与表达式的值不等时,执行default后面

9、的语句。, 执行完一个case后面的语句后,流程控制转移到下一个case 继续执行。这样会出现一个输入多个输出的情况。,【举例】 #include void main(void) char grade; grade=getchar( ); switch(grade) case A: printf (“90100n”); case B: printf (“8089n); case C: printf (“7079n”); case D: printf (“60 69n”); case F: printf (“60n”); default : printf (“errorn”); ,语句标号。,b

10、reak语句:,格式: break;,作用:中断switch流程。,break; break; break; break; break;,举例:输出五分制对应的百分制范围。,#include void main(void) char chGrad; chGrad=getchar( ); switch(chGrad) case a: case A: printf(“90100n”); break; case b: case B: printf(“8089n”); break; case c: case C: printf(“7079n”); break; case d: case D: prin

11、tf(“6069n”); break; case f: case F: printf(“60n”);break; ,注意: 多个case可以共用一组执行语句 。,switch(s) case 5: case 4: case 3: printf(“Passn”); break; ,举例2 输入一个年号,判断它是否是闰年。 /*闰年的条件:能被4整除,但不被100整除的年份, 或者是能被400整除的年份*/,#include void main() int year, leap; scanf(%d, ,#include void main() int year, leap; printf(plea

12、se enter a year:); scanf(%d, ,2.4 循环结构,C 语言提供了三类实现循环的语句: while语句, do while语句, for语句,循环是用来解决重复的、有规律的运算的一种程序设计结构。,例 求和: 1+2+3+100,2.4.1 while 语句,格式: while(表达式) 循环体语句;,流程:,举例:求 s= 1+2+3+4+100,思考: (1)求 1100之间的偶数之和。,(2)求 1100之间的奇数之和。,(3)求 1100之间的3的倍数之和。,(4)求 120之间的3的倍数之积。,i=1;s=0; While(i=100) s=s+i; i+;

13、 ,2.4.2 do while语句,格式: do 循环体语句; while (表达式 );,流程:,while循环与do-while循环的区别: while循环先判断条件,后执行循环体; do while循环先执行循环体,后判断条件。,举例:求:30!,#include void main(void) float s=1.0; int i=1; do s*=i; i+; while(i=30); printf(“%f”,s); ,2.4.3 for语句,格式: for (表达式1; 表达式2; 表达式3 ) 循环体语句;,#include void main (void ) int s,i

14、; for (s=0,i=1;i=100;i+ ) s =s + i; printf (“s= %d” , s) ; ,在for循环中,e1、e2、e3都可以省略!,e1省略,s=0,i=1;,e3省略,i+;,初值表达式。,条件表达式。,增值表达式。,求:s=1+2+3+100,for 循环实例,求 100以内的偶数和。,int s=0,i; for(i=2;i100;i+=2) s+=i;,求500以内最大的5个能被50整除的数之和。,int i ,j,s=0; for(j=500,i=0; i5; i+, j-=50) s+=j;,从大到小输出100以内能被5整除的数。,int i; f

15、or(i=100;i=0;i-=5) printf(“%dn”,i);,int i,s=0; for(i=0;i100;i+) if(i%2=0) s+=i;,求 ax. int i,a,x; int m=1; scanf(“%d%d”,2.4.4 转移语句 break与continue,1. break语句,作用:break语句可以跳出switch结构,也可以跳出循环结构。,举例:编程输出r=110的圆的面积,如圆面积大于100则中断。,for (r=1; r100 ) break; printf ( “ n% f “ , area); ,2. continue语句,作用:结束本次循环,跳过

16、剩余的循环体内容, 进行下次循环的判定和执行。,举例:求1100内的偶数和。,s=0; for ( n=1; n=100; n+) if (n%2!=0) continue; s+=n; ,满足条件,跳过循环体,继续下一次循环。,程序举例,#include void main() int i,result; for(i=1;i100) break; else printf(%d*%d=%dn,i,i,i*i); ,【例2-21】计算并输出1到20的平方,当结果大于100时停止。,程序举例,#include void main() int n,i; scanf(%d, ,【例2-22】输入一个数

17、n,判断n是否为素数。,2.4.5 循环的嵌套,概念:循环体内又包含一个完整的循环称为循环 的嵌套。,11=1 12=2 19=9 21=2 22=4 29=18 91=9 92=18 99 =81,举例 打印一个方形的99的乘法表:,i=1 i=2 i=9,j=1 j=2 j=9,1 2 3 9,1 2 9,#include void main (void ) int i,j ; for (i=1 ; i=9 ; i+) printf (“ n “); ,外层循环,内层循环,for(j=1; j=9 ; j+) printf (“%d%d=%4d ” , i,j,i*j) ; ,举例 打印一

18、个方形的99的乘法表.,#include void main() int i,j; for(i=1;i=9;i+) for(j=1;j=i;j+) printf(%d*%d=%2d ,j,i,i*j); printf(n); ,【例2-20】输出三角形九九乘法表。,控制结构 小结 -分支结构、循环结构,选择结构(分支结构),if语句的三种形式(单分支、双分支、多分支),(1)单分支: if(表达式) 语句;, if else 双分支,格式: if(表达式) 语句1; else 语句2;, if else if 多分支,格式: if(表达式1) 语句1; else if(表达式2) 语句2; e

19、lse if(表达式3) 语句3; else if(表达式n-1) 语句n-1; else 语句n;,n-1个条件,满足哪个条件,执行其对应的语句,然后到出口。,(4)switch语句(多分支结构),格式: switch (表达式) case 常量1: 语句 1; case 常量2: 语句 2; case 常量n-1: 语句 n-1; default : 语句 n; ,注意:,当表达式值与某一个case后面的常量值相等时, 就执行此case后面的语句。 若都不等时,执行default后面的语句。, 执行完一个case后面的语句后,流程控制转移到下一个case 继续执行,直到遇到break跳出。

20、,break,break,break,break,while 循环,格式: while(表达式) 循环体语句;,do while循环,格式: do 循环体语句; while (表达式 );,for循环,格式: for (表达式1; 表达式2; 表达式3 ) 循环体语句;,循环初值,循环条件,循环变量增值,典型例题精解,与分支结构、循环结构相联系的 编程方法。,枚举法( 穷举法、遍历法),有限数据的集合中,某些数据满足特定条件-为解。 通过循环产生集合中的所有数据。 循环体中,按条件测试,满足条件者为所求解。,数性判断 输出100-500之间的所有素数,并统计素数个数。 输出所有的水仙花数。 求

21、1000之内的所有完数。 求1000之内的所有的同构数,#include void main(void) int n, j, s,scount=0 for(n=100;nn-1) printf(“n%d”,n); scount+; printf(“100-500内素数的个数%d”,scount); ,举例3 输出100500之间的全部素数。,void main(void) int n, j, s; for(n=1;n1000;n+) s=0; for(j=1; j=n-1; j+) if(n%j=0) s+=j; if(s=n) printf(“n%d, ”,n); ,举例4 输出1000以内

22、的全部完数(其所有小于自身的因子的和等于自身)。,void main(void) int n, ge,shi,bai; for(n=100;n1000;n+) ge=n%10; shi=n/10%10; bai=n/100; if(ge*ge*ge+shi*shi*shi+bai*bai*bai=n) printf(“水仙花数:%d, ”, n); ,举例5 输出全部水仙花数(水仙花数:一个三位数,每一位上的数字的立方和等于自身)。,#include void main(void) int n,you; for(n=1;n10 ,举例5 输出1000以内的同构数(该数出现在其平方数的右端)。,

23、举例5 百钱买百鸡问题。(习题2-3-5)鸡翁一值钱5; 鸡母一值钱3;鸡雏三值钱1。凡百钱买百鸡,问鸡翁、鸡母、鸡雏各几何。,#include void main(void) int i, j, k; for(i=0;n=20;n+) for(j=0;n=33;j+) k=100-i-j; if(5*i+3*j+k/3=100 ,类似问题:搬砖问题。换钱币问题。见教材150页,2. 迭代法(求和式),迭代是通过循环不断由旧值推导新值,直到最后求解的过程。 三要点:,求Fibonacci数列前20项的和,fisum=0; f1=f2=1; for(i=1;i=18;i+) fisum=fisum+f; f=f1+f2; f1=f2; f2=f; ,1.迭代初值(边界条件) 2.迭代公式(由新值代替旧值) 3.迭代次数(循环条件),举例6 用辗转相除法,求两个数的最大公约数。,#include void main() int m,n,r,t; scanf(%d,%d, ,迭代初值:m,n的初始值。 迭代公式:r=m%n;m=n;n=r;

温馨提示

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

评论

0/150

提交评论