《C语言课件-第3章算法和基本程序设计.ppt》由会员分享,可在线阅读,更多相关《C语言课件-第3章算法和基本程序设计.ppt(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、主要内容:算法的表示方法、C C程序的基本结构和输入输出。3.1 3.1 算法算法算法:是解决问题的一系列操作步骤的集合。算法:是解决问题的一系列操作步骤的集合。科学家沃思(NikiklausNikiklaus Wirth Wirth)提出一个公式:数据结构数据结构+算法算法=程序程序数据结构:对数据(操作对象)的描述。算法:对操作步骤的描述。编写程序的本质:对哪些数据数据进行什么样的一系列加工加工就可以达到目标。第第3 3章章 算法和基本程序设计算法和基本程序设计例:例:依次读入30个学生成绩,输出平均成绩及最高成绩算法:算法:s1s1:0=i0=i,0=sum 0=sum,0=max 0=
2、max s2 s2:读入一个学生成绩存入读入一个学生成绩存入scorescore s3 s3:i+1=ii+1=i s4 s4;sum+score=sumsum+score=sum s5 s5:如果如果scorescore大于大于maxmax,则则score=maxscore=max s6 s6:如果如果i i小于小于3030,转移至,转移至s2s2 s7 s7:sum/30=averagesum/30=average s8 s8:打印打印averageaverage,maxmaxs2,s3,s4,s5,s6s2,s3,s4,s5,s6这些步骤会被重复执行3030次,变量i i用于统计已处理的
3、学生人数 当i i值小于3030时,流程转至s2s2读下一个学生成绩 当i i值等于3030时,所有学生成绩处理完毕,按顺序到s7s7计算平均成绩,再到s8s8输出结果。算法举例算法举例 算法是解决问题逻辑思路的表述,同一问题有不同的解题方法和步骤,设计出不同的算法。正确的算法应该具备以下特性。有穷性:有穷性:包含有限的操作步骤,不能无限制地执行下去。确定性:确定性:算法中所描述的每个步骤都应该是明确的 有有0 0 n n个输入数据:个输入数据:输入是指在算法执行过程中需要用户输入的信息。有有1 1 n n个输出数据:个输出数据:一般地,算法都有一个或多个输出数据,因为设计算法的目的就是进行数
4、值运算或进行某种数据处理,给用户输出处理结果是必然的要求。有效性:有效性:在一个算法中,要求每个步骤都能被有效地执行算法的特性算法的特性算法的表示算法的表示 算法可用自然语言将其表述算法可用自然语言将其表述,但自然语言不严格但自然语言不严格,容易出现容易出现“二义性二义性”。当算法包含多个分支和循环。当算法包含多个分支和循环时时,自然语言表述就更为困难。可采用更规范化的方自然语言表述就更为困难。可采用更规范化的方法表示法表示,常用的有:流程图、常用的有:流程图、N-SN-S图、伪代码、图、伪代码、PAD图等。流程图是最常用的一种方法。它用图形符号图等。流程图是最常用的一种方法。它用图形符号配合
5、文字表示流程和操作配合文字表示流程和操作,形象直观形象直观,易于理解。易于理解。起止框起止框I/O框框判断框判断框处理框处理框流程线流程线连接点连接点例:求三个整数的和例:求三个整数的和流程图流程图开始开始输出输出sum的值的值结束结束输入输入x,y,zsum=x+y+zmain()float x,y,z,sum;scanf(“%f%f%fn”,&x,&y,&z);sum=x+y+z;printf(“sum=%fn”,sum);例例2 2:求三个数中最小数:求三个数中最小数流程图流程图开始开始输出输出min的值的值输入输入a,b,cabNmin=amin=bY结束结束cminmin=cYN#i
6、nclude main()int a,b,c,min;scanf(%d%d%d,&a,&b,&c);if(ab)min=a;else min=b;if(cmin)min=c;printf(min=%d,min);例:求三个数中最小数例:求三个数中最小数。流程图流程图开始开始输出输出min的值的值输入输入a,b,cabNmin=amin=bY结束结束cminmin=cYNN-SN-S图图min=bmin=bmin=amin=aababY YN Nmin=cmin=ccmincminY YN N输入输入a,b,ca,b,c输出输出minmin的值的值3.3.2 2 结构化程序设计方法结构化程序设计
7、方法 结构化程序设计方法的基本思想是:把一个复杂结构化程序设计方法的基本思想是:把一个复杂问题的求解过程分步进行,后一步在前一步的基础上问题的求解过程分步进行,后一步在前一步的基础上细化,这样每步所考虑的子问题都相对易于理解和处细化,这样每步所考虑的子问题都相对易于理解和处理理,每步都每步都只用三种基本结构只用三种基本结构,进行复合和嵌套进行复合和嵌套。也可。也可以概括为:以概括为:自顶向下自顶向下,逐步求精逐步求精的方法。的方法。3.3 3.3 程序基本结构程序基本结构 从从结构化程序设计角度出发结构化程序设计角度出发,程序有三种程序有三种基基本本结构结构:只要用这三种基本结构只要用这三种基
8、本结构,经过有限次复合经过有限次复合和嵌套就可以解决和嵌套就可以解决程序设计程序设计的全部问题。程序结构的全部问题。程序结构清晰可读性好清晰可读性好,易维护。易维护。顺序结构、选择结构、循环结构顺序结构、选择结构、循环结构1.顺序结构顺序结构先执行先执行A,再执行再执行B.AB2.选择结构选择结构ABPYN 若若P为真为真,则执则执行行A,否则执行否则执行B。APNY 若若P为真为真,则执则执行行A,否则否则跳过跳过A。3.循环结构循环结构(1)当型循环当型循环 当当P为真为真,反复执行反复执行A,P为假时为假时出出循环。循环。(2)直到型直到型循环循环 先执行先执行A,再判断再判断,若若P为
9、假为假,反复执行反复执行A,直到直到P为真为真出出循环循环。PNYAAPNYx5 另外另外:由选择结构可以派生出多分支结构由选择结构可以派生出多分支结构.K=K1A1A2AiAnK2KiKnC程序是由语句组成,每个语句以程序是由语句组成,每个语句以分号分号结束。结束。语句分类:语句分类:控制语句控制语句:控制程序执行流程控制程序执行流程 表达式语句表达式语句 函数调用语句:函数调用语句:调用函数调用函数 空语句:空语句:执行空操作执行空操作 复合语句:复合语句:执行一组语句执行一组语句 用用 把一些语句括起来,相当于一个语句把一些语句括起来,相当于一个语句 如:如:x1=-(-b+sqrt(d
10、)/(2*a);x2=-(-b-sqrt(d)/(2*a);3.3.4 4 顺序结构程序设计顺序结构程序设计输入:将数据送入计算机输出:将计算机处理的结果数据送出到输出设备。语言中,数据输入输出是由库函数完成。使用库函数时,用预编译命令将有关“头文件”包括到源文件中。标准输入输出库函数:“stdio.h”stdio.h”文件 源文件开头应有以下预编译命令:#include include#include stdio.hinclude stdio.h 3.3.5 5 数据的输入输出数据的输入输出格式:putchar(c)参数:c为字符常量、变量或表达式功能:把字符c输出到显示器上返值:正常,为显
11、示的代码值;出错,为EOF#include main()int c;char a;c=65;a=B;putchar(c);putchar(n);putchar(a);运行结果:A B例1.1.putchar putchar 函数函数(字符输出函数字符输出函数)例 char a=3,b=4;printf(%c%cn,a,b);printf(a=%c,b=%cn,a,b);输出结果:3 4 a=3,b=4输出结果:3 4 a=3,b=4例 int a=3,b=4;printf(%d%dn,a,b);printf(a=%d,b=%dn,a,b);例 float a=3.14,b=2.1828;pri
12、ntf(%f%fn,a,b);printf(a=%f,b=%cf,a,b);输出结果:3.140000 2.182800 a=3.140000,b=2.182800输出表:输出表:要输出的数据要输出的数据(可以没有,多个时以可以没有,多个时以,分隔分隔)格式控制串:格式控制串:包含两种信息包含两种信息格式说明:格式说明:%修饰符修饰符 格式字符格式字符,用于指定输出格式用于指定输出格式普通字符或转义序列:普通字符或转义序列:原样输出原样输出格式字符:格式字符:d d格式符:格式符:按十进制格式输出按十进制格式输出 f f格式符:格式符:按实数格式输出按实数格式输出 c c格式符:格式符:以字符
13、形式输出一个字符以字符形式输出一个字符2.2.printfprintf函数(格式输出函数)函数(格式输出函数)格式:格式:printf(格式控制串格式控制串,输出表,输出表)功能:功能:按指定格式向显示器输出数据按指定格式向显示器输出数据返值:返值:正常,返回输出字节数;出错,返回正常,返回输出字节数;出错,返回EOF说明:说明:标准库函数,函数原型在头文件标准库函数,函数原型在头文件stdio.h中中格式字符格式字符意意 义义d以十进制形式输出带符号整数以十进制形式输出带符号整数(正数不输出符号正数不输出符号)o以八进制形式输出无符号整数以八进制形式输出无符号整数(不输出前缀数字不输出前缀数
14、字0)x,X以十六进制形式输出无符号整数以十六进制形式输出无符号整数(不输出前缀不输出前缀Ox)u以十进制形式输出无符号整数以十进制形式输出无符号整数f以小数形式输出单、双精度实数以小数形式输出单、双精度实数e,E以以指指数数形形式式输输出出单单、双双精精度度实实数数。用用e时时指指数数以以e表示,用表示,用E时指数以时指数以E表示。表示。g,G以以%f或或%e中较短的输出宽度输出单、双精度实数中较短的输出宽度输出单、双精度实数c输出单个字符输出单个字符s输出字符串输出字符串 字母字母l,用于长整型数据的输出,可以加在用于长整型数据的输出,可以加在 d、o、x、u四个格式字符的前面。四个格式字
15、符的前面。在格式字符的前面给出一个正整数在格式字符的前面给出一个正整数m,指定指定数据最小的输出宽度。若实际位数多于定义的数据最小的输出宽度。若实际位数多于定义的宽度,则按实际位数输出,若实际位数少于定宽度,则按实际位数输出,若实际位数少于定义的宽度则补以空格。若在格式符前面不指定义的宽度则补以空格。若在格式符前面不指定输出宽度,则按数据的实际位数输出。输出宽度,则按数据的实际位数输出。负号,指定输出的数字或字符串在指定宽度负号,指定输出的数字或字符串在指定宽度内向左靠齐。内向左靠齐。对对于于实实数数,可可以以指指定定输输出出的的小小数数位位数数,称称为为精精度度格格式式符符,它它以以“.”开
16、开头头,后后跟跟十十进进制制整整数数n,可可以以用用于于限限制制f、e、E、g和和G格格式式字字符符;也也用用于于字字符符串串,表表示示截截取取的的字字符符个个数数。实实数数若若不不指指定定输输出出的的小小数数位位数数,则则由由系系统统自自动动指指定定,不不同同的的系系统统略略有有不不同同。“%f”格格式式,整整数数部部分分全全部部输输出出,小小数数部部分分输输出出六六位位数数字字。对对于于“%e”一一般般是是输输出出占占13列列(11列列),其其中中指指数数部部分分5列列(4列列),数数值值按按规规范范化化形形式式输输出出(即即小小数数点点前前必必须须有且只有有且只有1位非零数字),输出六位
17、(五位)小数。位非零数字),输出六位(五位)小数。例如例如:float x=234.541;printf(%f,%12f,%8.2fn%e,%10.2en,f,f,f,f,f);printf(%s,%7.3s,technology,technology);234.541000,234.541000,234.542.345410e+002,2.34e+002technology,tec main()printf(%ld,%lo,%lu,%lxn,32l,32l,32l,32l);printf(%d,%f,%c,%s,%en,2,3.1,a,ok,367.45);printf(%d,%f,%c,%
18、s,%en,-2,-3.1,a,ok,-367.45);printf(%2d,%2f,%2c,%2s,%2en,2,3.1,a,ok,367.45);printf(%2d,%2f,%2c,%2s,%2en,-2,-3.1,a,ok,-367.45);printf(%5d,%10f,%10s,%15en,2,3.1,ok,367.45);printf(%5d,%10f,%10s,%15en,-2,-3.1,ok,-367.45);printf(%10.4f,%10.4s,%10.4en,3.1,Hello,world,367.45);printf(%10.4f,%10.4s,%10.4en,-3
19、.1,Hello,world,-367.45);注意:注意:1。要输出的数据类型决定了所使用的格式字符串,否则,。要输出的数据类型决定了所使用的格式字符串,否则,会有不正确的输出。会有不正确的输出。2。整型数据使用。整型数据使用%d%o%x%u格式字符时,可能会有不同的输格式字符时,可能会有不同的输出结果。出结果。3。对于。对于0255之间的整数,若按之间的整数,若按%c输出,则输出与该整数输出,则输出与该整数对应的对应的ASCII字符。反之,若用字符。反之,若用%d输出字符量,则输出其输出字符量,则输出其对应的对应的ASCII值。值。4。使用。使用printf时,若输出项是表达式,应注意求值
20、顺序,时,若输出项是表达式,应注意求值顺序,对于对于TC来说,按照自右向左的顺序。来说,按照自右向左的顺序。例如,例如,int i=5;printf(“%d,%dn”,i+,i);printf(“%dn”,i);格式:getchar()功能:从键盘读一字符返值:正常,返回读取的代码值;出错,返回EOF例/*ch3_4.c*/#include main()int c;printf(Enter a character:);c=getchar();printf(%c-hex%xn,c,c);运行结果:Enter a character:AA-hex413.3.getchargetchar函数(字符输
21、入函数)函数(字符输入函数)4.getch函数函数格式格式:getch()功能:功能:从键盘读入一字符,从键盘读入一字符,不用回车结束,不用回车结束,不回显不回显例:例:#include main()char c;c=getch();putchar(c);a a5.getche函数函数格式格式:getche()功能:功能:从键盘读入一字符,从键盘读入一字符,不用回车结束,不用回车结束,回显回显例:例:#include main()char c;c=getche();putchar(c);a aa6.scanf6.scanf函数函数(格式输入函数格式输入函数)v地址表:变量的地址,用取地址运算符
22、&v格式字符:d,c,f例 int a scanf(%d,&a);输入:10 则 a=10例 char a;scanf(%c,&a);输入:m 则 a=m例 float a;scanf(%f,&a);输入:3.14 则 a=3.140000格式:scanf(格式控制串,地址表)功能:按指定格式从键盘读入数据,存入地址表指 定的存储单元中,按回车键结束返值:正常,返回输入数据个数说明:标准库函数,在头文件stdio.h中定义例例 scanf(%d:%d:%d,&h,&m,&s);输入输入 12:30:45 则则12 h,30 m,45 s例例 scanf(%d,%d,&a,&b)输入输入 3,4
23、 则则3a,4 b例例 scanf(%d%d%d,&a,&b,&c);输入输入 12 24 36 输入分隔符的指定格式串中两个格式符有间隔字符格式串两个格式符无间隔字符,以空格、TAB或回车键作为分隔关于格式输入函数的几点说明:关于格式输入函数的几点说明:1 1、输入数据时不能规定精度;、输入数据时不能规定精度;2 2、参数中、参数中“格式控制格式控制”之后应该是变量地址;之后应该是变量地址;3 3、如果在、如果在“格式控制格式控制”字符串中除了格式说明以外,字符串中除了格式说明以外,还有其他字符,则在输入数据时应输入与这些还有其他字符,则在输入数据时应输入与这些 字符相同的字符;字符相同的字
24、符;例:例:scanf(”%7.2f”,&a););例例:scanf(”%f”,a););例:例:scanf(”a=%d,b=%d”,&a,&b););输入时应该是:输入时应该是:a=3,b=4 4 4、在用、在用“%“%c”c”格式输入字符时,空格字符和转义格式输入字符时,空格字符和转义 字符都作为有效的字符输入。字符都作为有效的字符输入。例:例:scanf(”%d%d”,&a,&b););输入时可为:输入时可为:3 4 3 4 3Tab键键4 例:例:scanf(”%c%c%c”,&c1,&c2,&c3););若输入时为:若输入时为:a b c 则结果为:则结果为:c1=a,c2=,c3=
25、b5 5、doubledouble型数据输入时,必须用型数据输入时,必须用%lf%lf或或%le%le格式格式#include#include main()float a,b,c,s,area;printf(input a,b,c:);scanf(%f,%f,%f,&a,&b,&c);s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);printf(area=%7.2fn,area);例:例:输入三角形边长,求面积。输入三角形边长,求面积。公式:公式:s=(a+b+c)/2;s=(a+b+c)/2;area=sqrt(s*(s-a)*(s-b)*(s-c);input a,b,c:3,4,5 area=6.00例:例:从键盘上输入一个字符,求出它的前导与后继字符,再按由小到大的顺序输出这些字符及ASCIIASCII字符。注意:字符的输入/输出函数,在头文件stdio.hstdio.h中中.C C语言中字符型和整型数据可以互通#include main()char c;int c1,c2;c=getchar();c1=c-1;c2=c+1;printf(%c,%c,%cn,c1,c,c2);printf(%d,%d,%dn,c1,c,c2);作作 业业P52.3.6P52.3.6,3.73.7
限制150内