《C程序设计(第四版)(谭浩强编)教程-第2章 算法——程序的灵魂.ppt》由会员分享,可在线阅读,更多相关《C程序设计(第四版)(谭浩强编)教程-第2章 算法——程序的灵魂.ppt(26页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 C 程序设计程序设计Liu Yong Dept.23 USTC 2010 第第2页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010第一讲回顾第一讲回顾1.C语言的特点2.C程序的基本结构3.算法的概念第第3页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 20104 程序设计的任务程序设计的任务1.问题分析:建模。(条件、目标、方法)2.设计算法与数据结构:求解步骤,流程图3.编程与调试:l编辑和编译l编译检查语法错误,运行、分析检查逻辑(算法)错误4.编写程序文档:开发者注释说明和使用者说明第第4页页中国科学技术大学中国科学技术大学
2、C语言程序设计讲义语言程序设计讲义 20105 书写程序时应遵循的规则从书写清晰,便于阅读,理解,维护的角度出发,在书写程序时应遵循以下规则:1.一个说明或一个语句占一行。2.用 括起来的部分,通常表示了程序的某一层次结构。一般与该结构语句的第一个字母对齐,并单独占一行。3.低一层次的语句或说明可比高一层次的语句或说明缩进若干格后书写。以便看起来更加清晰,增加程序的可读性。4.在编程时应力求遵循这些规则,以养成良好的编程风格。第第5页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010 程序例程序例 (1)求正弦值#include#includeint main()
3、double x,s;printf(input number:n);scanf(%lf,&x);s=sin(x);printf(sine of%lf is%lfn,x,s);return(0);include文件包含命令命令扩展名为.h的文件称为头文件定义两个实数变量,以被后面程序使用显示提示信息从键盘获得一个实数x求x的正弦,并把它赋给变量s显示程序运算结果main函数结束第第6页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n求两个数之和#include int main()int a,b,sum;a=123;b=456;sum=a+b;printf(“s
4、um is%d n”,sum);return(0);程序例程序例 (2)第第7页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 20106 程序的灵魂程序的灵魂算法算法n一个程序应包括:1.对数据的描述。在程序中要指定数据的类型和数据的组织形式,即数据结构 data structure2.对操作的描述。即操作步骤,也就是算法 algorithm nNikiklaus Wirth提出的公式:数据结构数据结构+算法算法=程序程序第第8页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010算法的概念n做任何事情都有一定的步骤。为解决一个问题而采取的
5、方法和步骤,就称为算法。n计算机算法:计算机能够执行的算法。n计算机算法可分为两大类:1.数值运算算法:求解数值;2.非数值运算算法:事务管理领域。l如何求 sigma(1.n)?第第9页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010简单算法举例简单算法举例n回顾上一讲【例】求5!=12345。n最原始方法:步骤1:先求12,得到结果2。步骤2:将步骤1得到的乘积2乘以3,得到结果6。步骤3:将6再乘以4,得24。步骤4:将24再乘以5,得120。n这样的算法虽然正确,但太繁。第第10页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2
6、010n改进的算法:设两个变量,使用循环S1:使t=1S2:使i=2S3:使ti,乘积仍然放在在变量t中,可表示为titS4:使i的值+1,即i+1iS5:如果i5,返回重新执行步骤S3以及其后的S4和S5;否则,算法结束。第第11页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n如果计算100!只需将S5:若i5改成i100即可。n如果该求1357911,算法也只需做很少的改动:S1:1tS2:3iS3:titS4:i+2tS5:若i11,返回S3,否则,结束。n该算法不仅正确,而且是计算机较好的算法,因为计算机是高速运算的自动机器,实现循环轻而易举。n思考
7、:若将 S5写成:S5:若i11,返回S3;否则,结束。第第12页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n【例】有50个学生,要求将他们之中成绩在80分以上者打印出来。n如果,n表示学生学号,ni表示第个学生学号;g表示学生成绩,gi表示第个学生成绩则算法可表示如下:S1:1iS2:如果gi80,则打印ni和gi,否则不打印S3:i+1iS4:若i50,返回S2,否则,结束。n(思考:表示学生成绩需要50个变量吗?)第第13页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n【例】判定2000 2500年中的每一年是否闰
8、年,将结果输出。n润年的条件:能被4整除,但不能被100整除的年份;能被100整除,又能被400整除的年份;n设y为被检测的年份,则算法可表示如下:S1:2000yS2:若y不能被4整除,则输出y“不是闰年”,然后转到S6S3:若y能被4整除,不能被100整除,则输出y“是闰年”,然后转到S6S4:若y能被100整除,又能被400整除,输出y“是闰年”否则输出y“不是闰年”,然后转到S6S5:输出y“不是闰年”。S6:y+1yS7:当y2500时,返回S2继续执行,否则,结束。第第14页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n判断条件正确才能得到正确结
9、果;n多个条件的判断顺序有时候是有逻辑关系的,即顺序错了会得到错误结果。第第15页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n【例】求n算法可表示如下:S1:sign=1/符号项S2:sum=1/累加和S3:deno=2 /分母S4:sign=(-1)sign S5:term=sign(1/deno)/当前项S6:sum=sum+termS7:deno=deno+1S8:若deno100,返回S4;否则,结束。第第16页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n【例】对一个大于或等于3的正整数,判断它是不是一个素数。
10、n算法可表示如下:S1:输入n的值S2:i=2S3:n被i除,得余数rS4:如果r=0,表示n能被i整除,则打印n“不是素数”,算法结束;否则执行S5S5:i+1i S6:如果in-1,返回S3;否则打印n“是素数”;然后算法结束。l改进:S6:如果i ,返回S3;否则打印n“是素数”;然后算法结束。第第17页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010算法的特性1.有穷性:一个算法应包含有限的操作步骤而不能是无限的。2.确定性:算法中每一个步骤应当是确定的,而不能应当是含糊的、模棱两可的。3.有零个或多个输入。4.有一个或多个输出。5.有效性:算法中每一个
11、步骤应当能有效地执行,并得到确定的结果。n对于程序设计人员,必须会设计算法,并根据算法写出程序。第第18页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010用流程图表示算法用流程图表示算法n统计学生成绩的例子第第19页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n判断闰年的例子第第20页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010用计算机语言实现算法用计算机语言实现算法n我们的任务是用计算机解题,就是用计算机实现算法;n用计算机语言表示算法必须严格遵循所用语言的语法规则。n【例】求12345用
12、C语言表示。int main()int i,t;t=1;i=2;while(i=5)t=t*i;i=i+1;printf(“%d”,t);第第21页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010对比:算法的表示与实现方式对比:算法的表示与实现方式1.自然语言2.流程图3.伪语言4.计算机语言n请课后思考:交换两个(或两组)数据的值,第第22页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010结构化程序设计方法结构化程序设计方法nN。Wirth 公式:数据结构数据结构+算法算法=程序程序即 结构特性设计结构特性设计+过程特性设计过程
13、特性设计结构化程序设计:面向结构化程序设计:面向过程过程 (分别考虑数据和过程)(分别考虑数据和过程)【注注】面向对象程序设计:面向对象(数据和过程的封装)面向对象程序设计:面向对象(数据和过程的封装)n结构化算法l由基本结构顺序组成的算法结构,在基本结构之间不存在向前或向后的跳转第第23页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010n结构化程序设计方法l自顶向下l逐步细化l模块化设计l结构化编码n核心思想是算法设计:自顶向下、逐步细化-讲一个复杂任务逐步分拆,逐层细化到便于理解和描述的程度;最终形成一个由若干独立模块组成的树状层次结构第第24页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010第第25页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010第第26页页中国科学技术大学中国科学技术大学 C语言程序设计讲义语言程序设计讲义 2010Questions?n作业:n15页:5,6n36页:4-(3);4-(5)