[其它考试]2C语言快速入门2分支循环.ppt

上传人:sccc 文档编号:6034132 上传时间:2023-09-16 格式:PPT 页数:79 大小:1.03MB
返回 下载 相关 举报
[其它考试]2C语言快速入门2分支循环.ppt_第1页
第1页 / 共79页
[其它考试]2C语言快速入门2分支循环.ppt_第2页
第2页 / 共79页
[其它考试]2C语言快速入门2分支循环.ppt_第3页
第3页 / 共79页
[其它考试]2C语言快速入门2分支循环.ppt_第4页
第4页 / 共79页
[其它考试]2C语言快速入门2分支循环.ppt_第5页
第5页 / 共79页
点击查看更多>>
资源描述

《[其它考试]2C语言快速入门2分支循环.ppt》由会员分享,可在线阅读,更多相关《[其它考试]2C语言快速入门2分支循环.ppt(79页珍藏版)》请在三一办公上搜索。

1、第2章 C语言快速入门(2),程序控制结构 顺序结构 选择结构循环结构,2.5 程序控制结构,C语言的语句(statement)以“;”作分隔符,编译后产生机器指令。C语言语句可分为两大类:简单语句和复合语句。,2.5.1 语句概述,简单语句说明语句变量说明语句函数原型说明语句表达式语句空语句流程控制语句复合语句,2.5.2 结构化程序设计,基本思想:任何程序都可以用三种基本结构表示,顺序结构选择结构循环结构在程序中限制使用无条件转移语句(goto)。结构化程序:由三种基本结构反复嵌套构成的程序叫结构化程序。优点:结构清晰,易读,提高程序设计质量和效率,2.6 顺序结构,按照解决问题的自然顺序

2、写出相应的程序语句它的执行顺序是自上而下,依次执行。,例:交换两个变量的值 int a=5,b=10;int t;t=a;a=b;b=t;,这个顺序不能乱,例:输入三角形边长,求面积,#include#include main()float a,b,c,s,area;printf(“请输入三角形三条边长);scanf(%f%f%f,输入:3 4 6 输出:a=3.00,b=4.00,c=6.00 s=6.50 area=5.33,顺序结构,#includevoid main()float x,x1,x2,y;printf(“请输入x的值“);scanf(“%f”,#include#includ

