计算机程序设计竞赛-第1讲.ppt
《计算机程序设计竞赛-第1讲.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计竞赛-第1讲.ppt(87页珍藏版)》请在三一办公上搜索。
1、,计算机程序设计竞赛,信科系专职教师:赵小蕾邮箱:,中山大学新华学院,课程介绍及要求,课程类别:全校公选课总学时数:36(实操课)开课目的:为信息科学系竞赛项目:第六届“蓝桥杯软件人才与设计大赛”培养人才。主要培养学生解决实际问题的编程能力、培养学生的创新思维。程序是自己设计出来的,而不是某个固定的方程式。,主要内容,1.1 什么是算法,一个程序应包括两个方面的内容:,对数据的描述:数据结构(data structure)对操作的描述:算法(algorithm),数据结构+算法=程序,数据结构算法程序设计方法语言工具,算法是解决“做什么”和“怎么做”的问题。即是为解决一个问题而采取的方法和步骤
2、。,1.2 简单算法举例,步骤1:先求12,得到结果2步骤2:将步骤1得到的乘积2再乘以3,得到结果6步骤3:将6再乘以4,得24步骤4:将24再乘以5,得120,1.2 简单算法举例,何为算法“烧水泡茶”有如下五道工序:1、烧开水2、洗茶壶3、茶杯4、拿茶叶5、泡茶。烧开水、洗茶壶、茶杯,拿茶叶是泡茶的前提。其中烧开水需要15分钟,洗茶壶需要2分钟,洗茶杯需要1分钟,拿茶叶需要1分钟,泡茶需要1分钟。下面是两种“烧水泡茶”的方法。方法1:第一步:烧水;第二步:水烧开后,洗刷茶具,拿茶叶;第三步:沏茶。方法2:第一步:烧水;第二步:烧水过程中,洗刷茶具,拿茶叶;第三步:水烧开后沏茶。,1.3
3、算法的特性,有穷性,一个算法应包含有限的操作步骤,而不能是无限的。,确定性,算法中的每一个步骤都应当是确定的,不能含糊。,输入,有零个或多个输入,从外界获取必要信息。,输出,有一个或者多个输出,得到问题的解。,有效性,每一个步骤有效执行,得到确定的结果。,1.4 算法的表示,算法的表示自然语言传统流程图N-S流程图伪代码计算机语言,1.4 算法的表示,传统流程图(流程图)美国国家标准化协会ANSI(American National Standard Institute)规定了一些常用的流程图符号:,1.4 算法的表示,1t,i5,开始,2i,t*it,i+1i,结束,N,Y,1t,i5,开始
4、,2i,t*(2*i-1)t,i+1i,结束,N,Y,图1,图2,1.4 算法的表示,流程图的连接点举例,位置不够,防止交叉,1.4 算法的表示,流程图表示三种基本结构顺序结构,A,B,1.4 算法的表示,流程图表示三种基本结构选择结构,A,B,Y,N,A,Y,N,1.4 算法的表示,流程图表示三种基本结构循环结构,A,Y,N,A,Y,N,当型循环结构,直到型循环结构,1.4 算法的表示,N-S流程图(N-S图)由I.Nassi和Shneiderman提出的新的流程图形式,称为N-S流程图。其三种基本结构的N-S图表示:,顺序结构,选择结构,循环结构(当型),循环结构(直到型),1.4 算法的
5、表示,例2 求12345:即求5!的N-S图算法表示:,直到i5,1t,输出t,2i,t*it,i+1i,1t,i5,开始,2i,t*it,i+1i,结束,N,Y,输出t,N-S图,VS,1.4 算法的表示,例3 输入50名学生的学号和成绩,并将50名学生中成绩高于80分者的学号和成绩输出。算法用N-S图表示,如右图。练习:使用流程图表示算法。,直到i50,1i,1i,i+1i,输入ni、gi,i+1i,直到i50,gi80,否,是,输出ni,gi,1.4 算法的表示,1i,i50,开始,i+1i,结束,N,Y,输入ni、gi,1i,gi80,输出ni、gi,i+1i,i50,N,Y,Y,N,
6、例3 流程图如下:,1.4 算法的表示,例4 判定2000-2500年中的每一年是否闰年,并将结果输出。闰年的条件:能被4整除,但不能被100整除的年份 都是闰年,如2008、2012、2048年。能被400整除的年份是闰年,如2000年。,year不能被4整除,非闰年,year被4整除,但不能被100整除,闰年,year被100整除,又能被400整除,闰年,其他,非闰年,逐渐缩小判断的范围,1.4 算法的表示,例4 判定2000-2500年中的每一年是否闰年,并将结果输出。,N,Y,N,Y,Y,N,Y,N,1.4 算法的表示,例4 判定2000-2500年中的每一年是否闰年,并将结果输出。,
7、直到year2500,2000year,year+1year,否,是,year%4为0,否,是,输出year非闰年,year%100不为0,year%400为0,是,否,输出year非闰年,输出year闰年,输出year闰年,1.4 算法的表示,用伪代码表示算法概念:伪代码是用介于自然语言和计算机语言之间的文字和符号,用来描述算法。特点:如一篇文章,自上而下地写下来。每一行(或几行)表示一个基本操作。它不用图形符号,因此书写方便、格式紧凑,也比较好懂,也便于向计算机语言算法(即程序)过渡。,23,1.4 算法的表示,例5:“打印x的绝对值”,用伪代码表示算法。,用英文伪代码表示:IF x is
8、 positive THEN print x ELSE print-x也可以用汉字伪代码表示:若 x为正 打印 x 否则 打印-x也可以中英文混用,如:IF x 为正 print x ELSE print-x,1.4 算法的表示,用计算机语言表示算法概念:用计算机语言描述算法,就是用计算机语言编写程序。计算机是无法识别流程图和伪代码的。只有用计算机语言编写的程序才能被计算机执行。特点:设计算法的目的是为了实现算法。用计算机语言表示算法,必须严格遵循所用的语言的语法规则。,1.4 算法的表示,例6:求5!用C语言表示。N-S图为:,#include int main()int i,t;t=1;i
9、=2;while(i=5)t=t*i;i=i+1;printf(%dn,t);return 0;,当i=5,1t,输出t,2i,t*it,i+1i,1.4 算法的表示,算法广义地说,为解决一个问题而采取的方法和步骤,称为“算法”。对同一个问题,可以有不同的算法。计算机算法可分为两大类别:数值运算算法,目的是求数值解。非数值运算算法,包括的面十分广泛,最常见的是用于事务管理领域。注意:,写出了C程序,仍然只是描述了算法,并未实现算法。只有运行程序才是实现算法。,1.5 算法复杂度的分析,算法的复杂性越高,所需的计算机资源越多。最重要的计算机资源是时间资源与空间资源。需要计算机时间资源的量称为时间
10、复杂度,需要计算机空间资源的量称为空间复杂度。时间复杂度与空间复杂度集中反映算法的效率。,1.5 算法复杂度的分析,一个算法的时间复杂度是指算法运行所需的时间。一个算法的运行时间取决于算法所需执行的语句(运算)的多少。算法的时间复杂度通常用该算法执行的总语句(运算)的数量级决定。,1.5 算法复杂度的分析,算法的执行频数的数量级直接决定算法的时间复杂度。,1.5 算法复杂度的分析,2个语句各执行1次,共执行2次。时间复杂度为O(1),(1)x=x+1;s=s+x;,(2)for(k=1;k=n;k+)x=x+y;y=x+y;s=x+y;,“k=1”执行1次;“k=n”与“k+”各执行n次;3个
11、赋值语句,每个赋值语句各执行n次;共执行5n+1次.时间复杂度为O(n).,1.5 算法复杂度的分析,例1-3 试计算下面三个程序段的执行频数,(3)for(t=1,k=1;k=n;k+)t=t*2;for(j=1;j=t;j+)s=s+j;,“t=1”与“k=1”各执行1次;“k=n”与“k+”各执行n次;“t=t*2”执行n次;“j=1”执行n次;“j=t”、“j+”与内循环的赋值语句“s=s+j”各执行频数为:总的执行频数为:,1.5 算法复杂度的分析,在估算算法的时间复杂度时,为简单计,以后只考虑内循环语句的执行频数,而不细致计算各循环设计语句及其它语句的执行次数,这样简化处理不影响算
12、法的时间复杂度。,例1-4 估算以下程序段所代表算法的时间复杂度。for(k=1;k=n;k+)for(j=1;j=k;j+)x=k+j;s=s+x;,每个赋值语句执行频率为n(n+1)/2,该算法的时间复杂度为:O(n2),1.5 算法复杂度的分析,一个程序运行所需的存储空间通常包括固定空间需求与可变空间需求两部分。固定空间需求包括程序代码、常量与静态变量等所占的空间。可变空间需求包括局部作用域非静态变量所占用的空间、从堆空间中动态分配的空间与调用函数所需的系统栈空间等。,算法的空间复杂度是指算法运行的存储空间,是实现算法所需的内存空间的大小。,1.6 学好算法的秘诀,(1)学的要深入,基础
13、要扎实 基础的作用不必多说,在大学课堂上曾经讲过了很多次,在此重点说明“深入”。职场不是学校,企业要求你能高效的完成项目功能,但是现实中的项目种类繁多,我们需要从根上掌握C语言算法技术的精髓。走马观花式的学习已经被社会所淘汰,入门水平不会被开发公司所接受,他们需要的是高手。(2)恒心、演练、举一反三 学习编程的过程是枯燥的过程,我们需要将学习算法当成是自己的乐趣,只有做到持之以恒才能有机会学好。另外编程最注重实践,最害怕闭门造车。每一个语法,每一个知识点,都要反复用实例来演练,这样才能加深对知识的理解。并且要做到举一反三,只有这样才能对知识的深入理解。(3)语言之争的时代更要学会坚持,2.经典
14、算法,九大大算法思想枚举算法思想递推算法思想递归算法思想分治算法思想贪心算法思想试探法算法思想迭代算法思想动态规划算法思想模拟算法思想,2.1 经典算法枚举法,比较笨的枚举算法思想 枚举算法的思想是:将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,保留合适的,丢弃不合适的。在C语言中,枚举算法一般使用while循环实现。枚举算法一般按照如下三个步骤进行。(1)题解的可能范围,不能遗漏任何一个真正解,也要避免有重复。(2)判断是否是真正解的方法。(3)使可能解的范围降至最小,以便提高解决问题的效率。,2.1 经典算法枚举法,使用枚举算法解题的基本思路如下所示。(1)确定枚举对象、
15、枚举范围和判定条件;(2)逐一枚举可能的解,验证每个解是否是问题的解。,2.1 经典算法枚举法,2.枚举的框架描述,n=0;for(k=;k;k+)/控制枚举范围 if()/根据约束条件实施筛选 printf();/输出解 n+;/统计解的个数,2.1 经典算法枚举法,举例:完美综合式 案例提出:把数字1,2,.,9这9个数字分别填入以下含加、减、乘、除与乘方()的综合运算式中的9个中+-=0 要求数字1,2,.,9这9个数字在式中出现一次且只出现一次,且约定数字“1”不出现在乘、乘方的一位数中。,2.1 经典算法枚举法,设置整数变量,其中ab用a自乘b次实现。即要求的综合运算式为:ab+z/
16、c-d*e=0 设置a,b,c,d,e循环,对每一组a,b,c,d,e,计算z=(d*e-ab)*c,省略z循环。检测z是否为二位数。若z非二位数,则返回。对6个整数进行数字分离,设置f数组对分离的9个数字进行统计,f(x)即为数字x(19)的个数。若某f(x)不为1,标记t=1,则返回。若所有f(x)全为1,保持标记t=0,则输出。,1.枚举设计要点,2.1 经典算法枚举法,for(a=2;a98)continue;m1=a;m2=b;m3=c;m4=d;m5=e;m6=z;,2.1 经典算法枚举法,for(x=0;x0)x=y%10;fx=fx+1;y=y/10;for(t=0,x=1;x
17、=9;x+)if(fx!=1)t=1;break;if(t=0)则输出一个解;,2.2 经典算法递推算法,聪明一点的递推算法思想递推算法犹如稳重的有经验的老将,使用“稳扎稳打”的策略,不断利用已有的信息推导出新的东西。在日常应用中有如下两种递推算法。(1)顺推法:从已知条件出发,逐步推算出要解决问题的方法。例如斐波那契数列就可以通过顺推法不断递推算出新的数据。(2)逆推法:从已知的结果出发,用迭代表达式逐步推算出问题开始的条件,即顺推法的逆过程。,递推数列,案例提出:已知递推数列:a(1)=1,a(2i)=a(i)+1,a(2i+1)=a(i)+a(i+1)(i为正整数)试求该数列的第n项与前
18、n项中哪些项最大?最大值为多少?。,2.2 经典算法递推算法,1.递推设计要点,(1)设置a数组,赋初值a(1)=1。(2)根据递推式,在i循环中据项序号i(2n)为奇或偶作不同递推:若 mod(i,2)=0,a(i)=a(i/2)+1 若 mod(i,2)=1,a(i)=a(i+1)/2)+a(i-1)/2)(3)每得一项a(i),与最大值max作比较:如果 a(i)max,则 max=a(i)。(4)在得到最大值max后,最后在所有n项中搜索哪些项为最大项(因最大项可能多于一项),并输出最大值max及所有搜索得到的最大项。,2.2 经典算法递推算法,2.递推设计描述,scanf(%d,猴子
19、爬山,案例提出:一个顽猴在一座有30级台阶的小山上爬山跳跃,猴子上山一步可跳1级,或跳3级,试求上山的30级台阶有多少种不同的爬法。,2.2 经典算法递推算法,设爬k级台阶的不同爬法为f(k)种。(1)探求f(k)的递推关系。上山最后一步到达第30级台阶,共有f(30)种不同的爬法;到第30级之前位于哪一级呢?无非是位于第29级(上跳1级即到),有f(29)种;或位于第27级(上跳3级即到),有f(27)种;于是有 f(30)=f(29)+f(27)一般地有递推关系:f(k)=f(k-1)+f(k-3)(k3)(2)确定初始条件f(1)=1;即1=1f(2)=1;即2=1+1f(3)=2;即3
20、=1+1+1;3=3,1.递推设计要点,2.2 经典算法递推算法,2.递推设计描述,printf(请输入台阶总数n:);scanf(%d,2.2 经典算法递推算法,2.3 经典算法递归算法,充分利用自己的递归算法思想 在计算机编程应用中,递归算法对解决大多数问题是十分有效的,它能够使算法的描述变得简洁而且易于理解。递归算法有如下3个特点。(1)递归过程一般通过函数或子过程来实现。(2)递归算法在函数或子过程的内部,直接或者间接地调用自己的算法。(3)递归算法实际上是把问题转化为规模缩小了的同类问题的子问题,然后再递归调用函数或过程来表示问题的解。,2.3 经典算法递归算法,在使用递归算法时,读
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 程序设计 竞赛

链接地址:https://www.31ppt.com/p-6342638.html