




已阅读5页,还剩44页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第四章C语言程序的基本控制结构,C程序构成:文件函数语句序列。语句:C语言中描述计算过程的最基本单位。由分号;结束。结构化程序设计方法:程序语句序列由三种基本结构(顺序、分支、循环)构成,结构清晰、可读性强。,第四章C语言程序的基本控制结构,一、顺序结构按书写的先后顺序执行语句。,4.1程序的三种基本结构,三、循环结构在一定条件下反复执行某些语句,直到这个条件不成立为止。,语句1,语句3,语句2,二、分支结构按照当时的某个条件决定是否执行某些语句。,条件,语句,语句2,条件,语句1,n,y,y,n,初始化语句,条件,修改语句,工作语句,初始化语句,条件,工作语句,修改语句,y,n,n,y,复合语句:多个语句用花括号扩起来组成的语句。目的是将这多个语句看成是一条语句。,4.2复合语句,注意:内部各条语句还是以分号结尾,结尾的右花括号后不加分号。,复合语句的一般形式:说明部分,例:inti,j;i=s;j=i+;printf(“%d,%d”,i,j);,一、赋值语句赋值表达式后加一个分号。1、简单赋值语句形式:=;例如:a=2;b=3*5+7;,4.3顺序结构的程序设计,3、复合赋值语句形式:;例如:i*=y+2;a%=10;,2、多重赋值语句形式:=.=;例如:i=j=k=n+1;a=b=c=5;,赋值语句的功能:将变量和表达式进行指定的运算后,将获得的值赋予左边的变量,目的是得到一个计算结果。,【例4.1】赋值语句使用举例(输入三角形三边的长度,求面积并将面积值输出)。海伦公式:假设有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得。算法分析:而公式里的p:,需要5个实型变量,调用求平方根函数,结果赋给一个变量,,实参使用表达式,求出边长和的一半,4.3顺序结构的程序设计,#include#includemain()floata,b,c,p,s;a=3.0;b=4.0;c=5.0;p=a+b+c;p/=2;s=sqrt(p*(p-a)*(p-b)*(p-c);printf(“s=%7.2f,s);运行结果如下:s=6.00,4.3顺序结构的程序设计,二、顺序结构程序设计举例【例4.2】编写一个程序,从键盘输入三位整数,将它们逆序输出,例如输入127,则输出721。,输入一个三位的整数,(一个变量存放),顺序输出个位、十位、百位,百位=X/100,十位=X/10-百位*10,个位=X-十位*10-百位*100,(需三个变量),算法分析:,4.3顺序结构的程序设计,#includemain()inta,i,j,k;printf(Entera:n);scanf(%3d,4.3顺序结构的程序设计,运行情况如下:Entera:127721,【例4.3】编写程序求出任一输入字符的ascii码。字符在内存存放的是它的ascii码(字符型和整型可以混合运算或者字符型可按整型输出),所以将它按整数输出即可。,#includemain()charc;printf(Enterthevalueofc:);scanf(%c,运行情况如下:Enterthevalueofc:aa:97,4.3顺序结构的程序设计,【例4.4】交换两个变量的值。设变量a、b均为整型变量,编写一个程序,输入a、b的值,并显示,然后交换a、b的值,再次显示。算法分析:,4.3顺序结构的程序设计,main()inta,b,t;printf(nEnterthevalueofaandbn);printf(a,b=);scanf(%d,%d,运行情况如下:Enterthevalueofaandba,b=2,7,输出:a=2,b=7changeda=7,b=2,4.3顺序结构的程序设计,三种条件转移语句:1、if语句2、ifelse语句3、switch语句,4.4分支结构(选择结构),一、if语句if语句的一般形式:if(表达式)语句;表达式通常为条件表达式或逻辑表达式。if语句中的语句只能是一条语句,如果需要多条语句则使用复合语句。编写程序时使用缩进使结构清晰。,【例4.5】输入一个整数,若是3的倍数,则显示“ok”。#includemain()inta;scanf(%d,a%3=0,printf(“ok”),0(不成立),1(成立),4.4分支结构(选择结构),#includemain()charch;ch=getchar();if(ch=A,ch=A例如:if(score=90)grade=A;elseif(score=80)grade=B;elseif(score=70)grade=C;elseif(score=60)grade=D;elsegrade=E;,4.4分支结构(选择结构),三、条件分支的嵌套在分支的语句部分还可以出现分支语句,这样就形成了分支的嵌套(多分支结构),构成复杂的逻辑结构。,表达式1,非零(成立),零(不成立),语句2,表达式2,语句1,非零(成立),零(不成立),语句4,表达式3,语句3,非零(成立),零(不成立),4.4分支结构(选择结构),if(表达式1)if(表达式2)语句1;else语句2;elseif(表达式3)语句3;else语句4;,if(表达式1)语句1;elseif(表达式2)语句2;elseif(表达式3)语句3;else语句4;,表达式3,表达式2,表达式1,语句4,语句1,语句2,语句3,非零(成立),非零(成立),非零(成立),零(不成立),零(不成立),零(不成立),4.4分支结构(选择结构),Y=,-10(x-1.0),-1(-1.0x0),1(0x1.0),10(x1.0),X0,零(不成立),Y=-1,X-1.0,Y=-10,非零(成立),零(不成立),Y=10,X1.0,Y=1,非零(成立),零(不成立),if(x0)if(x-1.0)y=-10;elsey=-1;elseif(x1.0)y=1;elsey=10;,非零(成立),4.4分支结构(选择结构),【例4.9】计算下列分段函数,x的值由键盘输入。,X1.0,X0,X-1.0,Y=10,Y=-10,Y=-1,Y=1,if(x-1.0)y=-10;elseif(x0)y=-1;elseif(x1.0)y=1;elsey=10;,if(x-1.0)y=-10;elseif(x=0,4.4分支结构(选择结构),switch语句的一般形式:switch(表达式)case常量表达式1:语句组1;break;case常量表达式2:语句组2;break;.case常量表达式n:语句组n;break;default:语句组n+1,表达式,语句组n,语句组2,语句组1,=值1,=值2,=值n,语句组n+1,=其他,4.4分支结构(选择结构),四、switch语句switch语句可直接处理多分支选择,不使用分支嵌套,简化程序结构。,说明:常量表达式值必须互不相同,否则就会出现矛盾的现象。case与default的顺序可以任意。执行完某case后的语句后,将顺序执行后面case后的语句,直到遇break语句才退出整个switch结构的执行。如果没有default且“表达式”值不等于任何case后常量表达式的值,则直接退出switch结构而转到其后的语句执行。,【例4.10】输入一个无符号整数,然后按用户输入的代号,分别以十进制(代号D)、八进制(代号O)、十六进(代号X)制输出。main()unsignedintx;charc;scanf(%u,%c,4.4分支结构(选择结构),【例4.11】一个简单的计算器程序main()intnum1,num2;charoper;printf(enterasimplearithmeticexpression:);scanf(%d%c%d,4.4分支结构(选择结构),五、分支结构程序设计举例【例4.12】输入一个带符号的整型数,输出该数的位数。算法分析:,4.4分支结构(选择结构),main()intx,y,m;printf(nEntery=);scanf(%d,4.4分支结构(选择结构),程序的运行情况如下:Entery=-2578-2578:4,【例4.13】求一元二次方程ax2+bx+c=0的解。算法分析:X=,(b2-4ac)=0),(a=0),(b2-4ac)0),(b2-4ac)1e-6)x1=(-b+sqrt(d)/(2*a);x2=(-b-sqrt(d)/(2*a);printf(hasdistinctrealroots:%7.2fand%7.2fn,x1,x2);elsereal=-b/(2*a);imag=sqrt(-d)/(2*a);printf(hascomplexroots:n);printf(%7.2f+%7.2fin,real,imag);printf(%7.2f-%7.2fin,real,imag);,4.4分支结构(选择结构),循环结构:重复执行某段程序,直到某个条件不成立的为止的一种程序结构。循环程序构成:初始化部分、工作部分、修改部分和判断部分。,初始化语句,条件,修改语句,工作语句,y,n,n,y,4.5循环结构,一、while语句while语句的一般形式:while(表达式)语句;,表达式,语句,intn=0,charc,(,(c=getchar()!=n,n=n+1,y,n,y,n,4.5循环结构,【例4.14】从键盘上连续输入若干个字符(以回车换行符为结束标记),统计字符个数(不含回车换行符)初始化部分:intn=0,charc;判断部分:(c=getchar()!=n工作部分:n=n+1修改部分:无,#includestdio.hmain()intn=0;charc;while(c=getchar()!=n)n+;printf(numberofcharaters=%dn,n);,【例4.15】计算S=1+2+3+.+100之和。初始化部分:inti=1,s=0;判断部分:i=100工作部分:s=s+i;修改部分:i=i+1;注意:while后的语句复合语句格式缩进,inti=1,s=0,i=1e-6,n=n+2,s=s*(-1.0),t=s/n,pi=pi+t,y,n,4.5循环结构,#includemath.hmain()floatpi=0.0,n=1.0,s=1.0,t;dot=s/n;/*求当前项t=s/n,s是符号,n是分母*/pi+=t;/*将当前项累加到pi中,pipit*/s*=-1.0;/*改变当前项的符号*/n+=2;/*产生下一个当前项的分母*/while(fabs(t)=1e-6);/*控制循环的结束条件*/printf(pi=%fn,4*pi);,运行结果如下:pi=3.141598,三、for语句for语句的一般形式:for(表达式1;表达式2;表达式3)循环体语句;注意:表达式1是初始化(只执行一次)。表达式2是循环条件判断。表达式3用于修改循环控制变量的值。表达式也可以是与循环控制变量赋初值无关的其它表达式,表达式也可以是与循环控制无关的任意表达式,表达式、表达式可以是一个简单表达式,也可是逗号表达式。表达式、表达式2、表达式3均可省略。,表达式1,表达式2,语句,表达式3,n,y,4.5循环结构,【例4.22】有一分数序列:2/1,3/2,5/3,8/5,求出这个数列的前20项之和。Yn/Xn:Yn=Yn-1+Xn-1,Xn=Yn-1main()intn,t,number=20;floata=2,b=1,s=0;for(n=1;n=number;n+)s=s+a/b;t=a;a=a+b;b=t;printf(sum=%9.6fn,s);运行结果如下:sum=32.660259,4.5循环结构,【例4.23】从键盘上输入若干个正整数,以零为输入结束标记,求其中的最大和最小数。main()intx,max,min;scanf(%d,运行结果为:215370max=7min=1,for(;x;),while(x),等价于,4.5循环结构,四、多重循环基本原则:内层循环完全要包含在外层循环的循环体内,不允许内外层循环体交叉。【例4.24】输出以下图形。#includemain()inti,j,k;i=1;while(i=6)for(j=1;j=20-2*i;j+)printf();for(k=1;k=i;k+)printf(%4d,i);printf(n);i+;,基本设计原则:外层循环往往只是给内层循环提供服务,不做主要的数据处理工作。,4.5循环结构,五、break语句和continue语句break语句:强制中断当前层的循环,不再执行循环体中break语句后面的语句而退出循环。,i=1,输入数据到a,+ia,打印no,跳出循环,a%i=0,yes,no,打印yes,i=a,yes,no,i=a,ia,2ia,4.5循环结构,【例4.26】判定用户输入的一个整数是否是素数。是则输出yes,否则输出no。#includemain()inta,i=1;scanf(%d,continue语句:不执行continue语句后的语句而继续循环。【例4.27】输出200以内能被9整除的数。#includemain()intn;for(n=9;n=200;n+)if(n%9!=0)continue;printf(“%dn”,n);,#includemain()intn;for(n=9;n=200;n+)if(n%9=0)printf(“%dn”,n);,4.5循环结构,六、转移语句和语句标号goto语句格式:goto标号goto语句功能:跳到标号所指的语句处去执行。,4.5循环结构,【例4.28】计算1+2+3+.+100的值#includemain()intsum=0,i=1;loop:sum=sum+(i+);if(i101)gotoloop;printf(“sum=%dn”,sum);注意:goto语句不能跳到函数外,不得跳到循环体
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论