1、第五章第五章选择、排队问题的选择、排队问题的解题思路解题思路 与与 数据组织数据组织1中秋佳节,有贵客来到草原,主人要中秋佳节,有贵客来到草原,主人要从羊群中选一只肥羊宴请宾客,当然要选最从羊群中选一只肥羊宴请宾客,当然要选最重者。这样就要记录每只羊的重量,如果有重者。这样就要记录每只羊的重量,如果有成千上万只羊,不可能用一般变量来记录。成千上万只羊,不可能用一般变量来记录。可以用带有下标的变量,也就是这里要讲的可以用带有下标的变量,也就是这里要讲的数组数组。问题:哪只羊最重?问题:哪只羊最重?我们先看例子:用键盘输入我们先看例子:用键盘输入10只羊的重量存放到只羊的重量存放到一个名为一个名为
2、sheep的数组中的数组中2/*/*/*/*程序名:程序名:程序名:程序名:5_1.cpp5_1.cpp(数组示例)(数组示例)(数组示例)(数组示例)*/*/*作作作作 者:者:者:者:wuwh *wuwh */*/*编制时间:编制时间:编制时间:编制时间:20022002年年年年9 9月月月月2020日日日日 */*/*主要功能:找出最重的羊主要功能:找出最重的羊主要功能:找出最重的羊主要功能:找出最重的羊 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令#include#include /预编译命令预编译命令预编译命令预编译命令void main()
3、void main()/主函数主函数主函数主函数 float sheep10;float sheep10;/数组,有数组,有数组,有数组,有1010个浮点类型元素,个浮点类型元素,个浮点类型元素,个浮点类型元素,/用于存用于存用于存用于存1010只羊每一只的重量只羊每一只的重量只羊每一只的重量只羊每一只的重量 memsetmemset(sheep,0,(sheep,0,sizeofsizeof(sheep);/(sheep);/初始化数组元素为初始化数组元素为初始化数组元素为初始化数组元素为0 0float float bigsheepbigsheep=0.0f;=0.0f;/浮点类型变量,存
4、放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量intint i=0,i=0,bigsheepNobigsheepNo=0;=0;/整型变量,整型变量,整型变量,整型变量,i i 用于计数循环,用于计数循环,用于计数循环,用于计数循环,/bigsheepNobigsheepNo用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号 3#include float sheep10;memset(sheep,0,sizeof(sheep);4for(i=0;i10;i=i+1)for(i=0;i10;i=i+1)/计数循环计
5、数循环计数循环计数循环 /循环,开始循环,开始循环,开始循环,开始coutcout请输入羊的重量请输入羊的重量请输入羊的重量请输入羊的重量sheep i =;/sheep i sheepi;sheepi;/输入第输入第输入第输入第i i只羊的重量只羊的重量只羊的重量只羊的重量if(if(bigsheepbigsheep sheepi)sheepi)/如果第如果第如果第如果第i i只羊比当前最肥羊大只羊比当前最肥羊大只羊比当前最肥羊大只羊比当前最肥羊大 bigsheepbigsheep=sheepi;=sheepi;/让第让第让第让第i i只羊为当前最肥羊只羊为当前最肥羊只羊为当前最肥羊只羊为当
6、前最肥羊bigsheepNobigsheepNo=i;=i;/纪录第纪录第纪录第纪录第i i只羊的编号只羊的编号只羊的编号只羊的编号 /循环结束循环结束循环结束循环结束/输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量 coutcout 最肥羊的重量为最肥羊的重量为最肥羊的重量为最肥羊的重量为bigsheepbigsheependlendl;/输出该羊的编号输出该羊的编号输出该羊的编号输出该羊的编号 coutcout 最肥羊的编号为最肥羊的编号为最肥羊的编号为最肥羊的编号为bigsheepNobigsheepNoendlendl;5n nfor(i=0;i 10;i=i+1 )
7、for(i=0;i 10;i=i+1 )n n n ncoutcout“请输入羊的重量请输入羊的重量请输入羊的重量请输入羊的重量 sheepsheep n n i “i “sheepisheepi;n nif(if(bigsheepbigsheep sheepisheepi)n n n nbigsheepbigsheep=sheepisheepi;n nbigsheepNobigsheepNo=i;=i;n n n n 6程程 序序 框框 图图7 类型说明符类型说明符数组名数组名 常量表达式常量表达式 例:例:例:例:float sheep10;float sheep10;intint a20
8、011000;a20011000;说明说明1.1.数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;2.2.用用用用方括号方括号方括号方括号将将将将常量表达式常量表达式常量表达式常量表达式括起;括起;括起;括起;3.3.常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;数组的定义数组的定义84.4.数组下标从数组下标从数组下标从数组下标从 0 0 开始。如果定义开始。如果定义开始。如果定义开始。如果定义 5 5 个元素,是从第个元素,是从第
9、个元素,是从第个元素,是从第 0 0 个元素至第个元素至第个元素至第个元素至第 4 4 个元素;个元素;个元素;个元素;例如例如例如例如int a5 定义了定义了5个数组元素如下个数组元素如下:a0,a1,a2,a3,a4这是这是这是这是 5 5 个带下标的变量,这个带下标的变量,这个带下标的变量,这个带下标的变量,这5 5个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的 95.5.常量表达式中不允许包含变量常量表达式中不允许包含变量n例如例如int n;n n=5;nint an;不合法!不合法!n因为因为 n 是变量,不是常量是变量,不是常量10n n#de
10、fine N 100n n#define M 200n nint a N ;n nlong b N+M ;n ndouble g M+6 ;n n以上定义是合法的以上定义是合法的11第一种方法第一种方法 直接声明时初始化直接声明时初始化例如例如例如例如int a5=3,5,4,1,2;a0=3;a1=5;a2=4;a3=1;a4=2;a0=3;a1=5;a2=4;a3=1;a4=2;数组初始化数组初始化12第二种方法第二种方法 使用使用 memset 函数函数格式为格式为memset(数组名数组名,初始化值初始化值,sizeof(数组名数组名)举例:举例:memset(sheep,0,size
11、of(sheep);含义是将名为含义是将名为 sheep 的数组中的全部元素均初的数组中的全部元素均初始化为始化为 0。更深一层是说让系统为。更深一层是说让系统为 sheep10 所所分配的内存单元从分配的内存单元从 sheep0 为标志的地址单元为标志的地址单元到该数组的全部地址单元都赋以到该数组的全部地址单元都赋以 0。调用此库调用此库函数需要加入头文件函数需要加入头文件 。131.1.1.1.#include include void main()void main()intint a4;a4;/声明项声明项声明项声明项coutcout a0 a0 endlendl;coutcout a
12、1 a1 endlendl;coutcout a2 a2 endlendl;coutcout a3 a3 endlendl;2.2.2.2.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为intint a4=0,1,2,3;a4=0,1,2,3;请自己上机做请自己上机做6个实验个实验143.3.3.3.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为intint a4=3,8;a4=3,8;4.4.4.4.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为intint a4=2
13、,4,6,8,10;a4=2,4,6,8,10;5.5.5.5.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为intint a4=2,4,6,d;a4=2,4,6,d;6.6.6.6.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为intint n=4;n=4;intint an=0,1,2,3;an=0,1,2,3;15讨讨 论论 问问 题题使用筛法求使用筛法求100100以内的所有素数以内的所有素数16思路思路1.1.想象将想象将想象将想象将100100100100个数看作沙子和小石头子,让小石头子权个数看作
14、沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。2.2.非素数一定是非素数一定是非素数一定是非素数一定是 2 2 2 2、3 3 3 3、4 4 4 4 的倍数。的倍数。的倍数。的倍数。3.3.使用数组,让下标就是使用数组,让下标就是使用数组,让下标就是使用数
15、组,让下标就是100100100100以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为1 1 1 1。17方法的依据:方法的依据:1 1 1 1至至至至100100100100这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数1 1 1 1。素数:素数:素数:素数:
16、是这样一个数,它大于是这样一个数,它大于是这样一个数,它大于是这样一个数,它大于1 1 1 1,且只有,且只有,且只有,且只有1 1 1 1和它自身这样两和它自身这样两和它自身这样两和它自身这样两个正因数。个正因数。个正因数。个正因数。合数:合数:合数:合数:除了除了除了除了1 1 1 1和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。1 1 1 1 不是素数,除不是素数,除不是素数,除不是素数,除 1 1 1 1 以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。以外的自然数,当然只有素数与合数。筛法实际上是筛去合数,留下素数。筛法实际上是筛去合数,留下素数。筛法实际上是筛去合数,留下素数。筛法实际上是筛去合数,留下素数。18n n为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:n n令令令令 n n 为合数(这里是为合数(这里是为合数(这里是为合数(这里是100100),),),),n n c c 为为为为 n
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1