《C语言程序基本结构.pps》由会员分享,可在线阅读,更多相关《C语言程序基本结构.pps(71页珍藏版)》请在三一办公上搜索。
1、第 二 章程序基本结构,目 录,控制语句,2.1 分支结构,2.2 关系运算和逻辑运算,2.3 循环结构,2.4 break和continue语句,2.5 语句标号和goto语句,实验2 5题改进:main()float a,b,c,s,area;scanf(%f%f%f,分支体,观察下面分支程序,模仿编程。main()float a,b;printf(Please input a:);scanf(%f,预备学习1,单分支,分支体由一条语句构成时,大括号可省略。,观察下面分支程序,模仿编程。main()float a,b;printf(Please input a:);scanf(%f,预备学
2、习2,双分支,从键盘上输入两个整数,输出较小的那个数。,预备练习1,预备练习1,程序源代码:main()int a,b,min;printf(Please two data:);scanf(%d%d,if语句的三种形式(1),格式1:if(表达式)分支体;,格式2:if(表达式)分支体1;else 分支体2;,else后没有表达式,括号后没有分号,分支体里可以包含多条程序语句,用一对 扩起来,做为整体。这种由 扩起来的语句叫做复合语句。括号之外不再加“;”else必须和if配对使用,不能单独出现。,知识点如何表达条件选择条件通常是关系表达式或逻辑表达式。放在括号中。逻辑运算符:&、|、!表达式
3、值为0代表条件不成立(假)表达式值为非0代表条件成立(真)例如:100a999 100a&a999,if语句扩展 表达式可为任意表达式,只要值为0就认为条件不成立,值为非0就认为条件成立。例如:if(1)if(-4+3)if(a)flag=3;if(flag),算术运算优先级高于关系运算,关系运算优先级高于逻辑运算。逻辑运算符优先级:!、&、|参与逻辑运算的数据理解:值为非零即是真,值为零即是假。例如:3&0 结果为0;7|0 结果为1;!800 结果为0,关系表达式的运算,多分支结构,表达多种情况的选择常用if语句嵌套实现规则的多分支语句可用switch语句实现,if 语句的三种形式(3),
4、格式3:if(表达式1)语句序列1;else if(表达式2)语句序列2;else 语句序列3;,例3 设有分段函数:-1(x0)编一个程序,输入x,输出y。,简单算法流程图,#include main()int x,y;scanf(“%d”,if 语句嵌套,注意:if语句或ifelse语句虽然书写在多行,但语法逻辑上是一条语句。else总是与它上面最近的那个if 配对。必要时可加大扩号“”,改变匹配关系。,if 语句嵌套,例如:if(表达式1)if(表达式2)语句序列1;else 语句序列2;if(表达式3)语句序列3;else 语句序列4;,if与else的配对关系并不依赖于书写程序时用户
5、根据程序的层次性逐渐内缩的梯形结构,而else总是与它上面最近的那个if 配对。,举例,求一元二次方程ax2+bx+c=0的解,流程图见教材2.4,本例题学到一个实数的比较方法:实型数据,由于采用浮点数的形式存储于计算机中,在存储与读取的过程中有精度损失,就是说实数经过存储后再读取出来,就不能精确等于原来的数值了。这样一个实数与其他数进行相等比较时,不能用=表达相等关系,例如实数a=0是不能正确比较的。而应该用它与其他数相减的差的绝对值在某一个小数范围内来表示近似相等。如本例中的fabs(a)=1e-6,表示如果a小于10-6,就算是近似为0了。,分支结构编程练习从键盘上输入一个小于10000
6、的数,判断它是几位数,并输出判断结果。,switch(多分支)语句,使用形式:switch(表达式)case 常量1:语句序列1;break;case 常量2:语句序列2;break;case 常量n:语句序列n;break;default:语句序列n+1;,?,?,观察语法格式,说明:switch 语句的执行部分是由若干个case语句和一个可缺省的default语句组成的复合语句,整个要用大括号括起来.语句序列1n+1中,如果某个语句是由两个以上的语句组成,可以不用大括号。switch后的表达式和case后的常量值可以为任何类型,但一般情况下为整型和字符型。,当表达式的值与case后的常量值
7、相等时,则执行该case后的语句序列。执行完后退出switch语句,跳转到整个switch语句之后的下一个语句执行。如果所有的case语句的常量值与switch之后的表达式不匹配,则执行default之后的语句序列。各case语句之后的常量值不能相同。如果某个case语句最后的break语句被省略,则执行完该case语句之后,系统则会继续执行下一个case语句。多个case语句可以共用一组执行语句,【分析】成绩的可能取值是多种多样的,但case后面的常量值只能是一个具体的值,不能表达为一个值的范围;因此需将原成绩值进行某种运算转换为相应的一个具体值,这样才能进行case的匹配。请大家思考?,例
8、5 在学生成绩管理中,经常要将成绩的百分制转换成对应的等级制。90分以上为A等,80-89为B等,70-79为C等,60-69分为D等,其余为E等。编制程序,根据输入的百分制成绩,输出对应的等级。,提示:将原成绩值与10做整除运算,可得到一个具体值。,#include main()int score,temp;printf(“Input score of student:”);scanf(“%d”,参考程序,条件运算符,简单的条件选择可以使用条件运算符。格式:表达式1?表达式2:表达式3例如:ab?a-b;b-a;条件运算符的优先级高于赋值运算符,低于关系运算符和算术运算符。例如:max=ab
9、?a:b详细语法见P38页。,例:输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。main()char ch;scanf(“%c”,小节分支语句使用形式:单分支(if)双分支(ifelse)三分支和多分支(用if语句嵌套实现)规整的多分支形式:switch语句,循 环 语 句,2.2,2.2 循环语句,while语句do while 语句for语句循环嵌套,实验2 5题改进:main()float a,b,c,s,area;scanf(%f%f%f,循环体,随机次数循环,观察下面循环程序,模仿编程。求全班同学成绩的平均分。main()float a,sum=0;int i,num;
10、scanf(“%d”,预备学习,程序lianxi2.c,固定次数循环,循环结构比较适合解决多次重复执行相同的操作运算。分析以上这句话,用循环结构来解决问题的时候我们需要关注哪些?1.多次重复这就需要考虑一个循环的执行次数如何控制?2.相同的操作运算这就是循环体,就是循环控制结构内的操作语句。,循环结构的适用情况,1、for(循环变量=初值;循环变量=终值;循环变量增值)循环体语句 2、while(循环条件)循环体语句 3、do 循环体语句 while(循环条件);,三种C语言循环控制结构语句,说明:三种语句的功能大体上是一样的,都能实现循环结构控制,只是具体的语法结构不同,编程时有些细节处理不
11、同。,说明:当循环体由若干语句组成时,应用大括号括起来。,注意分号,从键盘上输入10个整数,输出每个数的平方。使用for语句编程。,编程练习,3分钟,参考程序:main()int a,i;printf(input an integer:);for(i=1;i=10;i=i+1)scanf(%d,补充:自增运算符 自减运算符 例如:i+、+i i-、-i例如:for(i=1;i=10;i+)scanf(%d,扩展知识,复合的赋值运算符:i+=1;i+=2;类似的还有:i*=2;i-=2;i/=3;i=3;等,变量的自增语句有三种:i=i+1;i=i+2;i+;i+=1;i+=2;,例如:for(
12、i=10;i=1;i-)for(i=3;i10)i=i-10;,补充:循环控制过程中,步长的修正是灵活多样的,可正、可负;步长可为1,也可为2、3、10等。,main()float a,sum=0;int i,num;scanf(“%d”,i=1;while(i=num)printf(input score:);scanf(%f,i+;,循环语句转换,main()float a,sum=0;int i,num;scanf(“%d”,循环语句转换,i=1;do printf(input score:);scanf(%f,使用while和dowhile循环,注意:1、赋初值:循环变量 i=1;累乘
13、之积 m=1;2、循环变量要修正值,i+;或i-;否则造成死循环。,Ctrl+Break结束死循环,总结,使用while语句或dowhile语句实现随机次数的循环举例。,【例2.12】输入一个字符,如果是大写字母,转换为小写,如果不是则不转换。输入“0”结束程序。#include void main()char ch;while(1)ch=getchar()if(ch=0)break;ch=(ch=A,永真循环。表面上看是死循环,实际在循环体里有if语句进行条件判断,可以执行到break语句退出循环。,总结,循环情况分类:固定次数的循环;(适合用for语句实现)随机次数的循环。(适合用whil
14、e和dowhile语句),举例:固定次数:for(i=100;i=999;i+)随机次数:while(ch!=13),以上只是常用方法,不绝对,例如也可以用for语句实现随机次数的循环;也可用while 和do while实现固定次数的循环。,#include void main()char ch;for(;(ch=getchar()!=0;)ch=(ch=A,说明:如果在for语句之前已经给循环变量赋初值,则for语句的循环变量赋初值部分可以省略。但其后得分号不省略。例:i=1;for(;i=10;i+)m=m*i;也可以将循环变量修正值的工作纳入到循环体中去做.例:for(i=1;i=10
15、;)m=m*i;i+;第二部分“循环条件表达式”不能缺省,否则将陷入死循环。,也可以省略for语句的第一和第三部分例:i=1;for(;i=10;)m=m*i;i+;如果有多个循环变量赋初值,或多个循环变量值要修正,应在各变量之间用逗号隔开。例:for(i=1,j=10;i=j;i+,j-)k=i+j;,main()int n,max;scanf(“%d”,编程练习,从键盘输入若干整数,以0结束,判断并输出其中最大的数。,分析:循环次数随机。循环条件控制 while(n!=0)求最大值的算法:反复比较,设定一个最大值变量max,则 if(maxn)max=n;循环语句构成:比较;输入;循环开始
16、前的处理工作:变量n的初值?max的初值?,main()int n,max;scanf(“%d”,main()int n,max;scanf(“%d”,比较两种循环实际执行过程中的不同,while循环有可能一次也不执行,而do while循环至少要执行一次。,自学P53“几种循环的比较”,2.4 break语句和continue语句,break语句功能:提前结束循环。常和if语句搭配使用,满足某种条件下退出循环。,例:从键盘上输入一个数,判断这个数是否是素数。素数是除了1和自身不能被任何数整除的数。,分析:循环的初始和终止条件。i=2;(i=m?)例题程序:sushu.c,#include m
17、ain()int i,m,k;scanf(%d,continue语句功能:结束本次循环,开始下一次循环,整个循环未结束。,例如:while(条件)语句1;if(条件)contine;语句3;语句4;,main()int i;for(i=1;i=6;i+)if(i%2)printf(#);continue;printf(*);printf(n);,阅读程序,请说出该程序段的功能?,循环的嵌套,在一个循环体内又有一个循环语句的循环结构,则称为循环嵌套 dowhile、while、for三种循环方式可以相互构成循环嵌套,循环嵌套执行过程:外循环每执行一次,内循环执行整个一遍,即n2次。循环次数:内外
18、循环次数的乘积:n1n2,循环的嵌套,例如:for(i=1;i=n1;i+)for(j=1;j=n2;j+).,举例,打印一张九九表,#include main()int i,j;for(i=1;i=9;i+)for(j=1;j=i;j+)printf(%4d,i*j);printf(n);,例:求 3100之间的全部素数。,分析:1、外层循环,n从3到100。2、内层循环,i从2到n/2或 sqrt(n)例:sushu-2.c,素数编程技巧探讨:1、可否减少循环次数?2、标志变量的使用。sushu-1.c,例:图形编程。,分析:1、外层循环:行数,i从1到6 2、内层循环:每行空格数和每行“
19、*”个数。空格数:*号数:,*,j从1 到 6-i,j从1到2*i-1,int i,j;for(i=1;i=6;i+)for(j=1;j=6-i;j+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);,循环的书写格式和结构怎样?外循环的循环体是什么?程序段实际运行还缺少什么?,int i,j;for(i=1;i=6;i+)for(j=1;j=6-i;j+)printf(“”);for(j=1;j=2*i-1;j+)printf(“*”);printf(“n”);,图形编程的统一规律:1、两重循环嵌套,外循环控制图形的行数,内循环控制图形的列数和空格数;2、内
20、循环完毕通常有一个换行printf(“n”);3、内循环的次数要观察图形的形状,通常和外循环变量i具有一定的运算规律。4、内循环图案的起始位置可用空格控制,因为具有一定的递变规律,通常也用循环实现。,图形编程补充,Sy3-4.c,无条件转移语句,goto语句是一种使程序的流程无条件转移的语句使用语句的形式为:goto 语句标号语句标号是由用户自行定义的(由字母、数字、下划线组成。且第一个字符必须为字母或下划线),跳转到的那条语句的语句标号和该语句之间用冒号分开。例如:label:printf(“No resultn”);goto 语句的功能是无条件地跳转到语句标号所指定的本函数内的那条语句。g
21、oto.c,1、三种循环语句的语法格式2、固定次数的循环如何设计?随机次数的循环如何设计?2、break、continue语句的功能3、循环嵌套。4、经典例题:判断素数、求最大/最小值、水仙花数、数列、图形编程。,总结,编程练习:从1开始做自然数的累加,当其累加和超过1000时,共计累加了多少数?当时的累加和是多少?,例:“猴子吃桃”猴子第一天摘了若干个桃子,当即吃了一半,还不过瘾,又多吃了一个。第二天又将剩下的桃子吃了一半,又多吃了一个。以后每天都吃掉前一天剩下的一半零一个。到第十天想吃时,只剩下一个桃子了。问第一天共摘了多少桃子?,分析:循环10天,day从 10 循环到 1。设x1为前一
22、天桃子数,设x2为第二天桃子数,则x2=x1/2-1,所以 x1=(x2+1)*2。每次循环:x1=(x2+1)*2;x2=x1,举例 2-9.c,数列之和,加到该项数小于指定的detax值为止,编程练习2-5,举例,输入数据合法性检验问题例:从键盘上输入一个数,如果是三位数,则判断它是否是水仙花数,如果不是则让用户重新输入。,本章学习说明,学到程序控制结构这一部分,是编程能力提高最重要的阶段。此时的学习,应以主动思维为主,自己动手来,尽量不要模仿参考别人的程序,这样才能一点一点的使自己的思维能力得到锻炼。如果参考别人的程序或经验,一定要将程序读懂了,理解别人的编程思想,然后将编程思想拿过来,为我所用,绝不是将别人的程序照搬过来。编程一定要注意题目要求,必须完全符合题目要求的程序才是正确的程序,不能随意添加或减少程序功能。,