计算机程序设计基础.ppt

上传人:小飞机 文档编号:5084388 上传时间:2023-06-02 格式:PPT 页数:31 大小:247.03KB
返回 下载 相关 举报
计算机程序设计基础.ppt_第1页
第1页 / 共31页
计算机程序设计基础.ppt_第2页
第2页 / 共31页
计算机程序设计基础.ppt_第3页
第3页 / 共31页
计算机程序设计基础.ppt_第4页
第4页 / 共31页
计算机程序设计基础.ppt_第5页
第5页 / 共31页
点击查看更多>>
资源描述

《计算机程序设计基础.ppt》由会员分享,可在线阅读,更多相关《计算机程序设计基础.ppt(31页珍藏版)》请在三一办公上搜索。

1、计算机程序设计基础,三、数组,中秋佳节,有贵客来到草原,主人要从羊群中选一只肥羊宴请宾客,当然要选最重者。这样就要记录每只羊的重量,如果有成千上万只羊,不可能用一般变量来记录。可以用带有下标的变量,也就是这里要讲的数组。,问题:哪只羊最重?,我们先看例子:用键盘输入10只羊的重量存放到一个名为sheep的数组中,#include void main()/主函数float sheep10;/数组,有10个浮点类型元素,/用于存10只羊每一只的重量float max;/浮点类型变量,存放最肥羊的重量int i,k;/整型变量,i用于计数循环,k用于记录最肥羊的号max=0.0;/赋初值0for(i

