第3章程序的控制结构ppt课件_第1页
第3章程序的控制结构ppt课件_第2页
第3章程序的控制结构ppt课件_第3页
第3章程序的控制结构ppt课件_第4页
第3章程序的控制结构ppt课件_第5页
已阅读5页,还剩86页未读 继续免费阅读

下载本文档

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

文档简介

1、C 语 言 程 序 设 计湖北民族学院信息工程学院 张 帆zhang_hbmy第3章 程序的控制构造3.1 算法与语句 3.1.1算法及其特征 一个程序包括以下两方面的内容:1数据的描画和组织方式。在程序中要指定数据的类型和数据的组织方式,即数据构造。2对操作的描画,即操作步骤,也就是算法。 瑞士计算机科学家N沃思(Nikiklaus Wirth )教授提出了程序定义的著名公式:程序 数据构造 算法 程序设计需处理两个问题: 程序按什么顺序或步骤执行算法 运用什么语句实现1.算法的概念 计算机处理问题的方法和步骤就是计算机算法,即算法是对某一特定问题的求解步骤的一种描

2、画。 2.算法的特性1有穷性:一个算法必需保证执行有限步之后终了;2确定性:算法的每一个步骤必需具有确切的定义;3有效性:算法的每一步都必需是计算机能进展的有效操作;4输入:一个算法有零个或多个输入;5输出:一个算法有一个或多个输出。3.1 算法与语句 3.1 算法与语句 3.1.2算法和程序构造 算法含有两大组成要素:1.操作 C言语所描画的操作主要包括算术运算、逻辑运算、关系运算、函数运算、位运算和I/O操作等。2.控制构造 控制构造控制算法所描画的各种操作的执行顺序。 顺序构造 选择构造 循环构造 算法设计中,由三种根本构造可组成任何复杂构造的算法。3.1.3 算法的描画自然言语描画传统

3、流程图描画用N-S图描画伪代码描画3.1 算法与语句 1.用自然言语描画算法例:用自然言语描画算法求5!1原始方法:求12,得到结果2;:将中的结果乘以3,得到新的结果6;:将中的结果乘以4,又得到新的结果24;:将中的结果乘以5,得到最后的结果120。2改良方法:定义整型变量facto,初始值置为1;:定义整型变量i,初始值置为2;:使factoi,将乘积赋值给变量facto;:使i+1,将结果赋值给i;:判别i的值能否小于或等于5,假设是,前往并反复 ,否那么输出facto的值。1.用自然言语描画算法2.用传统流程图描画算法流程图是对给定算法的一种图形解法。也称框图,用规定的一系列图形、流

4、程线及文字阐明表示算法。详细例子见教材用传统流程图表示求5!的算法FTfac=fac*ii5 fac= fac ii = i + 1 输出 faci=24.用伪代码描画算法 Begin(算法开场) fac=1 i=2while ib)&(n=cd)短路特性:逻辑表达式求解时,并非一切的逻辑运算符都被执行,只是在必需执行下一个逻辑运算符才干求出表达式的解时,才执行该运算符2.3运算符与表达式/只在a为真时,才判别b的值;/只在a为假时,才判别b的值;/结果m=0,n=12.3.4逻辑运算符和表达式4第3章 程序的控制构造3.2 数据的输入与输出 C言语无I/O语句,I/O操作由库函数实现#inc

5、lude 本节引见用于键盘输入和显示器输出的库函数一、字符的输入与输出函数 1.字符输出函数putchar() 调用格式: putchar(参数); 功能:在显示器上输出单个字符 参数:可以是字符常量、字符型变量或整型变量,即将一个整型数作为ASCII编码输出相应的字符。 前往值:输出胜利前往输出字符的ASCII码值;出错,为EOF(-1)【例】输出单个字符。#include main() int i=97; char ch=a; putchar(i) ; putchar(n) ; putchar(ch) ; 程序运转结果为:aa一、字符的输入与输出函数2.字符输入函数getchar( ) 调

