![[课件资料]第3章算法与控制语句_第1页](http://file.renrendoc.com/FileRoot1/2019-11/24/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab1.gif)
![[课件资料]第3章算法与控制语句_第2页](http://file.renrendoc.com/FileRoot1/2019-11/24/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab2.gif)
![[课件资料]第3章算法与控制语句_第3页](http://file.renrendoc.com/FileRoot1/2019-11/24/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab3.gif)
![[课件资料]第3章算法与控制语句_第4页](http://file.renrendoc.com/FileRoot1/2019-11/24/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab4.gif)
![[课件资料]第3章算法与控制语句_第5页](http://file.renrendoc.com/FileRoot1/2019-11/24/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab/e3356cb5-a4f7-4f73-84a3-6aeedb2f7fab5.gif)
已阅读5页,还剩118页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,第3章算法和控制语句,2,教学目标,初步理解算法的概念和特点掌握常用问题的算法掌握用流程图表示算法了解结构化程序设计的方法掌握格式化输入输出函数的用法掌握分支结构的程序设计,理解分支语句的嵌套掌握循环结构的程序设计及其相互嵌套理解break和continue的控制能够编写较复杂的程序,导引,给定三个数,判断三角形的形状学习委员的烦恼(考试成绩统计-短信程序)确定小偷:甲、乙、丙、丁4人为偷窃嫌疑犯,只有一个是真正的小偷,在审讯过程,四人都有可能说真话或假话。甲:乙没有偷、丁偷的;乙:我没有偷,丙偷的;丙:甲没有偷,乙偷的;丁:我没有偷;请推断谁是小偷。,3,中学数学必修三例子,秦九韶算法计算多项式辗转相除法求567与405的最大公约数,4,5,3.1算法初步3.2C语言的标准输入和输出3.3条件语句3.4多分支语句3.5循环语句3.6转移语句3.7综合应用,6,3.1算法初步,三种基本结构算法的表示算法举例,7,三种基本结构,顺序结构:根据操作的先后顺序执行,8,选择(分支)结构:根据某个给定条件进行判断,条件为真或假时分别执行不同的操作,9,循环结构:根据条件的真或假反复执行某些操作,10,三种基本结构的特点:只有一个入口和一个出口结构内的每一部分都有可能被执行到结构内不存在“死循环”,11,算法的表示,自然语言传统流程图N-S流程图伪代码计算机语言,12,传统流程图,13,计算机语言,#includeintmain()inti,n,s=0;scanf(%d,14,算法举例,例3.1判断三角形的形状,15,例3.2:求n!,16,例3.3:判断某一年是否为闰年。,17,例3.4:输入一个正整数,将它反位输出(如输入12345,输出54321)。,18,例3.5:判断一个整数n是否为素数,19,例3.6:对三个整数a、b、c按从小到大排序。,补充算法问题,判断“回文数或回文字符串”分解质因子多个数据的排序元素左移或右移矩阵旋转,20,21,算法的特点有穷性确定性有零个或多个输入有一个或多个输出可行性,22,3.2C语言的标准输入和输出,3.2.1格式化输入输出3.2.2其它输入输出3.2.3C语言语句3.2.4顺序结构程序设计,23,3.2.1格式化输入输出,格式化输出函数printf():把信息输出到标准输出设备显示器上格式:printf(控制字符串,输出项列表)#include,24,输出项常量、变量、表达式类型与个数必须与控制字符串中格式字符的类型、个数一致有多个输出项时,各项之间用逗号分隔控制字符串必须用双引号括起格式说明普通字符,25,格式说明符:%,26,修饰符:确定数据输出的宽度、精度、小数位数、对齐方式,27,普通字符:打印字符和转义字符,#includeintmain()intx=1234,y=3,z=4;floatf=123.456;doublem=123.456;charch=a,a=Hello,world!;printf(%d%dn,y,z);printf(y=%d,z=%dn,y,z);printf(%8d,%2dn,x,x);printf(%f,%8f,%8.1f,%.2f,%.2en,f,f,f,f,f);printf(%lfn,m);printf(%3cn,ch);printf(%sn%15sn%10.5sn%2.5sn%.3sn,a,a,a,a,a);return0;,28,程序运行结果:34y=3,z=41234,1234123.456001,123.456001,123.5,123.46,1.23e+002123.456000aHello,world!Hello,world!HelloHelloHel,29,格式化输入函数scanf():从标准输入设备键盘上输入信息一般形式:scanf(控制字符串,地址表列)#include控制字符串:%,30,例scanf(“%4d%2d%2d”,输入19991015则1999yy,10mm,15dd,例scanf(“%3d%*4d%f”,输入12345678765.43则123k,8765.43f,例scanf(“%2d%*3d%2d”,输入1234567则12a,67b,例scanf(“%3c%2c”,输入abcde则ac1,dc2,31,输入分隔符的指定一般以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符,例scanf(%d%o%x,输入123123123输出a=123,b=83,c=291,例scanf(“%d:%d:%d”,输入12:30:45则12h,30m,45s,例scanf(“%d,%d”,charch;scanf(%d,执行:123输出:x=123,ch=10,解决方法:(1)用getchar()清除(2)用函数fflush(stdin)清除全部剩余内容(3)用格式串中空格或“%*c”来“吃掉”,34,例intx;charch;scanf(%d,执行:123输出:x=123,ch=10,例intx;charch;scanf(%d,ACM程序设计大赛输入,一般在ACM程序设计大赛中,需要进行多组输入,直到按ctrl-Z回车后才结束,一般可以利用带返回值的scanf()函数来实现。具体用法scanf(%d,c=B;putchar(c);putchar(x42);putchar(0 x42);return0;,BBB,37,getchar()函数:从键盘输入的一个字符格式:getchar(),#includeintmain()charch;ch=getchar();putchar(ch);printf(%dn,ch);return0;,38,3.2.3C语言语句,控制语句:用来完成控制功能。ifelsefor()、while()、dowhilecontinuebreakswitchreturn函数调用语句:用来实现函数调用,由函数调用加一个分号构成表达式语句:由一个表达式加一个分号构成,最典型的是赋值表达式加一个分号构成赋值语句空语句:;复合语句:当一个语句不能完成某一功能,需要用多个语句才能实现,这时用把这些语句括起来,构成复合语句,39,3.2.4顺序结构程序设计,例3.10:编写一个程序,从键盘上输入两个整数,输出其中最大者。,#includeintmain()intx,y,max;scanf(%d%d,40,3.3条件语句,3.3.1if语句3.3.2ifelse语句3.3.3ifelseif语句3.3.4条件语句的嵌套3.3.5条件语句的应用,41,3.3.1if语句,格式:if(表达式)语句序列,42,说明:表达式可以是任何类型的表达式,只要值是非0就是真,是0就是假。语句序列既可以为单条语句,也可以是多条语句if语句表达式必须书写在小括号()内,如果省略编译会出现语法出错,43,例3.12:从键盘输入一个整数,如果该整数为奇数则将其乘3加1后输出,如果为偶数则直接输出,44,例3.13:从键盘输入三个整数a、b、c,对这三个数从小到大排序,#includeintmain()inta,b,c,t;scanf(%d%d%d,if(ac)t=a;a=c;c=t;if(bc)t=b;b=c;c=t;printf(%d,%d,%dn,a,b,c);return0;,45,3.3.2ifelse语句,格式:if(表达式)语句序列1else语句序列2,46,例3.14:从键盘上输入两个整数,求它们的最大值。,#includeintmain()inta,b,max;scanf(%d%d,47,例3.15:从键盘输入一个整数,如果该整数为奇数则将其乘3加1后输出,如果为偶数则除以2输出。,#includeintmain()intn,b;scanf(%d,48,3.3.3ifelseif语句,格式:if(表达式1)语句序列1elseif(表达式2)语句序列2else语句序列n,49,说明:语句序列为单条语句,可以省略。ifelseif满足完全排斥的特性,绝不会出现某次执行了其中两路分支以上的情况。ifelseif语句中的elseif可以有有限多个,取决于编程的实际需求,50,例3.16:从键盘上输入字符,判断输入字符的种类。,51,#includeintmain()charc;printf(输入一个字符:);c=getchar();if(c=0,输入一个字符:ctrl回车,是控制字符输入一个字符:A回车,是字母输入一个字符:9回车,是数字字符输入一个字符:/回车,是其它字符,52,例3.17:已知2010年12月1日为星期三,从键盘上输入131之间的整数,按下述格式输出该日是星期几的信息在对应栏下。2010年12月日历SunMonTueWenTurFriSta-1,53,if(weekday=0)printf(%2dn,date);elseif(weekday=1)printf(%7dn,date);elseif(weekday=2)printf(%12dn,date);elseif(weekday=3)printf(%17dn,date);elseif(weekday=4)printf(%22dn,date);elseif(weekday=5)printf(%27dn,date);elseprintf(%32dn,date);return0;,#include#includeintmain()intdate,weekday,original_date=3;scanf(%d,54,例3.18输入学生的成绩,输出学生的等级:90100(优)、8089(良)、7079(中)、6069(及格)、60分以下(不及格)。,#include#includeintmain()intcj;scanf(%d,思考,如果成绩的数据类型用浮点类型数据,程序该做如何修改?,55,56,3.3.4条件语句的嵌套,嵌套具有else子句的if语句if(表达式1)if(表达式2)语句序列1else语句序列2,嵌套不含else子句的if语句if(表达式1)语句序列1elseif(表达式2)语句序列2,一般形式if(表达式1)if(表达式2)语句序列1else语句序列2elseif(表达式3)语句序列3else语句序列4,57,ifelse配对原则:缺省时,else总是和它上面离它最近的未配对的if配对,58,例:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,修改:if(a=b)if(b=c)printf(“a=b=c”);elseprintf(“a!=b”);,实现ifelse正确配对方法:加,59,例3.19:判断两个数的大小关系,#includeintmain()intx,y;printf(输入两个整数x,y:);scanf(%d,%d,输入两个整数x,y:12,23回车xy输入两个整数x,y:12,12回车x=y,例3.20判断三角形的形状:已知三个数,判断这三个数能否构成一个三角形的三条边;如果能构成三角形,判断所构成三角形的形状。,60,61,#include#includeintmain()floata,b,c;scanf(%f%f%f,62,3.3.5条件语句的应用,例3.21:输入年份,判断是否为闰年。例3.22:从键盘输入一元二次方程的系数a、b、c,求它的根。,63,64,#include#includeintmain()doublea,b,c,delta,x1,x2,p,q;scanf(%lf%lf%lf,65,elseif(delta0)printf(方程有两个不相等的实数根!n);x1=-b/(2*a)+sqrt(delta)/(2*a);x2=-b/(2*a)-sqrt(delta)/(2*a);printf(%.2lf,%.2lfn,x1,x2);elseprintf(方程有两个不相等的复数根!n);p=-b/(2*a);q=sqrt(-delta)/(2*a);printf(%.2lf+%.2lfin,p,q);printf(%.2lf-%.2lfin,p,q);return0;,66,3.4多分支语句,3.4.1switch多分支语句3.4.2多分支语句的嵌套3.4.3多分支语句应用,67,3.4.1switch多分支语句,多分支语句switch的格式:switch(表达式)caseE1:语句序列1;caseE2:语句序列2;caseEn:语句序列n;default:默认语句序列;,68,说明:switch后面表达式的值必须是整型或字符型。E1,E2,En是常量表达式,且值必须互不相同。每个case语句的冒号后面可以是0条或多条语句,多条语句时,可以不加。各case的顺序可以是任意的。允许多个case语句使用同一语句序列default语句不是必须的每个case后面语句序列里的break语句可有可无,但执行效果不同,69,#include#includeintmain()intscore;scanf(%d,思考,如果成绩的数据类型用浮点类型数据,程序该做如何修改?,70,71,3.4.2多分支语句的嵌套,switch语句嵌套if语句,switch()if()else语句序列,if语句嵌套switch语句,72,3.4.3多分支语句应用,例3.24:已知银行整存整取存款不同期限的年利率分别为:2.25%期限1年2.79%期限2年年息=3.33%期限3年3.60%期限5年4.14%期限8年要求输入本金和期限,求到时候能从银行得到的利息与本金的合计。,73,#includeintmain()intyear;doublemoney,rate,total;printf(输入存款和存期:);scanf(%lf%d,74,例3.25:从键盘上输入年份和月份,求该月有多少天?,#include#includeintmain()intyear,month,day,leapyear;scanf(%d%d,75,leapyear=year%4=0,76,35循环语句,3.5.1while循环语句3.5.2dowhile循环语句3.5.3for循环语句3.5.4循环语句的嵌套,77,3.5.1while循环语句,格式:while(表达式)语句序列,语句序列称为循环体,当为一条语句时,表示复合语句的可以省略。表达式可以为任何类型先判断,后执行,若条件不成立,有可能一次也不执行。语句序列中必须有改变while后面括号的表达式值的语句,否则有可能死循环。,78,例3.26(简单的成绩短信程序):小王作为班上的学习委员,每门课程考试后,任课老师都会让他统计成绩。老师并不关心每个人的具体成绩,而只关心参加考试的人数、平均分、最低分和最高分这四项指标,编写程序来帮小王完成这项任务。,79,#includeintmain()intk=0,x,max,min,s=0;floatavg=0;scanf(%d,80,例3.27:输入一个正整数,将它反位组成一个新的数输出(如输入12345,组成54321输出),81,#include#includeintmain()intn,m,t=0;scanf(%d,82,3.5.2dowhile循环语句,格式:do语句序列while(表达式);,语句序列称为循环体,当为一条语句时,表示复合语句的可以省略。表达式可以为任何类型。其特点是先执行,后判断,若条件不成立,就跳出循环。语句序列中必须有改变while后面括号的表达式值的语句,否则有可能死循环。while(表达式)后面的“;”不能少。,83,用dowhile语句重新编写例3.26的问题,#includeintmain()intk=0,x,max,min,s=0;floatavg=0;max=0;min=100;doscanf(%d,84,例3.29:从键盘上输入两个整数,求它们的最大公约数。,85,#includeintmain()inta,b,r;scanf(%d%d,86,while语句和dowhile语句比较while语句是先判断后执行,只要不满足条件,循环体语句根本不会执行dowhile语句是先执行后判断,不管条件是否满足,循环体语句总会执行一次,#includeintmain()inti,sum=0;scanf(%d,#includeintmain()inti,sum=0;scanf(%d,87,3.5.3for循环语句,格式:for(;)语句序列,语句序列称为循环体。当语句序列只有单条语句,表示复合语句的可以省略。表达式1一般为赋值表达式,给控制变量赋初值;如果省略表达式1,这时for语句为如表达式2一般为关系表达式或逻辑表达式,称为循环控制条件表达式3一般为赋值表达式,给控制变量增量或减量for(;)。,88,#include#includeintmain()inti,sum=0,p=1,n;scanf(%d,例3.30:计算,89,例3.31:从输入一个正整数,判断该数是否为素数,#include#include#includeintmain()inti,m,n;scanf(%d,90,例3.32:求所有三位数的水仙花数,#includeintmain()inti,m,n,k;for(i=100;i1000;i+)m=i/100;k=i%10;n=(i-100*m)/10;if(i=m*m*m+n*n*n+k*k*k)printf(%d,i);return0;,91,3.5.4循环语句的嵌套,循环语句的嵌套:一个循环语句的循环体中又包含循环语句,while()while().,dodowhile();.while();,while()dowhile();.,for(;)dowhile();while().,三种循环可互相嵌套,层数不限。外层循环可包含两个以上内循环,但不能相互交叉。嵌套循环的执行流程:外层循环执行一次,内层循环要执行完。嵌套循环的跳转:只能跳转出本层循环。禁止从外层跳入内层、禁止跳入同层的另一循环和向上跳转。,92,例3.33:编写C语言程序,输出乘法九九表。,乘法九九表-123456789-1123456789224681012141618336912151821242744812162024283236551015202530354045661218243036424854771421283542495663881624324048566472991827364554637281-,93,94,#includeintmain()inti,j;printf(n-n);for(i=1;i10;i+)printf(%4d,i);printf(n-n);for(i=1;i10;i+)/*外循环*/printf(%d,i);for(j=1;j10;j+)/*内循环*/printf(%4d,i*j);printf(n);printf(-n);return0;,思考-1,95,乘法九九表-123456789-11224336944812165510152025661218243036771421283542498816243240485664991827364554637281-,思考-2,96,乘法九九表-123456789-11234567892468101214161839121518212427416202428323652530354045636424854749566386472981-,97,编写C程序,实现100元人民币换成1元、5元、10元的所有兑换方案。,设i、j、k分别代表1元、5元和10元角的数量则:i+2j+5k=100,#includeintmain()inti,j,k;for(i=0;i=100;i+)for(j=0;j=20;j+)for(k=0;k=10;k+)if(i+2*j+5*k=100)printf(%d%d%dn,i,j,k);return0;,思考,如果用二重循环,程序该做如何修改?,98,百钱买百鸡:一百元钱买了一百只鸡,其中母鸡一只5元钱、公鸡一只3元钱、小鸡一只0.5元钱,问每一种鸡都必须要买的情况下,计算所有的购买方法。,99,100,#includeintmain()inti,j,k;for(i=1;i=19;i+)for(j=1;j=31;j+)for(k=1;k=98;k+)if(i+j+k=100,101,3.6转移语句,goto语句形式:goto语句标号功能:无条件转移到语句标号所在的位置执行continue语句形式:continue;功能:结束本次循环,开始下一次循环continue只能用在循环结构中,而不能用于其它控制结构,102,103,例3.35:输出100200之间不能被3整除的数,#includeintmain()intk;for(k=100;k=200;k+)if(k%3=0)continue;printf(%d,k);return0;,104,break语句格式:break;功能:跳出switch结构或结束本层循环。说明:break语句只能用于switch或循环结构中,105,例3.36:输出半径为1到10的圆的面积,若面积超过100,则不输出,#include#definePI3.1415926intmain()intr;doublearea;for(r=1;r100.0)break;printf(%.2lf,area);return0;,106,3.7综合应用,验证哥德巴赫猜想:任一充分大的偶数,可以用两个素数之和表示,107,#include#include#includeintmain()inti,p,q,n,p_flag,q_flag;scanf(%d,do,p=p+1;q=n-p;p_flag=1;for(i=2;i=sqrt(p);i+)if(p%i=0)p_flag=0;break;q_flag=1;for(i=2;i=sqrt(q);i+)if(q%i=0)q_flag=0;break;while(p_flag*q_flag=0);printf(%d=%d+%dn,n,p,q);return0;,思考,该算法能否进一步改进?若能改进,该如何改进?,108,109,例3.38:求斐波那契(Fibonacci)数列前40项。,110,#includeintmain()inti,f1=1,f2=1;for(i=1;i=20;i+)printf(%12d%12d,f1,f2);if(i%2=0)/*每行输出4个数*/printf(n);f1=f1+f2;f2=f2+f1;retu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 数学专业考研试题及答案
- 电热专业试题题库及答案
- 农机专业试题及答案要点
- 专业基础知识试题及答案
- 煤矿专业试题及答案
- 安装专业试题及答案
- 广西2025-2026学年七年级语文上学期第一次月考复习试卷(含答案)
- 铝单板凉亭施工方案
- 品牌线下活动策划方案公司
- 泥灰被雨季施工方案
- 08K507-1 管道与设备绝热-保温(有水印)
- 智能会议系统施工方案及方法
- 高中生性教育
- 五矿稀土江华兴华新材料有限公司5000ta稀土分离加工项目辐射环境影响评价专篇
- 承诺书:不参与电信网络诈骗犯罪承诺书学生及家长(监护人)签署
- YY/T 0997-2015肘、膝关节被动运动设备
- YB/T 5189-2000炭素材料挥发分的测定
- 加快构建新发展格局研讨发言稿
- GB/T 9115-2010对焊钢制管法兰
- GB/T 6208-1995钎料型号表示方法
- 45G互操作及信令流程
评论
0/150
提交评论