C语言程序的基本控制结构.ppt_第1页
C语言程序的基本控制结构.ppt_第2页
C语言程序的基本控制结构.ppt_第3页
C语言程序的基本控制结构.ppt_第4页
C语言程序的基本控制结构.ppt_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章 C语言程序的基本控制结构,C程序构成:文件函数语句序列。 语句:C语言中描述计算过程的最基本单位。由分号;结束。 结构化程序设计方法:程序语句序列由三种基本结构(顺序、 分支、循环)构成,结构清晰、可读性强。,第四章 C语言程序的基本控制结构,一、顺序结构 按书写的先后顺序执行语句。,4.1 程序的三种基本结构,三、循环结构 在一定条件下反复执行某些语句,直到这个条 件不成立为止。,语句1,语句3,语句2,二、分支结构 按照当时的某个条件决定是否执行某些语句。,条件,语句,语句2,条件,语句1,n,y,y,n,初始化语句,条件,修改语句,工作语句,初始化语句,条件,工作语句,修改语句,y,n,n,y,复合语句:多个语句用花括号扩起来组成的语句。 目的是将这多个语句看成是一条语句。,4.2 复合语句,注意:内部各条语句还是以分号结尾,结尾的右花括号后不加分号。,复合语句的一般形式: 说明部分 ,例: int i,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 #include main() float a,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 顺序结构的程序设计,#include main() int a,i,j,k; printf(“Enter a:n“); scanf(“%3d“, ,4.3 顺序结构的程序设计,运行情况如下: Enter a: 127 721,【例4.3】编写程序求出任一输入字符的ascii码。 字符在内存存放的是它的ascii码(字符型和整型可以混合运算或者字符型可按整型输出),所以将它按整数输出即可。,#include main() char c; printf(“Enter the value of c:“); scanf(“%c“, 运行情况如下: Enter the value of c:a a:97,4.3 顺序结构的程序设计,【例4.4】交换两个变量的值。 设变量a、b均为整 型变量,编写一个 程序,输入a、b的 值,并显示,然后 交换a、b的值,再 次显示。 算法分析:,4.3 顺序结构的程序设计,main() int a,b,t; printf(“nEnter the value of a and bn“); printf(“a,b=“); scanf(“%d,%d“, ,运行情况如下: Enter the value of a and b a,b=2,7,输出: a=2,b=7 changed a=7,b=2,4.3 顺序结构的程序设计,三种条件转移语句: 1、if语句 2、if else语句 3、switch语句,4.4 分支结构(选择结构),一、if语句 if语句的一般形式: if(表达式) 语句; 表达式通常为条件表达式 或逻辑表达式。 if语句中的语句只能是一 条语句,如果需要多条语 句则使用复合语句。 编写程序时使用缩进使结 构清晰。,【例4.5】输入一个整数,若是3的倍数,则显示“ok”。 #include main() int a; scanf(“%d“, ,a%3=0,printf(“ok”),0(不成立),1(成立),4.4 分支结构(选择结构),#include main() char ch; ch=getchar(); if(ch=A ,ch=A& ch=Z,printf(“ch=%dn”,ch),0(不成立),1(成立),【例4.6】输入一个字符,若是大写字母,则输出其ascii码。,4.4 分支结构(选择结构),二、ifelse语句 ifelse语句的一般形式: if(表达式) 语句1; else 语句2;,语句2,表达式,语句1,非零(成立),零(不成立),else,表达式,语句1,语句2,else,非零(成立),零(不成立),4.4 分支结构(选择结构),或if(表达式) 语句1; 语句n; else 语句1; 语句n; ,【例4.7】输入两个整数,输出较大者。 算法分析: main() int a,b; scanf(“a=%d,b=%d“, ,显示b,ab,显示a,非零(成立),零(不成立),建议: 为使结构清楚不易错,语句使用花括号扩起 (即使是一条语句)。,4.4 分支结构(选择结构),【例4.8】判断某一年是否是闰年, 是则输出year xxxx is a leap year. 否则输出year xxxx is not a leap year. if(y%4=0&y%100!=0)|(y%400=0) printf(“year %d is a leap year.n“,y); else printf(“year %d is not a leap year.n“,y);,4.4 分支结构(选择结构),if (表达式1) 语句1; else if (表达式2) 语句2; else if (表达式3) 语句3; else if (表达式n) 语句n; else 语句n+1; 例如: if (score=90) grade=A; else if (score=80) grade=B; else if (score=70) grade=C; else if (score=60) grade=D; else grade=E;,4.4 分支结构(选择结构),三、条件分支的嵌套 在分支的语句部分还可以出现分支语句,这样就形成了分支的嵌套(多分支结构),构成复杂的逻辑结构。,表达式1,非零(成立),零(不成立),语句2,表达式2,语句1,非零(成立),零(不成立),语句4,表达式3,语句3,非零(成立),零(不成立),4.4 分支结构(选择结构),if(表达式1) if(表达式2) 语句1; else 语句2; else if(表达式3) 语句3; else 语句4; ,if(表达式1) 语句1; else if(表达式2) 语句2; else if(表达式3) 语句3; else 语句4; ,表达式3,表达式2,表达式1,语句4,语句1,语句2,语句3,非零(成立),非零(成立),非零(成立),零(不成立),零(不成立),零(不成立),4.4 分支结构(选择结构),Y=,-10 (x-1.0),-1 (-1.0 x0),1 (0 x1.0),10 (x 1.0),X0,零(不成立),Y=-1,X-1.0,Y=-10,非零(成立),零(不成立),Y=10,X1.0,Y=1,非零(成立),零(不成立),if(x0) if(x-1.0) y=-10; else y=-1; else if(x1.0) y=1; else y=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; else if(x0) y=-1; else if(x1.0) y=1; else y=10; ,if(x-1.0) y=-10; else if(x0) y=-1; else if(x1.0) y=1; else y=10;,y,y,y,n,n,n,4.4 分支结构(选择结构),使用缩进和花括号避免程序的二义性 例如:if(c=0 ,或 if(c=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() unsigned int x; char c; scanf(“%u,%c“, ,4.4 分支结构(选择结构),【例4.11】一个简单的计算器程序 main() int num1,num2; char oper; printf(“enter a simple arithmetic expression:“); scanf(“%d%c%d“, ,4.4 分支结构(选择结构),五、分支结构 程序设计举例 【例4.12】 输入一个 带符号的 整型数, 输出该数 的位数。 算法分析:,4.4 分支结构(选择结构),main() int x,y,m; printf(“nEnter y=“); scanf(“%d“, ,4.4 分支结构(选择结构),程序的运行情况如下: Enter y=-2578 -2578:4,【例4.13】求一元二次方程ax2+bx+c=0的解。 算法分析: X=,( (b2-4ac) = 0 ),(a=0),( (b2-4ac) 0 ),( (b2-4ac) 0 ),两个复根,两个不等的实根,不是二次方程,-b/(2*a),4.4 分支结构(选择结构),4.4 分支结构(选择结构),#include “math.h“ main() float a,b,c,d,x1,x2,real,imag; scanf(“%f,%f,%f“,4.4 分支结构(选择结构),else if (d1e-6) x1=(-b+sqrt(d)/(2*a); x2=(-b-sqrt(d)/(2*a); printf(“has distinct real roots:%7.2f and %7.2fn“,x1,x2); else real=-b/(2*a); imag=sqrt(-d)/(2*a); printf(“ has complex roots: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(表达式) 语句;,表达式,语句,int n=0,char c,(,(c=getchar()!=n,n=n+1,y,n,y,n,4.5 循环结构,【例4.14】从键盘上连续输入若干个字符(以回车换行符为结束标记),统计字符个数(不含回车换行符) 初始化部分:int n=0,char c; 判断部分:(c=getchar()!=n 工作部分:n=n+1 修改部分:无,#include “stdio.h“ main() int n=0; char c; while (c=getchar()!=n) n+; printf(“number of charaters=%dn“,n); ,【例4.15】计算S=1+2+3+100之和。 初始化部分:int i=1,s=0; 判断部分:i=100 工作部分:s=s+i; 修改部分:i=i+1; 注意:while后的语句 复合语句 格式缩进,int i=1,s=0,i=100,s=s+i,i=i+1,n,y,4.5 循环结构,main() int i,s=0; i=1; while (i=100) s+=i; i+; printf(“s=%dn“,s); ,运行结果如下: s=5050,二、dowhile语句 dowhile语句的一般形式: do 语句; While(表达式); 注意: while(表达式)后的分号;,表达式,语句,n,y,4.5 循环结构,【例4.16】从键盘上连续输入若干个字符(以回车换行符为结束标 记),统计字符个数(不含回车换行符) 初始化部分:int n=-1,char c; 工作部分:n=n+1; 修改部分:无 判断部分:(c=getchar()!=n,int n=-1,(c=getchar()!=n,n=n+1,n,y,#include “stdio.h“ main() int n=-1; char c; do n+; while (c=getchar()!=n); printf(“number of characters=%dn“,n); ,运行结果为: abcd1234 number of characters=8,【例4.17】用下列公式计算的值。 /4 =1-1/3+1/5-1/7+.1/n 工作部分:pi=pi+t,t=s/n 修改部分:n=n+2,s=s*(-1.0) 初始化部分:int pi=0.0,n=1.0, s=1.0 判断部分:fabs(t)=1e-6,int pi=0.0,n=1.0,s=1.0,fabs(t)=1e-6,n=n+2,s=s*(-1.0),t=s/n,pi=pi+t,y,n,4.5 循环结构,#include “math.h“ main() float pi=0.0,n=1.0,s=1.0,t; do t=s/n; /*求当前项t=s/n,s是符号,n是分母*/ pi+=t; /*将当前项累加到pi中,pipit*/ s*=-1.0; /*改变当前项的符号*/ n+=2; /*产生下一个当前项的分母*/ while (fabs(t)=1e-6); /*控制循环的结束条件*/ printf(“pi=%f n“,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-1 main( ) int n,t,number=20; float a=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() int x,max,min; scanf(“%d“, 运行结果为:2 1 5 3 7 0 max=7 min=1,for(;x;) ,while(x) ,等价于,4.5 循环结构,四、多重循环 基本原则:内层循环完全要包含在外层循环的循环体内,不允许内外层循环体交叉。 【例4.24】输出以下图形。 #include main() int i,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。 #include main() int a,i=1; scanf(“%d“, ,continue语句:不执行continue语句后的语句而继续循环。 【例4.27】输出200以内能被9整除的数。 #include main() int n; for(n=9;n=200;n+) if(n%9!=0) continue; printf(“%dn”,n); ,#include main() int n; for(n=9;n=200;n+) if(n%9=0) printf(“%dn”,n); ,4.5 循环结构,六、转移语句和语句标号 goto语句格式:goto 标号 goto语句功能:跳到标号所指的语句处去执行。,4

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论