6、用格式:getchar( ); 功能:从键盘上读入一个字符。 返值:假设读入胜利,前往读入字符的ASCII码值; 出错,前往EOF(-1)通常把读入的字符赋予一个字符变量,构成赋值语句。例: char c; c=getchar();一、字符的输入与输出函数【例3.2】输入单个字符。#includemain() int ch; ch=getchar(); putchar(ch);程序运转结果如下: a a执行getchar()时输入字符以回车终了输入。 一、字符的输入与输出函数二、格式化输入/输出函数 1格式输出函数printf( ) 调用格式:printf(“格式控制字符串,输出项列表 功能:

7、按格式控制字符串指定格式,向显示器输出所列出的输出项 前往值:假设输出胜利,前往输出字节数;出错,前往EOF(-1) printf(“a=%4d,b=%4d,a,b);格式控制字符串输出项表列1格式输出函数printf( )格式控制字符串格式阐明:用于指定输出格式,由“%、格式控制字符、附加格式修饰符组成。普通字符或本义序列:原样输出输出项表列:要输出的数据,可以没有,多个时以“,分隔。输出项的个数必需与格式阐明的个数一致,位置一一对应。printf(“a=%4d,b=%4d,a,b);格式控制字符串输出项表列1格式输出函数printf( )格式阐明: %flags width .prec F

8、|N|H|L type 标志 输出最小宽度 精度 长度 类型1)type类型 表示格式控制字符,用来阐明对应输出项的输出格式d以带符号的十进制形式输出整数(正数不输出符号) o以8进制无符号形式输出整数(不输出前导符O) x(X)以16进制无符号形式输出整数(不输出前导符Ox) u以无符号10进制形式输出整数 c以字符形式输出一个字符s输出字符串 f以小数形式输出单、双精度数,默认输出6位小数 e(E)以标准指数形式输出单、双精度数,小数位数为6位 g(G)选用%f或%e格式中输出宽度较短的一种格式 1格式输出函数printf( )格式阐明: %flags width .prec F|N|H|

9、L type 标志 输出最小宽度 精度 长度 类型2)附加格式修饰符:可根据输出格式要求进展取舍。 Flags标志字符常用的:- : 为左对齐,系统默许右对齐+:正数输出+,负数输出-空格:正数输出空格,负数输出-Width宽度指示符:用十进制数来设置输出值的最少输出个数,少那么补空格,多那么按实践输出,缺省那么按实践输出。.prec精度指示符:用小数点加十进制正整数构成,用来限制输出数的精度,对于实数,指定输出的小数位数四舍五入。F|N|h|L 长度修饰符:见教材例 int a=1234; float f=123.456; char ch=a; printf(“%8d,%2dn,a,a);

10、printf(“%f,%8f,%8.1f,%.2f,%.2en,f,f,f,f,f); printf(“%3cn,ch);运转 1234,1234结果: 123.456000,123.456000, 123.5,123.46,1.23e+2 a1格式输出函数printf( )2. 格式化输入函数scanf( ) 调用格式:scanf(格式控制字符串,地址表列)功能:按格式控制字符串指定的格式,从键盘读入数据,并存入地址表指定的内存单元。前往值:前往输入数据个数例:scanf(“%d,%d,%f ,&a,&b,&c);地址表列:由一个或多个地址组成,假设有多个以逗号隔开。常用取地址运算符&得到变

11、量地址。格式控制字符串: 格式阐明:阐明需输入数据的类型。普通字符:输入数据时要原样输入。二、格式化输入/输出函数 格式阐明: % * widthF|Nh|LtypeType类型:是必需的,表示需输入数据的类型。d(D)十进制整数o(O)八进制整数x(X)十六进制整数i(I)自动根据数头分辨十、八、十六进制u(U)无符号十进制整数c单个字符s字符串f(e,g,G)实数n不输入数据,将已读入的字符输送到对应的地址中%百分号2. 格式化输入函数scanf( ) 格式阐明: % * widthF|Nh|Ltype*输入赋值抑制字符:输入数据但不赋给对应变量,跳过该输入。width宽度指示符:表示最多

