《chap3算法与基本程序设计.pptx》由会员分享,可在线阅读,更多相关《chap3算法与基本程序设计.pptx(61页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。
1、一、自顶向下设计方法学介绍叙述要解决的问题定义输入和输出设计算法将算法转换C语句测试程序问题分解逐步细化开始结束第1页/共61页例:写一个C语言的程序计算函数f(x,y),f(x,y)的定义如下f(x,y)=x+y x0 且 y0 x+y2 x0 且 y0 x2+y x0 且 y0 x2+y2 x0且 y03.1 三种基本的程序控制结构第2页/共61页开发过程步骤1、定义问题:计算由公式定义的函数式,其中 x,y的值由用户提供;2、定义输入和输出:n输入的x和y是两个互不相关的值,为通用起见,x和y的输入类型均为double;n输出为公式中f(x,y),类型为double;3、算法设计:这个程
2、序分为三个部分n输入x和y;n计算函数;n在屏幕上输出f(x,y);第3页/共61页开发过程伪代码描述:C语言 自然语言1.提示用户输入x,y,2.读入x,y;3.计算函数4.将计算结果fun输出到屏幕上;if(x0 and y 0)fun =x+y /*将结果放入到变量fun*/else if(x0 and y 0)fun=x+y*yelse if(x 0 and y0)fun=x*x+y else fun=x*x+y*y第4页/共61页1.提示用户输入x,y,2.读入x,y;3.计算函数4.将计算结果fun输出到屏幕上;if(x0 and y 0)fun =x+y /*结果放到变量fun*
3、/else if(x0 and y 0)fun=x+y*yelse if(x=0.0&y0.0)else if(x=0.0)伪代码转换成C语言if(x=0.0&y=0.0)double x,y,fun;printf(input x,y:);/*提示输入x 和y*/scanf(%lf%lf,&x,&y);/*接收双精度值*/第5页/共61页伪代码转换成C语言#include main()double x,y,fun;printf(input x,y:);/*提示输入x 和y*/scanf(%lf%lf,&x,&y);/*接收双精度值*/if(x=0.0&y=0.0)fun=x+y;else if
4、(x=0.0&y0.0)fun=x+y*y;else if(x=0.0)fun=x*x+y;elsefun=x*x+y*y;printf(result of fun is%8.4f,fun);/*输出*/第6页/共61页测试程序四组测试值:x=0.5 y=1.0 x=-0.8 y=-1.9 x=0.9 y=0.78 x=-5.6 y=1.2第7页/共61页特征:有穷性确定性评价标准:正确性可读性健壮性(Robust,鲁棒性)高效率与低存储要求算法:对特定问题求解步骤的一种描述,它是指 令的有限序列,其中每一条指令表示一个 或多个操作。数据结构+算法=程序3.1 三种基本的程序控制结构可执行性有
5、输入、输出第8页/共61页3.1 三种基本的程序控制语句描述方法:可用自然语言、数学方法、某种计算机语言描述规范的方法:流程图、N-S结构流程图、伪代码、PAD图。流程图的基本构成:起至框输入输出判断框处理框或流程线连接点注释框第9页/共61页开始 输入实数x,yx=0&y=0Y输出运算结果fun结束Nx=0&y0YNx=0YNfun=x+yfun=x*x+yfun=x*x+y*yfun=x+y*y算法的流程图第10页/共61页流程图的三种基本结构aA Bb顺序结构先执行A,再执行B.若P为真,则执行A,否则执行B.若P为真,则执行A,否则跳过A.aAYNBpa bAPNY b选择结构第11页
6、/共61页流程图的三种基本结构Ap NY当型循环结构a bAp YNba直到型循环先执行A,再判断,若P为真,反复执行A,P为假时出循环。当P为真,反复执行A,P为假时出循环。第12页/共61页 N-S流程图去掉了箭头,算法写在一个矩形框里。它也有三种结构:顺序、选择和循环2、N-S结构流程图AB顺序结构pyesno A B选择结构当p成立A当型循环A 当p成立直到型循环第13页/共61页任何程序均可以由“顺序”、“选择”和“循环”这三种基本结构通过有限次的组合与嵌套来描述。任何程序设计语言均由这三种基本结构组成,其差别在于具体语法的形式不同,而原理是相同的。3.1 三种基本的程序控制语句第1
7、4页/共61页1、顺序结构ABAB流程图N-S图第15页/共61页2、选择结构PABTFPBATFkA1A2AiAnk=k2k=k1k=knk=ki.n二分支选择结构n多分支选择结构第16页/共61页3、循环结构n当型循环n直到型循环PAFT当P为真AAPFTA当P为真C语言中提供了3种循环结构:while、for、do while。第17页/共61页n共同特点:单入口、单出口n三种结构之间可以是顺序关系、平行关系,也可以互相嵌套,通过结构之间的复合形成复杂的关系。三种基本结构的特点第18页/共61页流程图例1:求三个整数的和开始输出sum的值结束输入x,y,zsum=x+y+z输出sum的值
8、sum=x+y+z输入x,y,zN-S结构流程图main()float x,y,z,sum;scanf(“%f%f%fn”,&x,&y,&z);sum=x+y+z;printf(“sum=%fn”,sum);第19页/共61页例1:求三个数中最小的那个数流程图N-S结构流程图开始输出min的值输入a,b,cacmin=cYNmin=bmin=aacYN输入a,b,c输出min的值#include main()int a,b,c,min;scanf(%d%d%d,&a,&b,&c);if(ac)min=c;printf(min=%d,min);第20页/共61页3.2 数据的输入和输出(Inpu
9、t and Output)C语言本身没有I/O语句,所有I/O都由标准库函数来实现。I/O函数声明在 stdio.h 中。输入类库函数:格式输入函数:scanf字符输入函数:getchar、getch、getche字符串输入函数:gets输出类库函数:格式输出函数:printf字符输出函数:putchar字符串输出函数:puts第21页/共61页3.2.1 字符数据的输入和输出#include main()char a=A;putchar(a );putchar(n);putchar(A);putchar(65 );输出:AAAn输入类库函数:p字符输入函数:getchar()、getch()
10、、getche()n输出类库函数:p字符输出函数:putchar(参数)字符常量整数字符变量第22页/共61页3.2.1 字符数据的输入和输出输入类库函数:字符输入函数:getchar()、gech()、getche()n1)getchar()功 能:从键盘读入一个字符。格 式:getchar();返回值:读入的字符。特 点:该函数的输入一直到“回车”才结束 从键盘读入一个字符,并回显第23页/共61页3.2.1 字符数据的输入和输出例:将输入的大写字母转变为小写字母输出。#include main()char ch;ch=getchar();ch+=32;putchar(ch);运行时:a
11、结果:A第24页/共61页2)getch():功 能:从键盘读入一个字符。格 式:getch();返回值:读入的字符。特 点:不回显,不“回车”,常用于密码输入或菜单选择3)getche():功 能:从键盘读入一个字符。格 式:getche();返回值:读入的字符。特 点:回显,不“回车”3.2.1 字符数据的输入和输出第25页/共61页3.2.1 字符数据的输入和输出#include main()char c1,c2;c1=getchar();c2=getchar();putchar(c1);putchar(c2);输入:ab 输出:ab输入:a 输出:a#include main()cha
12、r c1,c2;c1=getchar();getchar();c2=getchar();putchar(c1);putchar(c2);fflush(stdin);flushall();第26页/共61页3.2.1 字符数据的输入和输出输入函数留下的“垃圾”:解决方法:(1)用getchar()清除(2)用函数fflush(stdin)或函数flushall()清除全部剩余内容第27页/共61页输入类库函数:字符串输入函数:gets(内存地址)输出类库函数:字符串输出函数:puts(参数)#include main()char ch20;gets(ch);puts(ch);当输入为 C pro
13、gram则输出为:C program3.2.2 字符串数据的输入和输出字符串常量字符数组名第32页/共61页#include main()char a10=“china”;puts(a );puts(“nchina”);输出:chinachina3.2.2 字符串数据的输入和输出第33页/共61页输入类库函数:格式输入函数:scanf(“格式控制字符串”,输入项地址表);输出类库函数:格式输出函数:printf(“格式控制字符串”,输出项表);变量的地址或字符串的首地址被输出的数据,可以是常量、变量、表达式3.2.3 格式输入和输出第34页/共61页可以按指定格式向终端输出任意类型的数据。格式
14、:printf(格式字符串,输出参数列表);p 格式字符串:指定输出数据的类型、格式、个数p 格式控制字符和各输出项的 类型、顺序、数量要一致3.2.3 格式输出函数printf第35页/共61页可以按指定格式向终端输出任意类型的数据。格式:printf(格式字符串,输出参数列表);输出格式包括:普通字符常量和格式说明符照原样输出 printf(c=%d+%d=%dn,a,b,a+b);格式说明符:指定输出3个十进制整型数,分别为变量 a、b、ab的值3.2.3 格式输出函数printf第36页/共61页main()int a=3,b=4;printf(“%d%dn”,a,b);printf(
15、“a=%d,b=%dn”,a,b);输出结果:3 4a=3,b=43.2.3 格式输出函数printf第37页/共61页%d十进制格式%o八进制格式%x、%X十六进制格式%u无符号的十进制格式%c一个字符格式%s字符串格式%f实数格式%e、%E指数格式%g123456789%百分号本身10e和f中较短一种格式3.2.3 I/O格式-格式字符第38页/共61页.n对实数,指定小数点后位数(四舍五入)对字符串,指定实际输出位数m输出数据域宽,数据长度0右对齐,m0右对齐,m0右对齐,m0右对齐,m0右对齐,m0右对齐,m0右对齐,m0)为输出字符串的前n个字符。printf(“%s,%-5.3s”
16、,”china”,”china”);printf(“%5.3s”,”china”);输出结果:china,chi,chi第46页/共61页7)f(float)格式符:小数形式I/O实数(float,double)(1)%f:不指定宽度,整数部分全部输出,输出6位小数。float时,7位有效数字;double时,16位有效数字。main()float x,y;x=111111.111;y=222222.222;printf(“%f”,x+y);main()double x,y;x=1111111111111.1111111111;y=2222222222222.2222222222;printf
17、(“%f”,x+y);333333.3281253333333333333.3330103.2.3 I/O格式第47页/共61页7)f(float)格式符:小数形式I/O实数(float,double)(2)%m.nf:整个数据占m宽,小数为n位。m0右对齐,m0右对齐,m0左对齐。main()float x=123.45678;printf(“%e,%E,%-10.3e,%10.3E”,x,x,x,x);1.23457e+02,1.23457E+02,1.23E+02,1.23E+02 1.234568e+002,1.234568E+002,1.235E+002,1.235E+002 3.2
18、.3 I/O格式第49页/共61页*特殊字符的输出*字符字符格式格式字符字符格式格式“”#include main()printf(I say:How are you?n);printf(The directory is E:Turbocn);输出:I say:”How are you?”The directory is E:Turboc第50页/共61页1.printf函数格式控制中的格式说明符与输出参数的个数和类型必须一一对应。2.格式说明符的%和后面的描述符之间不能有空格。除%X、%E、%G外类型描述符必须是小写字母。3.长整型数应该用ld(或lo、lx、lu)格式输出,否则会出现输出错
19、误。4.printf函数的参数可以是常量、变量或表达式。在计算各参数值时,Turbo C采用从右至左的顺序求值。n注意:例 int i=3;printf(%d,%d,i,i+);则结果为例 int i=3;int j=i+1;printf(%d,%d,i,j);则结果为 4,3 3,4第51页/共61页 可以按指定格式从键盘读入任意类型的数据。格式:scanf(格式字符串,地址参数列表);变量的地址列表,可通过取地址运算符&获取变量地址string(字符串)%s16进制整数%x,%lxchar%c8进制整数%o,%lodouble(指数)%leunsigned long%ludouble%lf
20、unsigned int%ufloatfloat适用类型%e%f格式long intint适用类型%ld%d格式3.2.4 格式输入函数 scanf第52页/共61页输入数据的格式要与scanf的控制格式必须一致例1:scanf(“%d,%d”,&a,&b);正确的输入为:4,5 或 4,5不正确的输为:4 5或 4_5等例2:scanf(“a=%d,b=%d”,&a,&b);正确的输入:a=4,b=5 不正确的输入:4_5 和 4,5例3:scanf(“%d:%d”,&a,&b);正确的输入为:4:5不正确的输为:4_5 或 4,5或 4 53.2.4 格式输入函数 scanf第53页/共6
21、1页注意:scanf控制格式要尽可能的简单 尽管printf能够使用的控制格式scanf均可以使用,但一般scanf的格式要尽可能的简单,一般只需要给出数据控制符,而不要添加任何其它的辅助格式。例如:scanf(“%d%d”,&a,&b);正确的输入为:4 5 或 4 5或3Tab键4 此时,空格、回车和tab键均可作为分割符第54页/共61页4、在用“%c”格式输入字符时,空格字符和 转义字符都作为有效的字符输入。例:scanf(”%c%c%c”,&c1,&c2,&c3);若输入时为:a b c 则结果为:c1=a,c2=,c3=b2、输入数据时不能规定精度;3、参数中“格式控制”之后应该是
22、变量地址;例:float a;scanf(”%7.2f”,&a);例:float a;scanf(”%f”,a);第55页/共61页使用scanfscanf函数应注意:p如果数据本身可以将数据分割时,输入数据不需要使用分隔符;p要求在程序运行中输入数据,输入的数据个数和类型必须与格式说明符一一对应。p地址参数形式:&变量名(除数组或指针变量)p格式控制中有普通字符时,必须照原样输入p格式控制中无普通字符时,输入的数值型数据和字符串用空白符分隔,字符型数据不必分隔。第56页/共61页使用scanfscanf函数应注意:pdouble型数据输入时,必须用%lf或%le格式p实型数据输入时,域宽不能
23、用m.n形式的附加说明 p为了减少不必要的输入量,格式控制中尽量不要出现普通字符,也不要使用n、t 等转义字符第57页/共61页程序举例例1、编写一个程序,从键盘输入某个分钟数,将其转换成用小时和分钟表示,并将表示结果输出#include main()int i,h,m;printf(please input the total minute:);scanf(%d,&i);h=i/60;m=i-60*h;printf(%d hours and%d minutes.,h,m);please input the total minute:1151 hours and 55 minutes.第58页/共61页学习要点:1、理解算法的概念。2、掌握描述算法的图形工具:流程图、N-S图。掌握使用N-S图描述算法。3、掌握程序流程的三种基本结构:顺序结构、选择结构、循环结构。4、掌握常用的I/O函数,重点掌握printf、scanf函数的控制格式。第60页/共61页感谢您的观赏!第61页/共61页
限制150内