




已阅读5页,还剩103页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Page1,第4章程序控制结构,4.1C语言的执行语句4.2顺序结构4.3选择结构4.4循环结构,Page2,4.1C语言的执行语句,C程序组成,Page3,4.1C语言的执行语句,C语句的分类:表达式语句空语句复合语句控制语句,Page4,表达式语句,赋值语句:变量=表达式;功能:将“=”右侧表达式的值赋给左侧变量的值。函数调用语句;例如putchar(ch);,Page5,空语句和复合语句,空语句:仅由一个分号构成的语句,在执行时不产生任何指令。复合语句:用一对花括号将多个语句括起来构成一个整体。注意:1)复合语句中的每个语句必须以分号;结束但右花括号后不能有分号2)复合语句中可以有自己的数据说明,Page6,控制语句,条件选择语句:if开关分支语句:switch当循环语句:while直到循环语句:dowhile计数循环语句:for中止本次循环语句:continue中止整个循环语句:break函数返回语句:return无条件转移语句:goto,Page7,顺序结构,顺序结构程序:由两个或两个以上的语句组成,先执行A操作,然后再执行B操作。传统流程图N-S流程图,Page8,顺序结构程序设计举例,例4.1输入任意两个整数,求它们的和及平均值。要求平均值取两位小数输出。#includeintmain()intnum1,num2;floatsum,aver;printf(Pleaseinputtwointegers:n);scanf(%d,%d,Page9,顺序结构程序设计举例,例4.2给定一个三位正整数,分别输出它的个位数、十位数和百位数。#includeintmain()intm,m0,m1,m2;printf(Inputanumber(100999):);scanf(%d,Page10,顺序结构程序设计举例,例4.4求方程ax2+bx+c=0的根。a、b、c由键盘输入,a0且b2-4ac0。#include#includeintmain()floata,b,c,d,x1,x2;printf(Inputa,b,c:);scanf(%f,%f,%f,Page11,4.3选择结构,C语言的选择控制结构语句有:if语句和switch语句if语句是用来判断所给定的条件是否满足,根据判定的结果(真或假)决定执行给定的某种操作之一。,Page12,if语句的形式1单分支结构,格式:if(表达式)语句执行过程:,Page13,if语句举例1,例输入两个实数,按升序输出两个实数。解法一:#includeintmain()floata,b;scanf(%f%f,单边条件(条件判断两次),Page14,if语句的形式2双分支结构,格式:if(表达式)语句1else语句2执行过程:,Page15,if语句举例1,例输入两个实数,按升序输出两个实数。解法二:#includeintmain()floata,b;scanf(%f%f,双边条件(条件判断一次),Page16,if语句举例1,解法三:#includeintmain()floata,b,t;scanf(%f%f,单边条件(条件判断一次),3个语句用花括号括起来构成1个复合语句,若不使用复合语句,则可用t=a,a=b,b=t;,Page17,if语句的形式3多分支结构,格式:if(表达式1)语句1elseif(表达式2)语句2elseif(表达式3)语句3:elseif(表达式n)语句nelse语句n+1,入口,出口,Page18,if语句举例2,例根据所输入的x之值,求解法一:用多分支if语句#includeintmain()intx,y;scanf(%d,1(x0)y=0(x=0)-1(x=a,注意:case后面应为字符常量A、B等,不能为变量A、B等。,Page29,switch语句举例(无break语句的效果),例4.9:输入成绩等级,打印出百分制分数段。#includeintmain()charc;printf(Pleaseenteracharn);c=getchar();c=(c=a,去掉break语句,程序运行后,从键盘上输入b,则程序运行的顺序和结果如下:,808970796069=A,Page35,例2:计算分段函数。课本P73例4.8#includeintmain()floatx,y;scanf(%f,Page36,例3:从三个数中找出最大的数。思路一:先将a、b进行比较,将二者之中的大数放入变量a中,小数放入b中,这样a中就是a、b中的大数;再将变量a与变量c进行比较,将a,c中的大数放到a中,小数放到c中,这样,变量a中存放的就一定是三个数中的最大数。思路二:先假设a为最大数max;将b与max进行比较,若bmax,则max改为b;将c与max进行比较,若cmax,则max改为c.于是变量max中存放的就是三个数中的最大数。,Page37,解1)#includeintmain()inta,b,c,t;scanf(%d,%d,%d,解2)#includeintmain()inta,b,c,max;scanf(%d,%d,%d,Page38,例:对三个数进行升序排序思路:1.先将a、b进行比较,将二者之中的较小者放入变量a中,较大者放入b中,这样a中就是a、b中较小数;2.再将变量a与变量c进行比较,将a、c中的较小者放到a中,较大者放到c中,这样,变量a中存放的就一定是三个数中的最小数;3.最后将b和c进行比较,将二者之中较小者放入变量b中,较大者放入变量c中,就完成了对三个数的升序排序。也就是说,对三个数进行排序,需要进行3次比较。,Page39,#includeintmain()inta,b,c,t;scanf(%d,%d,%d,Page40,例4输入三角形三边长,求三角形面积。课本P82例4.14#include#includeintmain()floata,b,c,s,area;scanf(%f,%f,%f,Page41,例5:判断闰年算法,闰年的条件:能被4整除,但不能被100整除;能被100整除,又能被400整除。,否,输出year不是闰年,是,输出year是闰年,输出year不是闰年,输出year是闰年,是,是,否,否,Page42,解1)用多边if语句实现#includeintmain()intyear;scanf(%d,Page43,解2)多边if语句+用变量leap标识是否闰年#includeintmain()intyear,leap;scanf(%d,Page44,解3)直接用复合条件判断闰年#includeintmain()intyear,leap;scanf(%d,Page45,例6计算器程序。用户输入运算数和四则运算符,输出运算结果。当输入运算符不是“+”、“-”、“*”或“/”时提示出错,当输入除数为0时也提示出错。课本P80例4.12#include#includeintmain()floata,b;charc;scanf(%f%c%f,Page46,例7求一元二次方程的根算法。课本P85例4.17,Page47,#includeintmain()floata,b,c,disc,x1,x2,real,imag;scanf(%f,%f,%f,表示a等于0,表示disc等于0,注意a=0这种表示不够准确!,Page48,4.4循环结构,C语言的循环结构共有下列三种:while语句do-while语句for语句,Page49,4.4循环结构,举例求1100之间所有整数的和,当型循环,直到型循环,Page50,while语句,格式:while(表达式)语句,注:循环体可能一次也不执行。,Page51,while语句,例4.18用while语句求1100之间整数和#includeintmain()inti,sum;sum=0;i=1;while(i=100)sum=sum+i;i+;printf(i=%d,sum=%dn,i,sum);return0;,语句sum=sum+i;和语句i+;能否改变位置?程序的哪些地方应作相应的改动?,如果在while语句之前对变量sum赋初值为1,是否可以?程序的哪些地方应作相应的改动?,循环,Page52,while语句,例4.19根据公式计算圆周率的值。部分程序:inti=1,n;doublepi=0;scanf(%d,Page53,do-while语句,格式:do语句while(表达式);,注:循环体至少执行一次。,用do-while语句实现直到循环,Page54,do-while语句,例4.18用do-while语句求100以内正整数的和#includeintmain()inti,sum;sum=0;i=1;dosum=sum+i;i+;while(i1e-6);pi=pi*4;printf(pi=%10.6fn,pi);,Page56,for语句,格式:for(表达式1;表达式2;表达式3)语句,实质是当型循环!,Page57,for语句,在for语句中,通常表达式1用来为循环变量赋初值;表达式2一般用来设置循环条件;表达式3一般用于循环变量增值。for语句的最常用格式:for(循环变量赋初值;循环条件;循环变量增值)语句,Page58,for语句,例4.18用for语句求1100之间的整数之和#includeintmain()inti,sum;sum=0;for(i=1;i=100;i+)sum=sum+i;printf(i=%d,sum=%dn,i,sum);return0;,Page59,for语句,例4.26统计从键盘输入一行字符的个数,以回车结束。#includeintmain()intn;charc;printf(Inputastring:n);for(n=0;(c=getchar()!=n;n+);printf(%d,n);return0;,Page60,for语句,例4.27编程输出“斐波那契数列”的前20项。#includeintmain()inti,x1=1,x2=1;for(i=1;i=10;i+)printf(%10d%10d,x1,x2);if(i%2=0)printf(n);x1=x1+x2;x2=x2+x1;return0;,Page61,for语句的灵活使用,循环之前的赋初值语句可以放在表达式1中,中间用逗号间隔。表达式3可缺省(但其前的分号不能省略),将表达式3作为语句放到循环体的末尾。循环体中的内容可以放在表达式3中,但要在for语句圆括号的后面加一个分号。表达式1、表达式3可同时缺省,但表达式2前后的分号都不能省略。,Page62,for语句的灵活使用,表达式2可缺省,放在循环体之中,但for语句中的两个分号都不能省略;且判断与退出放在循环体中。inti,sum;sum=0;for(i=1;i+)if(i=100)sum=sum+i;elsebreak;/*退出循环*/printf(i=%d,sum=%dn,i,sum);return0;,Page63,几种循环的比较,1)while循环、dowhile循环、for循环都可以用来处理同一个问题,一般可以互相代替。2)在while和do-while循环的循环体中,应包括使循环趋于结束的语句。3)用while和do-while循环时,循环变量初始化的操作应在while和do-while语句之前完成,而for语句可以在表达式1中实现循环变量的初始化。4)三种循环均可用break语句跳出循环,用continue语句结束本轮循环。5)for语句功能最强。,Page64,break语句和continue语句,break语句格式:break;功能:提前结束循环,从循环体中无条件跳转到循环语句后面执行。可用于switch语句和循环结构中。continue语句格式:continue;功能:结束本次循环,即在本次循环中,不再执行循环体中continue后面的语句。只能用于循环结构。,Page65,break语句的使用,例4.28将数字512表示成两个数的和,这两个数分别为15和13的倍数。#includeintmain()inti;for(i=1;i+)if(!(512-i*15)%13)break;printf(%d+%d=512n,i*15,512-i*15);return0;,!(512-i*15)%13)等价于(512-i*15)%13=0,Page66,continue语句的使用,例4.29输出100200之间所有能够被7或9整除的数。#includeintmain()inti,n=0;for(i=100;i=200;i+)if(i%7!=0),Page67,break与continue的区别,分析以下两个程序,程序一:#includeintmain()inti;for(i=1;i=10;i+)if(i%3=0)continue;printf(%3d,i);printf(n);return0;结果输出12457810,Page68,break与continue的区别,程序二:#includeintmain()inti;for(i=1;ik|m%i=0是结构化程序,Page73,循环嵌套,一个循环体中又包含了另一个完整的循环结构,叫做循环的嵌套。三种循环结构可以互相嵌套。循环嵌套的执行过程是:外循环执行一次,内循环执行一个全过程。,Page74,举例:输出一个图形,*,/*外循环控制输出图形的行数*/,#includeintmain()inti,j;for(i=1;i=4;i+)for(j=1;j=i;j+)printf(*);printf(n);return0;,Page75,举例:输出一个图形,/*外循环控制输出的行数*/,#includeintmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=i;j+)printf();for(k=1;k=3;k+)printf(*);printf(n);return0;,*,Page76,举例:输出一个图形,#includeintmain()inti,j,k;for(i=1;i=4;i+)for(j=1;j=4-i;j+)printf();for(k=1;k=2*i-1;k+)printf(*);printf(n);return0;,*,Page77,举例,例4.31计算s=1!+2!+3!+10!解1:#includeintmain()inti,n;floats,t;s=0;t=1;for(i=1;i=10;i+)t=t*i;s+=t;printf(”s=%.0fn”,s);return0;,t=1;for(j=1;j=i;j+)t=t*j;,解2:用双重循环实现外循环计算累加内循环求i!,Page78,循环结构程序设计举例,举例:累加、连乘算法统计个数数的分离穷举法判断一个数是否为素数辗转相除法求最大公约数方程求根求定积分,Page79,举例:累加、连乘算法,从键盘上输入10个整数,求总和及平均值,解1:#includeintmain()intx,i;floatsum=0,aver;for(i=1;i=10;i+)scanf(%d,Page80,举例:累加、连乘算法,解2:#include#defineN10/*数的个数用符号常量表示*/intmain()intx,i;floatsum=0,aver;for(i=1;i+)scanf(%d,i=N,N,Page81,举例:累加、连乘算法,从键盘上输入n个整数,求总和及平均值,n由键盘输入#includeintmain()intx,i,n;floatsum=0,aver;for(i=1;i+)scanf(%d,scanf(%d,i0)aver=sum/i;printf(sum=%.0f,aver=%.2fn,sum,aver);return0;,scanf(%d,scanf(%d,或for(;x!=-1;),x!=-1,若i=0说明没有输入,无需进行操作,Page83,举例:累加、连乘算法,求若干个整数的总和,要求总和不大于1000#includeintmain()intx,sum=0;while(sum=1000)scanf(%d,sum-x,Page84,举例:累加、连乘算法,例4.35计算多项式的值。floatsum,term,x;intn,k,sign;scanf(%d,%f,Page85,举例,例4.21猴子吃桃问题:猴子摘下了一堆桃子,第一天吃总数的一半多一个,第二天吃剩下的一半多一个,以后每天都吃前一天剩下的一半多一个,到第十天想再吃时剩一个,求第一天共有多少个桃子?#includeintmain()intk,x;k=1;x=1;while(k=9)x=(x+1)*2;k+;printf(Totalnumber=%dn,x);return0;,Page86,递推法总结,以上的算法采用了递推的方法,即在一个数的序列中,后一项值是前一项或前几项的基础上推算出来的。使用该方法的两个注意事项:1)确定初始条件或边界条件;2)找出递推公式。典型的例子包括求斐波那契数列,牛顿迭代法求方程的根等,Page87,统计个数,例4.38输入十个数,求出最小数和奇数、偶数个数。inti,min,odd=0,eve=0,x;for(i=1;i=10;i+)printf(Pleaseinputinteger%d:,i);scanf(%d,Page88,数的分离,例4.33输入132767之间的整数,把这个整数显示为一系列数字,每组数字都是用两个空格分开。例如,整数1234应该显示为:1234。inti,num,counter,temp;counter=1;printf(Enteraninteger:n);scanf(%d,Page89,数的分离,续上页while(counter)temp=1;for(i=1;i=counter-1;i+)temp*=10;printf(%3d,num/temp);num%=temp;counter-;printf(n);,Page90,数的分离,求出水仙花数,水仙花数是指一个3位数的个位数、十位数、百位数之和正好等于该数本身。,i=a3+b3+c3,Page91,数的分离,intmain()inti,a,b,c;for(i=100;i=999;i+)c=i%10;/*取出个位数*/a=i/100;/*取出百位数*/b=i/10%10;/*取出十位数*/if(i=a*a*a+b*b*b+c*c*c)printf(“%dt”,i);return0;,Page92,用穷举法解决问题,百钱买百鸡问题(出自算经,古代数学家张丘建):鸡翁一,值钱五;鸡母一,值钱三;鸡雏三,值钱一。百钱买百鸡,问鸡翁、母、雏各几何。变量cocks:存放鸡翁数量,取值020变量hens:存放鸡母数量,取值033变量chicks:存放鸡雏数量,取值0100有下列方程:cocks+hens+chicks=1005*cocks+3*hens+chicks/3=100,Page93,百钱买百鸡问题N-S图,Page94,百钱买百鸡问题的程序1,#includeintmain()intcocks,hens,chicks;for(cocks=0;cocks=20;cocks+)for(hens=0;hens=33;hens+)for(chicks=0;chicks=100;chicks+=3)if(cocks+hens+chicks=100,Page95,百钱买百鸡问题的程序2,仅用两重循环实现:#includeintmain()intcocks,hens,chicks;for(cocks=0;cocks=20;cocks+)for(hens=0;hens=33;hens+)chicks=100-cocks-hens;if(chicks%3=0,Page96,辗转相除法求最大公约数,求两个整数的最大公约数与最小公倍数。用辗转相除法求最大公约数,Page97,辗转相除法求最大公约数,intmain()inta,b,r;printf(“请输入2个整数”);scanf(“%d%d”,Page98,举例用二分法求一元方程的根,用二分法求非线性方程f(x)=x3+1.1x2+0.9x-1.4=0的根。基本思路:取区间两端点x1和x2,(1)若f(x1)、f(x2)符号相同,则无解。(2)若f(x1)、f(x2)符号相反,则在(x1,x
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025福建厦门集美区乐海小学产假顶岗校医招聘1人备考考试题库附答案解析
- 2025湖南岳阳新天地保安服务公司招聘总经理助理1人备考练习题库及答案解析
- 2025广西桂林兴安县乡镇所属事业单位直接考核招聘“三支一扶”服务期满人员4人笔试参考题库附答案解析
- 中国华电战略发展研究中心招聘4人备考考试题库附答案解析
- 工程质量管理控制论文
- 2025河南中航光电科技股份有限公司招聘备考考试题库附答案解析
- 中国水利水电科学研究院岩土工程研究所科研助理招聘2人备考考试题库附答案解析
- 2025北京市房山区燕山教育委员会所属事业单位第三批招聘教师13人备考考试题库附答案解析
- “梦想靠岸”招商银行沈阳分行2026校园招聘备考考试题库附答案解析
- 中暑预防教育
- 2025呼和浩特粮油收储有限公司招聘18名工作人员考试参考题库及答案解析
- EYSkyworth供应链SCM流程规划含现状分析与调研访谈记录
- 三年级健康饮食教案
- 混合信号芯片测试验证-洞察及研究
- 5.1 延续文化血脉(课件) 2025-2026学年度九年级上册 道德与法治 统编版
- aeo认证管理制度
- 新22J01 工程做法图集
- 六年级上册数学课件-2.7 倒数的认识丨苏教版 (共23张PPT)
- 江苏省日照小时数
- GB∕T 21448-2017 埋地钢质管道阴极保护技术规范
- 三旺交换机环网调试步骤
评论
0/150
提交评论