12、可输入的字符个数。F|N地址大小修饰符:Ffar Nnearh|L输入数据类型:h短整型,l长整或双精度2. 格式化输入函数scanf( ) 例: scanf(%d %*d %d,&a,&b);输入:5 6 7时把5赋予a,6被跳过,7赋予b。2. 格式化输入函数scanf( ) 阐明:(1)scanf的格式控制字符串中的普通字符必需原样输入。 例: scanf“x=%d,&x;(2)输入分隔符的指定普通以空格、TAB或回车键作为分隔符其它字符做分隔符:格式串中两个格式符间字符(3)scanf函数中没有精度控制,如:scanf(“%5.2f,&a);是非法的。例 scanf(“%d,%d,%d

13、,&a,&b,&c); 输入 12,24,36 2. 格式化输入函数scanf( ) 例 scanf(“%d%d%d,&a,&b,&c); 输入 12 24 36 例:输入圆的半径,输出圆的周长和面积。分析: 1.定义实型变量r、c、s用于存放半径、周长、面积;2.调用输入函数,输入r:3.分别利用周长公式和面积公式求出c、s;4.调用输出函数输出c、s。3.2 根本输入/输出函数#include void main() float r,c,s; scanf(“ %f ,&r); /*输入一个浮点数据,存入地址&r */ c = 2 * 3.14159 * r; /*计算周长,赋值给c */

14、s = 3.14159 *r * r; /*计算面积,赋值给s */printf(“n c=%8.4f,c); /*周长占8个字符宽,4位小数*/printf(“n s=%8.4f,s); /*输出面积,数据共占8个字符宽,4位小数*/3.2 根本输入/输出函数C 语 言 程 序 设 计湖北民族学院信息工程学院 张 帆zhang_hbmy分析:1.输入小写字母存入变量a;2.转换成大写a = a-32;3.输出 a。例:从键盘输入一个小写字母,用大写方式输出该字母。3.2 根本输入/输出函数#include main() char a; printf(Input a

15、lowercase letter:); a =getchar(); a =a-32; /*将大写字母转换成对应的小写字母*/ printf(%c n,a);思索:如何使程序可以处置任何字符的输入。即判别输入的是小写字母,才转换成大写;假设输入的其他字符,那么直接输出。 3.2 根本输入/输出函数构造化程序设计根本思想:任何程序都可以用三种根本构造表示,限制运用无条件转移语句goto构造化程序:由三种根本构造反复嵌套构成的程序优点:构造明晰,易读,提高程序设计质量和效率三种根本构造构造化程序的三种根本构造顺序构造、选择构造、循环构造3.3顺序构造特点:程序按照语句编排的先后顺序依次执行有点:程序