3、evoid main()float a,y;printf(请输入a的值);scanf(%f,2.7 选择结构,如果没有条件判断语句,世界上最先进的计算机也只是一个计算器。选择结构使得计算机表现出具有智能。,自然语言:如果那么 否则C语言:选择结构,问题引入:计算两个数中的最小者.,num1 num2,min,?,Input,Process,Output,scanf(%d%d,if(num1 num2)min=num1;else min=num2;,计算两个数中的最小者,printf(%d,min);,main()int num1,num2,min;scanf(%d%d,C 程序:计算两个数中的

4、最小者,2.7.1 基本选择结构(ifelse结构),选择结构的基本编程模式,if语句的三种基本形式,模式1:单选择if语句语句格式:if(条件)语句组;,功能:判断条件为真时执行语句否则跳过语句,条件可以是关系表达式或逻辑表达式,#includemain()float a;scanf(“%f”,分析:对于任意给定的一个数a,如果a0,绝对值等于它自身,不需要做任何处理;如果a0,则-a就是a的绝对值,显然本例使用编程模式1。,【例】从键盘输入一个实数a,然后输出其绝对值。,模式2:双选择if语句,5.1 if语句,语句格式:if(条件)语句组1;else 语句组2;,功能:判断条件为真时执行

5、语句组1否则执行语句组2,分析:假设有三个数a,b,c,用变量max3表示三个数中的最大的数。将三个数分成两组,a,b为一组,c为一组;先求a,b中的最大数,如果 ab,则max3=a,否则max3=b;将a,b的最大数max3与c比较,如果max3c,则max3就是三个数中的最大数,否则c是三个数中的最大数,max3=c;,【例】从键盘任意输入三个数,输出三个数中最大的数,#includemain()float a,b,c,max3;printf(输入三个数a,b,c:);scanf(%f%f%f,模式3:多条件的if语句,语句格式:if(条件1)语句1;else if(条件2)语句2;el

6、se if(条件3)语句3;else if(条件m)语句m;else 语句n;,功能:从多组语句中选择满足条件的语句组执行。,3.多条件的if语句,从键盘输入一个整数a,按其值的大小分别输出a1000,例,main()int a;scanf(“%d”,从四个条件中选择一个为真的执行,说明:,在if-else语句中,一般采用“缩进”的书写形式来表示“语句1”或“语句2”所属的层次。缩进仅是一种书写形式,没有逻辑意义if else 配对原则:缺省 时,else总是和它上面离它最近的未配对的if配对,银行存款本金计算:,main()int year;float money,rate,total;pr

7、intf(Input money and year=?);scanf(%f%d,银行存款本金计算:期满总金额=本钱+本钱月息 月数,例,2.7.2 条件运算符,条件运算符是一个三元运算符,其格式如下:,expr1?expr2:expr3,if(expr1)expr2;else expr3;,等价,if(num1 num2)min=num1;elsemin=num2;printf(“Smallest:%dn”,min);,min=num1 num2?num1:num2;printf(“Smallest:%dn”,min);,例:计算最小值,【例2.7-3】(字符大写转小写)输入一个字符,判别它是

8、否大写字母,如果是,将它转换成小写字母;如果不是,不转换。,main()char ch;scanf(%c,例:体型判断,按“体指数”对肥胖程度进行划分:体指数t=w/h2(体重w单位为公斤,身高h单位为米)当t 18时,为低体重;当18 t 25时,为正常体重;当25 t 27时,为超重体重;当t 27时,为肥胖。编程从键盘输入你的身高h和体重w,判断你的体重属于何种类型。,例,#include main()float h,w,t;printf(Please enter h,w:);scanf(%f,%f,当t 18时,为低体重;当18 t 25时,为正常体重;当25 t 27时,为超重体重;

9、当t 27时,为肥胖。,#include main()float h,w,t;printf(Please enter h,w:);scanf(%f,%f,18 25 27,例,当t 18时,为低体重;当18 t 25时,为正常体重;当25 t 27时,为超重体重;当t 27时,为肥胖。,2.7.3 多分支选择结构(switchcase),switch(expr)case M1:S_1;break;case M2:S_1;break;case Mn:S_n;break;default:S_d;,switch语句的执行过程是:计算expr的值(整型)计算出每个常量表达 式M1,M2,Mn的值(整型

10、)让expr依次同M1,M2,进行比较,多分支选择,switch(expression)case value1:statement1;break;case value2:statement2;break;default:statementX;break;,Example:switch(month)case 1:printf(“Januaryn”);break;case 2:printf(“Februaryn”);break;case 3:printf(“Marchn”);break;default:printf(“Othersn”);break;printf(“End”);,January_,

11、JanuaryEnd _,多分支选择,Example:switch(month)case 1:printf(“Januaryn”);break;case 2:printf(“Februaryn”);break;case 3:printf(“Marchn”);break;default:printf(“Othersn”);break;printf(“End”);,多分支选择,Example:switch(month)case 1:printf(“Januaryn”);break;case 2:printf(“Februaryn”);case 3:printf(“Marchn”);break;de

12、fault:printf(“Othersn”);break;printf(“End”);,February_,March _,End _,多分支选择,Example:switch(month)case 1:printf(“Januaryn”);case 2:printf(“Februaryn”);case 3:printf(“Marchn”);default:printf(“Othersn”);break;printf(“End”);,若 month=1?,若month=34?,多分支选择,switch(ch)case a:case A:d1=(x+y)/2;d2=x*y-2;break;ca

13、se b:case B:d1=(a+b)/2;d2=a*b-2;break;default:printf(“Input error!n”);exit(1);,【例】分析下面switch语句的执行过程。,【例】分析下面程序段中的错误,float x=2;int a=3,b=1;switch(2*x)/错误:2*x是浮点型表达式 case 2.5:/错误:2.5是浮点常量表达式 printf(“%f”,2*x);break;case a+b:/错误:a+b不是整型常量表达式,因为a,b是变量 printf(“%d”,a+b);case 2,3,4:/错误:case子句只能有一个常量表达式 prin

14、tf(“%d%d%d”,2,3,4);,2.8 循环结构,我们之所以感到计算机无所不能,是因为计算机能不厌其烦地重复大量枯燥的工作。,循环问题,例,求:,分析,s=1+2+3+x,问题被简化为做加法:,最基本的执行语句就是循环体内的语句。其次要考虑在进入循环之前和结束循环之后计算机应该完成的操作。,循环是有规律的重复操作。将复杂问题分解为简单的操作过程,程序只对简单过程描述,这些过程的多次重复就可完成对问题的求解。重复的频繁性决定了循环在程序设计中必不可少!,#include main()int i,n,s;printf(输入自然数n=);scanf(%d,10s=55100s=5050255

15、s=32640,运行,计算前n个自然数的和,for(表达式1;表达式2;表达式3)S;,for循环结构,循环起始条件,循环结束条件,循环增量,for语句的执行过程首先执行表达式1。如果表达式2的值为非0,就重复执行语句S和表达式3,直到表达式2的值为0时止,#include void main()int i,s=0;for(i=1;i=100;i+)s=s+i;printf(s=%d,i=%dn,s,i);,循环控制变量,循环 在某个条件成立的前提下,重复地执行一个语句块。在循环过程中会不断地检测条件是否成立,当条件不再成立时,循环结束,特点:是先判断控制条件,如果条件成立则执行语句序列,否则

16、退出循环。,条件,N,语句序列,Y,While 循环语句(当型循环),格式:while(表达式)循环体语句;,2.双选择if语句,main()int i=1,s=0,n;scanf(%d,计算前n个自然数的和,注意:1、如果语句超过一个,则必须用 构成复合语句 2、在循环体中应有改变循环条件值的语句,void main()int counter=1,sum=0,n;while(counter6)scanf(%d,注意:counter 不参加运算,counter 控制重复运算的次数counter 可以修改,保证执行5次,【例】求从键盘上任意输入5个数的和,2 3 4 5 6sum=20,2.双选

17、择if语句,#include main()int n=0;while(n3)printf(”n is%dn”,n);n=n+1;printf(”Thats all this program does.n”);,例,分析程序的运行结果,结果:程序将不停的打印“n is 0”,直至终止程序,无法正常终止的程序,称为“死循环”,结论:while语句循环体中,一定要有能够对循环控制条件产生影响的语句。避免出现“死循环”现象,2.双选择if语句,例,从键盘输入一系列字符,直到输入字符a时停止,分析:由于不知道要输入的字符数,只知停止条件是输入字母a,则可将循环控制条件设为ch!=a,#include m

18、ain()char ch=;while(ch!=a)putchar(ch=getchar();,特点:先执行语句循环体,然后判断控制循环的条件。若条件成立,则继续执行循环体,直到条件不成立时,退出循环。,条件,满足,N,语句序列,Y,(a),传统流程图,直到条件满足,语句序列,(b)N,-,S,流程图,Do-While 循环语句(直到型循环),do-while语句,do 语句;while(表达式);功能:先执行循环体,然后计算表达式值,其值若为真(非0)则继续执行循环体,直到表达式为假时为止。,main()int i=1,s=0,n;scanf(%d,用do-while循环改写计算前n个自然数

19、的和,N,【例】while和do-while循环的比较,(1)void main()int i,sum=0;scanf(%d,(2)void main()int i,sum=0;scanf(%d,printf(sum=%dn,sum);,循环至少执行一次,循环没有被执行,输入:12输出:s=12,输入:12输出:s=0,三种循环语句的比较1for 语句与while语句执行过程相同,但for语句简洁、清晰,它将初始条件、判断条件和循环变量的在一行书写,显得直观、明了。2while 和do-while语句的循环控制变量初始化是在循环语句之前完成,而for语句循环变量的初始化是在for中(表达式1)

20、中,也可以在for语句前实现。如:x=1;3for语句和while语句是判断条件后执行循环体;而do-while是先执行循环体后判断条件,无论条件是否满足都要执行一次循环体。,选择三种循环的一般原则,如果循环次数已知,用for如果循环次数未知,用while如果循环体至少要执行一次,用do-while这只是“一般”原则,不是“原则”,注意,在for和while语句之后一般没有分号有分号表示循环体就是分号之前的内容(空循环体)while(i 100);i+;for(i=0;i 100;i+);printf(%d,i);for通常有一个循环变量控制循环的次数,不要在循环体内改变这个变量,流程的转移控

21、制,break语句continue语句goto语句,break语句和continue语句,1break语句,格式:break;功能:强制中断当前的循环,不再执行后面的循环语句而退出循环(结束循环)。,【例】计算半径r=1到10时的面积,直到面积大于100为止。#include#define PI 3.1415926main()int r;float area;for(r=1;r100)break;printf(r=%d,r);,例 判断m是否素数,#include main()int m,i,k;scanf(“%d”,continue语句 使用continue语句跳出本次循环体直接进入下一轮循

22、环。continue通常要和if语句一起使用。main()int i=0;while(+i10)if(i=5)continue;printf(“%dn”,i);,12346789,把100200之间的不能被3整除的数输出,mian()int n;for(n=100;n=200;n+)if(n%3=0)continue;printf(“%d”,n);,例,选择下面程序的运行结果,#includemain()int i;for(i=1;i=5;i+)if(i%2)printf(*);else continue;printf(#);printf($n);,A)*#*#*#$B)#*#*#*$C)*#

23、*#$D)#*#*$,goto语句,无条件转向语句语法为:goto 语句标号;语句标号:是一个标识符。命名规则和变量名相同。语句标号只在说明它的函数中是可见的,不能重名。,main()int i=,s;i=1;s=0;loop:/*标号作用*/if(i=100)s+=i;+i;goto loop;printf(“%dn”,s);,破坏了结构化设计风格容易带来错误隐患主张少用、慎用,而不是禁用,例:猜数字,编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low)

24、,直到猜中为止,给出猜数的次数。,#include#include main()int magic;int guess;int counter;magic=rand()%100+1;counter=0;doprintf(Please guess a magic number:);scanf(%d,猜数字(继续1),编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low)最多可以猜10次。如果猜了10次仍未猜中的话,则停止本次猜数,显示“Game Over”.,

25、猜数字(继续2),编程先由计算机“想”一个1到100之间的数请人猜,如果人猜对了,则计算机给出提示:“Right!”,否则提示:“Wrong!”,并告诉人所猜的数是大(Too high)还是小(Too low)最多可以猜10次。如果猜了10次仍未猜中的话,则停止本次猜数,然后继续猜下一个数。每次运行程序可以反复猜多个数,直到操作者想停止时才结束。,循环嵌套,在循环体中,又包含有循环结构即构成循环嵌套,1 2 3 4 5 6 7 8 9-12 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40

26、48 56 649 18 27 36 45 54 63 72 81,行循环中包含列循环,问题:,嵌套结构规划,外循环,内循环,交叉循环,外循环入口,内循环出口,内循环出口,外循环出口,打印边长为m的正方形,要求:从键盘输入m值,输出m行每行m个*号,例,*,算法分析与设计:1.输入m,2.重复打印m行,每行打印m个*;,2.for(k=1;k=m;k+)打印一行中的 m 个*;,行控制,细化,细化:1.输入m;2.for(k=1;k=m;k+)打印 m 个*;换新行;,细化:1.输入m;2.for(k=1;k=m;k+)for(j=1;j=m;j+)printf(“*”);printf(“n”

27、);,行控制,列控制,*,整理,得到程序如下:,#include main()int k,m,j;scanf(“%d”,分析方法:,逐步求精法。对于复杂问题,不可能直接得到程序,可以先将简单的部分明确出来,再逐步对复杂部分进行细化,一步一步推出程序,5.2.1 switch语句格式,输出下三角形乘法九九表,例,1 2 3 4 5 6 7 8 9-12 43 6 94 8 12 165 10 15 20 256 12 18 24 30 367 14 21 28 35 42 498 16 24 32 40 48 56 649 18 27 36 45 54 63 72 81,思路:行号为i,列号为j

28、,(1=i=9),(1=j=i),则:第 i 行中一共要输出 i 个乘积,i=7j=5i*j,框图,i=1,i=9,打印i,i=i+1,i=i+1,i=1,i=9,j=1,j=i,打印i*j,打印i*j,i=i+1,j=j+1,#include main()int i=1,j;/*i:行计数器 j:列计数器*/while(i=9)/*控制打印表头*/printf(%4d,i+);printf(n-n);for(i=1;i=9;i+)/*行循环入口*/j=1;/*列计数器置1*/while(j=i)/*嵌套的内循环。输出第i行*/printf(“%4d”,i*j);/*输出乘积*/j+;/*列计

29、数器+1*/printf(n);/*一行输出结束后,输出n*/,打印九九乘法表,内循环终值与外循环变量有关,用for语句实现打印乘法九九表,#include main()int i,j;for(i=1;i10;i+)printf(“%4d”,i);/*打印表头*/printf(n-n);for(i=1;i10;i+)/*控制打印表体*/for(j=1;j=i;j+)printf(j=i)?%4dn:%4d,i*j);,回想一下,选择结构if()else,选择结构switchcase,分支结构(多选结构)循环结构for(),for循环结构while(),while循环结构dowhile(),do

30、while循环结构continue,循环辅助控制语句break,分支结构与循环结构辅助控制语句goto,无条件转向语句,作业,编程实现求分段函数的值。-1(x0)用户键入任意一个百分制成绩,要求输出成绩等级“A”、“B”、“C”、“D”、“E”。其中:90分以上为“A”,8089分为“B”,7079分为“C”,6069分为“D”,60分以下为“E”,用switchcase语句实现分别用For、while和do while语句语句编程实现任意n个整数的乘积 1*2*nP64 8,作业,用户键入任意一个百分制成绩,要求输出成绩等级“A”、“B”、“C”、“D”、“E”。其中:90分以上为“A”,8

31、089分为“B”,7079分为“C”,6069分为“D”,60分以下为“E”,用switchcase语句实现,#includemain()int score,flag;do flag=1;printf(请输入成绩(0100)n);scanf(%d,switch(score/10)case 10:case 9:printf(An);break;case 8:printf(Bn);break;case 7:printf(Cn);break;case 6:printf(Dn);break;default:printf(En);break;,作业,P64 8,#includevoid main()int counter=1,sum1=0,sum2=0,n;printf(请输入10个整数,以回车键结束!n);while(counter=0)sum1=sum1+n;elsesum2=sum2+n;counter+;printf(正数之和=%d,负数之和=%dn,sum1,sum2);,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号