收藏 分享(赏)

计算机语言与程序设计 (4).ppt

上传人:wspkg9802 文档编号:8241160 上传时间:2019-06-16 格式:PPT 页数:30 大小:160.50KB
下载 相关 举报
计算机语言与程序设计 (4).ppt_第1页
第1页 / 共30页
计算机语言与程序设计 (4).ppt_第2页
第2页 / 共30页
计算机语言与程序设计 (4).ppt_第3页
第3页 / 共30页
计算机语言与程序设计 (4).ppt_第4页
第4页 / 共30页
计算机语言与程序设计 (4).ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

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

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

3、下:a0, a1, a2, a3, a4这是5个带下标的变量,这5个变量的类型是相同的5.常量表达式中不允许包含变量;例如 int n;n = 5;int an; 不合法!,7,三、数组,数组初始化是定义数组完成赋初值的任务例如int a5 = 3, 5, 4, 1, 2 ;a0 = 3; a1 = 5; a2 = 4;a3 = 1; a4 = 2;,8,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

4、;,请自己上机做6个实验,9,3.其他不变,改变声明项为int a4 = 3, 8 ;4.其他不变,改变声明项为int a4 = 2, 4, 6, 8, 10 ;5.其他不变,改变声明项为int a4 = 2, 4, 6, d ;6.其他不变,改变声明项为int n=4;int an = 0, 1, 2, 3 ;,10,讨论问题:使用筛法求100以内的所有素数,三、数组,思路 1.想象将100个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。 2.非素数一定是2、3、4 的倍数。 3.使用数组,让下标就是100以内的数,让数组元素的值作

5、为筛去与否的标志。比如筛去以后让元素值为1。,11,方法的依据:1至100这些自然数可以分为三类: 单位数:仅有一个数1。 素数: 是这样一个数,它大于1,且只有1和它自身这样两 个正因数。 合数: 除了1和自身以外,还有其他正因数。,1不是素数,除1以外的自然数,当然只有素数与合数。 筛法实际上是筛去合数,留下素数。为了提高筛选法效率,注意到:令n为合数(这里是100),c为n的最小正因数,则据初等数论只要找到c就可以确认n为合数,将其筛去。,12,程序框图如下:,13,上述框图很清晰地描述了筛法的思路:1.第一块是一个计数型的循环语句,功能是将prime数组清零。primec = 0; c

6、 = 2, 3, ,1002.第二块是正因数d初始化为 d = 2。3.第三块是循环筛数。这里用了一个 do while 语句,属于一种直到型循环,其一般形式为:do循环体语句块while ( 表达式 ),14,直到型循环框图如下:,直到表达式为假时才退出循环,15,三、数组,例.求的近似值用变量pi表示的值。令 表示括号中的每个项当最后一项的绝对值小于等于 时,忽略掉以后的项,16,#include #include void main() / 主函数 int sum; / 整型变量,总项数float pi, a, b, c; / 浮点变量,a为分母,b为分子,c为b除以api = 0; s

7、um = 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; / 得到最终结果printf(“pi=%fn”, pi); / 输出pi值printf(“sum=%dn”, sum); / 输出

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

9、个整数的最小公倍数,20,第一步 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的最小公倍数,21,#include #include void main() / 主函数 int x, y, z, w; / 整型变量scanf(“%d%d”, / 输出最小公倍数 ,参考程序如下:,22,请同学们去比较三种循环的异同之处1. for 循环(计数型循环) 2. 当型循环(while循环)3. 直到型循环(do

10、 while 循环)上机将挑肥羊的程序和筛出素数的程序完成,自学与比较,23,问题:将几个数从大到小排序并输出,介绍冒泡排序法,24,25,从表中可以看出最小的一个数第一遍扫描就交换到a6中。如果将a1视为水底,a6视为水面:最轻的(最小的)一个数 1 最先浮到水面,交换到a6; 次轻的 2 第二遍扫描交换到a5; 再轻的 3 第三遍扫描交换到a4; 依此类推,有6个数,前5个数到位需5遍扫描,第6个最重的数自然落在a1中。因此,6个数只需5遍扫描,即j=n-1, n=6。,冒泡排序算法分析:,26,再看在每遍扫描中,相邻两数组元素的比较次数。当j=1时,i=1,2,n-j。n=6时,比较5次

11、之后a6中有一个最小数到达,这时a6不必再参与比较了。因此在第二遍搜索时,j=2, i=1,2,n-j,即i=1,2,3,4。比较4次之后次小的一个数到达了a5。这时a5不必再参与比较了。因此,j=3时,i=1,2,3;j=4时,i=1,2;j=5时,i=1。理出上述规律后,程序就不难编了,冒泡排序算法分析:,27,为了表述方便,定义以下3个变量:n 待排序的数的个数,这里 n=6j 扫描遍数,j=1,2,n-1i 第j遍扫描待比较元素的下标,i=1,2,n-j,冒泡排序算法设计:,28,采用两重计数型循环:步骤1: 将待排序的数据放入数组中;步骤2: 置j为1;步骤3: 让i从1到n-j,比

12、较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: 输出排序结果,冒泡排序算法设计:,29,#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 ,参考程序如下:,30,结 束,

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报