16、简单明了,按顺序执行缺陷:功能有限,很难处置复杂问题教材例题prog03_08.cABab二分支选择构造多分支选择构造特点:经过对某个给定条件的判别,自动选择要执行的语句PAB真假bakA1A2AiAnk=k2k=k1k=knk=ki. ab3.4选择构造例如分段函数分析:首先判别 x,假设x0,那么 y=3-x; 否那么,y=2 * x;需求根据x的值进展流程选择分支3.4选择构造 C言语的选择语句有两种:if语句、switch语句 main() float x , y; scanf(“%f , &x); y = 2 * x ; if ( x 0 ) y = 3 - x ; printf(“

17、y= %6.2f, y ); 1.单分支选择构造:格式:if (表达式) 语句执行过程:表达式语句真假表达式语句1语句2真假2.双分支选择构造:格式:if (表达式) 语句1else语句2执行过程:3.4.1if语句main() float x , y; scanf(“%f , &x); if ( x 0 ) y = 3 - x ; else y = 2 * x ; printf(“y= %6.2f, y ); main() float x , y; scanf(“%f , &x); y = 2 * x ; if ( x b 那么输出a ;否那么,输出b。#include main( ) fl

18、oat a, b; scanf(“%f, %f,&a, &b); if (ab) printf (“%f, a ); else printf (“%f, b ); 3.4选择构造表达式1语句1真假表达式2表达式3语句n语句3语句2真真假假3.多分支选择构造:格式: if ( 表达式1) 语句1 else if (表达式2 ) 语句2 else if(表达式3 ) 语句3 . else 语句n执行过程:例:if (salary1000) index=0.4; else if (salary800) index=0.3; else if (salary600) index=0.2; else if

19、 (salary400) index=0.1; else index=0; 3.4选择构造if语句中的表达式普通为关系或逻辑表达式,也可以为任何数值类型的表达式。执行语句可以是一条简单语句、空语句或复合语句,也可以嵌套其它流程控制语句。 if(x) if(x!=0) if(!x) if(x=0)例 思索下面程序的输出结果: #include main() int x,y; scanf(“%d,%d,&x,&y); if(xy) x=y; y=x; else x+; y+; printf(“%d,%dn,x,y);Compile Error!3.4选择构造3.4.2 if语句的嵌套 当if语句中

20、的执行语句又是if语句时,那么构成了if 语句嵌套的情形。 例如:if ( 表达式1) if ( 表达式2) 语句1; if ( 表达式1) if ( 表达式2) 语句1; else 语句2;3.4选择构造#include main() int x,y; printf(Enter integer x,y:); scanf(%d,%d,&x,&y); if(x!=y) if(xy) printf(XYn); else printf(XYn); else printf(X=Yn);运转:Enter integer x,y:12,23 XY Enter integer x,y:12,12 X=Y例

21、:输入两整数并判别其大小关系3.4选择构造缺省 时,else总是和它上面离它最近的未配对的if配对if()if()if()else.else.else.if else 配对原那么:3.4选择构造例: if (a=b) if(b=c) printf(“a=b=c); else printf(“a!=b);修正: if (a=b) if(b=c) printf(“a=b=c); else printf(“a!=b);实现if else 正确配对方法:加 3.4选择构造例 思索下面程序输出结果: main() int x=100,a=10,b=20; int v1=5,v2=0; if(a60n);

22、 break; .3.4.3 switchcase语句switch(grade)case A:printf(“85100n); case B:printf(“7084n); case C:printf(“6069n); case D:printf(“60n); default: printf(“errorn); 运转结果:假设grade为A那么输出:85100 7084 6069 60 error3.4.3 switchcase语句例:按照考试成果的等级打印出百分制分数 段,可以用switch语句实现例:按照考试成果的等级打印出百分制分数 段,可以用switch语句实现3.4.3 switch

23、case语句switch(grade)case A:printf(“85100n);break; case B:printf(“7084n);break; case C:printf(“6069n);break; case D:printf(“60n);break; default:printf(“errorn); 运转结果:假设grade为A那么输出:85100 运转结果:假设grade为E那么输出:error 例 void main() int x=1,y=0,a=0,b=0; switch(x) case 1: switch(y) case 0: a+; break; case 1: b

24、+; break; case 2: a+;b+; break; case 3: a+;b+; printf(“na=%d,b=%d,a,b); 运转结果:a=2,b=13.4.3 switchcase语句例,根据输入的学生百分制成果判别等级并输出。3.4.3 switchcase语句score059 60697079808990100score/10score/100,1,2,3,4,56789,10default运用switch解题的关键是经过分析找到表达式然后将问题分几种情况3.4.3 switchcase语句case 4:case 5: y=E;break;case 6: y=D; br

25、eak;case 7: y=C; break;case 8: y=B; break;case 9:case 10: y=A;break;default: y= ; if(y= ) printf(Score error!);else printf(Grade=%c,y);#includemain()int x;char y;printf(nx:);scanf(%d,&x);switch(x/10) case 0:case 1:case 2:case 3:3.4.3 switchcase语句switch和else-if的比较else-if比switch的条件控制更强大一些else-if可以按照各种

26、逻辑运算的结果进展流程控制switch只能进展=判别,并且只能是整数判别switch比else-if更明晰两者都要尽量防止用得过多、过长,尤其不要嵌套得太多,它们大大添加程序的分支,使逻辑关系显得混乱,不易维护,易出错3.4.3 switchcase语句C 语 言 程 序 设 计湖北民族学院信息工程学院 张 帆zhang_hbmy当型循环构造直到型循环构造PA假真baAP假真ba循环构造3.5循环构造C言语有while 、 do - while 、和for语句三种循环构造语句。前两个称为条件循环,即根据条件来决议能否继续循环;后一个称为计数循环,即根据设定的执行次数来

27、执行循环。3.5循环构造普通方式:while (表达式) 循环体语句;执行流程:表达式循环体假(0)真(非0)while3.5.1while语句3.5循环构造特点:先判别表达式,后执行循环体阐明:假设表达式的值一开场就为0,那么循环体一次也不执行循环体可为恣意类型语句循环体中应有使循环趋向于终了的语句While语句特点和阐明3.5循环构造用while循环求1至100的和.3.5循环构造处理“累加类型问题根本方法: 两个变量:累加和,当前项 1先给累加和赋初值普通为0; 2用循环语句实现累加; 3循环体语句的设计: 累加和当前值=累加和原值+当前项 ;例:用while循环求1至100的和 #in

28、clude main( ) int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d,sum); 循环初值循环终值循环变量增值循环条件循环体3.5循环构造 #include main() int i=1; while(i=10) printf(%d*%d=%dn,i,i,i*i); i+; 运转结果:1*1=12*2=43*3=94*4=165*5=256*6=367*7=498*8=649*9=8110*10=100例 输出110的平方3.5循环构造普通方式:do 循环体语句; while(表达式);执行流程:do循环体表达式假(0)真(