2、=0;i10;i=i+1)/计数循环/循环,开始printf(“请输入羊的重量sheep%d=”,i);/提示用scanf(“%f”,/输出最肥羊的编号,程序框图,三、数组,数组的定义类型说明符数组名 常量表达式 例:float sheep10;int a20011000;说明1.数组名的第一个字符应为英文字母;2.用方括号将常量表达式括起;3.常量表达式定义了数组元素的个数;,三、数组,4.数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素;例如int a5 定义了5个数组元素如下:a0,a1,a2,a3,a4这是5个带下标的变量,这5个变量的类型是相同的5.常量表达式中不允许包

3、含变量;例如int n;n=5;int an;不合法!,三、数组,数组初始化是定义数组完成赋初值的任务例如int a5=3,5,4,1,2;a0=3;a1=5;a2=4;a3=1;a4=2;,1.#include void main()int a4;/声明项printf(“a0=%d;a1=%d;a2=%d;a3=%dn”,a0,a1,a2,a3);2.其他不变,改变声明项为int a4=0,1,2,3;,请自己上机做6个实验,3.其他不变,改变声明项为int a4=3,8;4.其他不变,改变声明项为int a4=2,4,6,8,10;5.其他不变,改变声明项为int a4=2,4,6,d;6

4、.其他不变,改变声明项为int n=4;int an=0,1,2,3;,讨论问题:使用筛法求100以内的所有素数,三、数组,思路1.想象将100个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。2.非素数一定是2、3、4 的倍数。3.使用数组,让下标就是100以内的数,让数组元素的值作为筛去与否的标志。比如筛去以后让元素值为1。,方法的依据:1至100这些自然数可以分为三类:单位数:仅有一个数1。素数:是这样一个数,它大于1,且只有1和它自身这样两个正因数。合数:除了1和自身以外,还有其他正因数。,1不是素数,除1以外的自然数,当然只有

5、素数与合数。筛法实际上是筛去合数,留下素数。为了提高筛选法效率,注意到:令n为合数(这里是100),c为n的最小正因数,则据初等数论只要找到c就可以确认n为合数,将其筛去。,程序框图如下:,上述框图很清晰地描述了筛法的思路:1.第一块是一个计数型的循环语句,功能是将prime数组清零。primec=0;c=2,3,1002.第二块是正因数d初始化为 d=2。3.第三块是循环筛数。这里用了一个 do while 语句,属于一种直到型循环,其一般形式为:do循环体语句块while(表达式),直到型循环框图如下:,直到表达式为假时才退出循环,三、数组,例.求的近似值用变量pi表示的值。令表示括号中的

6、每个项当最后一项的绝对值小于等于 时,忽略掉以后的项,#include#include void main()/主函数int sum;/整型变量,总项数float pi,a,b,c;/浮点变量,a为分母,b为分子,c为b除以api=0;sum=0;/初始化a=1.0;b=1.0;c=1.0;/初始化do/直到型循环/循环体,开始pi=pi+c;/累加每一项sum=sum+1;a=a+2.0;/计算每一项的分母b=-b;/分子变正负号c=b/a;/计算每一项/循环体结束while(fabs(c)1e-6);/当c的绝对值大于10的-6次方时,继续/执行循环体,否则退出pi=4*pi;/得到最终结

7、果printf(“pi=%fn”,pi);/输出pi值printf(“sum=%dn”,sum);/输出总项数,参考程序如下:,运行结果 pi=3.141594,sum=500001提问:这种循环当表达式的值永远为真时,会如何?答:会构成死循环,即无休止地执行循环体请实验:1.将b定义为int型看看执行结果并分析为什么2.将1e-6变为1e-7或1e-4看看结果,下面还要介绍另一种循环“当循环”一般形式:while(表达式)语句块;(循环体),分析:假定有x,y且xy,设最小公倍数为z1.z 一定会=x2.z=kx,k=1,2,3.z 一定会被 y 整除用两个最简单的数试一下就可以找到算法.比

8、如 x=5,y=3.,举例:求两个整数的最小公倍数,第一步 z=x,z%y!=0不能整除=5,5%3!=0第二步 z=z+x不能整除=10,10%3!=0第三步 z=z+x=15,15%3=0能整除找到了 z,15就是5和3的最小公倍数,#include#include void main()/主函数int x,y,z,w;/整型变量scanf(“%d%d”,/输出最小公倍数,参考程序如下:,请同学们去比较三种循环的异同之处1.for 循环(计数型循环)2.当型循环(while循环)3.直到型循环(do while 循环)上机将挑肥羊的程序和筛出素数的程序完成,自学与比较,问题:将几个数从大到

9、小排序并输出,介绍冒泡排序法,从表中可以看出最小的一个数第一遍扫描就交换到a6中。如果将a1视为水底,a6视为水面:最轻的(最小的)一个数 1 最先浮到水面,交换到a6;次轻的 2 第二遍扫描交换到a5;再轻的 3 第三遍扫描交换到a4;依此类推,有6个数,前5个数到位需5遍扫描,第6个最重的数自然落在a1中。因此,6个数只需5遍扫描,即j=n-1,n=6。,冒泡排序算法分析:,再看在每遍扫描中,相邻两数组元素的比较次数。当j=1时,i=1,2,n-j。n=6时,比较5次之后a6中有一个最小数到达,这时a6不必再参与比较了。因此在第二遍搜索时,j=2,i=1,2,n-j,即i=1,2,3,4。

10、比较4次之后次小的一个数到达了a5。这时a5不必再参与比较了。因此,j=3时,i=1,2,3;j=4时,i=1,2;j=5时,i=1。理出上述规律后,程序就不难编了,冒泡排序算法分析:,为了表述方便,定义以下3个变量:n 待排序的数的个数,这里 n=6 j 扫描遍数,j=1,2,n-1 i 第j遍扫描待比较元素的下标,i=1,2,n-j,冒泡排序算法设计:,采用两重计数型循环:步骤1:将待排序的数据放入数组中;步骤2:置j为1;步骤3:让i从1到n-j,比较ai与ai+1,如果 ai=ai+1,位置不动;如果 ai ai+1,位置交换,即p=ai;ai=ai+1;ai+1=p;步骤3结束后 an-j+1中的数为最小的数步骤4:让j=j+1;只要j!=n就返回步骤3,将an-j+1的值排好。当j=n时执行步骤5步骤5:输出排序结果,冒泡排序算法设计:,#include void main()/主函数int i,j,p,a7;/整型变量for(i=1;i=6;i=i+1)/键入6个数,放入a数组中printf(“请输入待排序的数a%d=”,i);/提示scanf(“%d”,/格式输出 ai,参考程序如下:,结 束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号