资源描述
第4章C语言程序结构,C语言源程序由多个函数构成,其中有且只有一个main函数,应用程序的入口点。函数由函数头和函数体组成。函数体由声明和语句组成。C中语句有,表达式语句函数调用语句空语句复合语句控制语句,C语言语句,表达式语句表达式;函数调用语句printf(“helloworld”);复合语句:用括起的多条语句语句1;语句2;空语句;控制语句条件语句:if语句,switch语句循环语句:dowhile语句,while语句,for语句转向语句:break语句,continue语句,goto语句,return语句,语句是c+程序中最小的可执行单元。一条语句由一个分号结束。语句可以很简单,也可以很复杂。,复合语句也称为块(语句块),在语法上起一个语句的作用。对单个语句必须以“;”结束,对复合语句,其中的每个语句仍可以“;”结束,而整个复合语句以“”结束。,4.1顺序结构,按语句顺序逐条执行例:输入两个整数,输出它们的和,voidmain()intx,y,sum;x=10;y=20;sum=x+y;printf(“%d+%d=%d”,x,y,sum);,A,B,4.2选择结构,4.2.1if语句(2个分支选择)语法形式if(表达式)语句else语句说明:表达式一般为关系表达式或逻辑表达式。但并不限于这两种表达式,只要表达式类型是任意数值类型均可。(值为0代表假,值为非0代表真)语句为内嵌语句,可以是简单语句、复合语句、空语句,控制语句。,条件,A,B,Y,N,可选,例1:输入一个整数,输出其绝对值例2:对输入的两个正整数求和,否则提示输入错误。例3:输入两个整数,输出其中较大的数例4:输入三个整数,判断这三个整数能否作为三角形的三条边,例1:输入一个整数,输出其绝对值#includevoidmain()inta,b;scanf(%d,例2:对输入的两个正整数求和,否则提示输入错误。#includevoidmain()inta,b,sum;scanf(%d%d,if语句嵌套if语句中,如果内嵌语句又是if语句,就构成了嵌套if语句。,if(条件)语句else语句,if(条件)语句else语句,if(条件)语句else语句,if(条件1)语句elseif(条件2)语句elseif(条件3)语句else语句,例1:将成绩转换为ABCDE五级分制例2:输入三个整数,输出其最大值,#includevoidmain()inta,b,c,max;scanf(%d%d%d,#includevoidmain()inta,b,c,max;scanf(%d%d%d,#includevoidmain()inta,b,c,max;scanf(%d%d%d,例2:输入三个整数,输出其最大值(三种解法),if语句嵌套注意事项else总是与最近的if语句配对if或else后是多条语句,必须用括起,if(a=0)if(b=1)a+;elsea-;,if(a=0)if(b=1)a+;elsea-;,if(a=0)if(b=1)a+;elsea-;,if(x6)if(y6)System.out.print(“x=“+x);System.out.print(“y=“+y);,if(x6)if(y6)System.out.print(“x=“+x);System.out.print(“y=“+y);,4.2.2switch语句(多个分支选择)语法形式为:switch(表达式)case常量表达式1:语句序列1case常量表达式2:语句序列2case常量表达式n:语句序列ndefault:语句序列说明:表达式值为整型或字符型常量表达式值与条件表达式同类型,只能是常量,且各个值不能相同default部分可省略每个case分支可以有多条语句,可以不用执行每个case语句是一个入口点可以使用break;跳出switch语句,例1:输入星期的数值,输出对应的英文单词例2:输出对应月份的天数程序见书p48,49,4.3循环结构,提供重复处理的能力,当某一特定条件为true时,循环语句就重复执行,并且每循环一次就会测试一下循环条件,如果为false则循环结束,否则继续循环。C提供了三种支持循环结构的语句:while语句dowhile语句for语句三者可以完成类似的功能,不同的是它们控制循环的方式。,4.3.1while语句,语法形式while(表达式)语句说明表达式一般是关系表达式或逻辑表达式,但不局限于此。循环条件表达式值为非0表示真,循环继续,0表示假,循环停止。语句:简单语句,控制语句,复合语句,空语句。,while语句的执行流程图,求表达式的值,执行循环体语句,表达式的值为真?,是,否,例1:求和1+2+100例2:输入一个正整数,求其阶乘。(p50)例3:求两个正整数的最大公约数。(p51),4.3.2do-while语句,语法形式:do语句while(表达式);与while语句不同的是do循环中的至少会执行一次,而while语句当条件第一次就不满足时,语句一次也不会被执行。,否,是,do-while语句的执行流程图,例1:输入一个正整数,求其阶乘。(p52)例2:求和1+2+100,4.3.3for语句,语法形式for(表达式1;表达式2;表达式3)语句说明表达式1:初值表达式,初始化循环控制变量并表达式2:循环条件表达式,判断循环是否进行,非0为真,执行循序,0为假,终止循环。表达式3:修改循环控制变量,改变循环条件,例1:输入一个正整数,求其阶乘。例2:求和1+2+100。,for循环语句头的变化,for(表达式1;表达式2;表达式3)语句,三个表达式都可选,但“;”不能省。表达式1和表达式3都可以是“,”分隔的表达式列表逗号运算符:,逗号表达式:用逗号将若干个表达式连起来组成的表达式。例如已知intn,i;i=0,n=1逗号表达式运算:从左到右依次求出各表达式的值,并将最后一个表达式的值做为整个逗号表达式的值。,例1:求和1+2+100。(p54),循环语句小结,1、循环语句要素循环控制变量、循环终止条件、循环体循环控制变量赋初值每次循环更改循环控制变量2、三种循环语句比较三种语句可以互相替代循环次数确定:for语句循环次数不定:至少执行一次循环体do-while语句循环体可能一次都不执行while语句,循环语句嵌套,例:输出乘法99表(p58),#includevoidmain()inti,j,k;for(i=1;i=9;i+)for(j=1;j=i;j+)k=i*j;printf(%2d*%2d=%2d,i,j,k);printf(n);,循环语句与分支语句嵌套,例:显示ASCII码为30到90的所有字符(p57),4.3.4break和continue语句,1、break语句语法形式break;用于switch语句:跳出switch语句用于循环语句:终止循环,跳出循环语句2、continue语句语法形式continue;用于循环语句:跳过本次循环,开始下一次循环(下一次循环是否执行仍然取决于循环条件的判断。),例1:读取输入的数据,并求和,当输入数据为0时,结束。(p59)例2:求满足条件12+22+n2=1000的最大n值(p59)例3:输出200以内所有不能被7整除的数(参考p60,61例4-16,4-17),程序设计,分析问题,确定解决方法(数学模型,算法思想)确定数据结构(确定要处理的数据,以及数据的组织)确定算法,描述算法(确定如何处理数据,使用哪些语句,操作流程是什么编写程序,算法描述,算法描述方法程序流程图N-S图PAD图伪代码,图形表示,自然语言表示,程序流程图,三种基本成分:加工步骤逻辑条件控制流,A,B,A,B,p,真,假,p,A,真,p,A,真,假,假,A,B,G,i=,=a,=b,=c,开始,输入n,s=s+aa=a+1,an,Y,N,输出s,结束,例:输入整数n,求小于n的所有整数之和,分析:数学模型:sum=1+2+3+n算法思想:循环累加需处理的数据:n,所求的和累加的循环控制变量算法描述,s=0,a=0,PAD图,PAD图所描述的程序结构十分清晰。图中最左边的竖线是程序的主线,即第一层控制结构。随着程序层次的增加,PAD图逐渐向右延伸,每增加一个层次,图形向右扩展一条竖线。PAD图中竖线的总条数就是程序的层次数;,S1,S2,S1,S2,Q,Q1,Q2,Qn,s1,s2,sn,WHILEQ,S,dowhileQ,S,c1,c2,cn,S1,S2,Sn,switche=,for,S,例:输入整数n,求小于n的所有整数之和,分析:数学模型:sum=1+2+3+n算法思想:循环累加需处理的数据:n,所求的和累加的循环控制变量算法描述,输入n,whilean,s=s+a,a+,输出s,a,s初始化,开始,结束,例1:输入一个整数n,求2n之间的所有素数(p63)例2:已知公式ex=1+x+x2/2!+xn/n!输入x与n的值,求ex(p61),例1:输入一个整数n,求2n之间的所有素数分析:数学模型:求素数:n%2!=0in;i+,t=xpower/fact,s=s+t,xpower=xpower*xfact=fact*i,开始,结束,输出s,作业,p73习题3,8,
展开阅读全文