29、非0)while3.5.2do-while语句3.5循环构造特点:先执行循环体,后判别表达式阐明:至少执行一次循环体dowhile可转化成while构造表达式循环体假(0)真(非0)循环体While循环dowhile语句特点和阐明3.5循环构造例:用do-while循环求1至100的和。 #include main( ) int i,sum=0; i=1; do sum=sum+i; i+; while(i =100) printf(%d,sum); #include main( ) int i,sum=0; i=1; while(i=100) sum=sum+i; i+; printf(%d

30、,sum); 运转结果:5050 运转结果:50503.5循环构造普通方式:for(表达式1 ; 表达式2 ; 表达式3) 循环体语句;执行流程:3.5.3for语句表达式2循环体假(0)真(非0)for表达式1表达式33.5循环构造for语句普通运用方式:for(循环变量赋初值;循环条件;循环变量增值)循环体语句;例 :用for循环求1至100的和。#include main() int i,sum=0; for(i=1;i=100;i+) sum=sum+i; printf(%d,sum);3.5循环构造 for语句中表达式1; 表达式2 ;表达式3 类型恣意,都可省略,但分号;不可省。1

31、省略了“表达式1循环变量赋初值, 表示不对循环控制变量赋初值2省略了“表达式2(循环条件), 那么不做其它处置时便成为死循环3省略了“表达式3(循环变量增量), 那么不对循环控制变量进展操作,这时可在语句体中参与修正循环控制变量的语句for语句阐明3.5循环构造逗号表达式 逗号运算符的主要运用就在for语句中。 for语句中的表达式1和表达式3可以是逗号表达式,特别是有两个循环变量参与对循环的控制时。表达式1和表达式3为逗号表达式,将使程序显得非常明晰。 例: for( i=1, j=10 ;i=j; i+, j-)3.5循环构造例: 求 1/100+2/99+50/51 float s=0.0; for(i=1,j=100; ij; i+,j-) s = s + i/j;3.5循环构造选择三种循环的普通思绪:假设循环次数知,用for假设循环次数未知,用while假设循环体至少要执行一次,用do-while只是思绪,不是定律3.5循环构造在一个循环构造中又嵌入另一个或几个完好的循环构造,称为循环的嵌套。嵌套在内的循环体称为内循环,外面的循环体称为外循环。假设内循环体中又有嵌套的循环语句。那么构成多重循环。While 、do-while、for三种

温馨提示

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

评论

0/150

提交评论