收藏 分销(赏)

程序的设计基础一.pptx

上传人:可**** 文档编号:1681399 上传时间:2024-05-07 格式:PPTX 页数:54 大小:314.98KB 下载积分:10 金币
下载 相关 举报
程序的设计基础一.pptx_第1页
第1页 / 共54页
程序的设计基础一.pptx_第2页
第2页 / 共54页


点击查看更多>>
资源描述
1 6 数据组织与处理数据组织与处理(1)(1)数组数组2数组的概念、定义和初始化数组的概念、定义和初始化筛法的解题思路筛法的解题思路冒泡排序的思路冒泡排序的思路二维数组二维数组学学 习习 目目 标标31.1.数组:定义、初始化、操作与应用数组:定义、初始化、操作与应用2.2.筛法:筛法:do_whiledo_while循环、循环、whilewhile循环、循环、求质数求质数3.3.排序:冒泡排序的算法排序:冒泡排序的算法4.4.二维数组:定义、初始化、应用二维数组:定义、初始化、应用内内 容容 要要 点点4 6.1 数数 组组5中秋佳节,有贵客来到草原,主人要中秋佳节,有贵客来到草原,主人要从羊群中选一只肥羊宴请宾客,当然要选最从羊群中选一只肥羊宴请宾客,当然要选最重者。这样就要记录每只羊的重量,如果有重者。这样就要记录每只羊的重量,如果有成千上万只羊,不可能用一般变量来记录。成千上万只羊,不可能用一般变量来记录。可以用带有下标的变量,也就是这里要讲的可以用带有下标的变量,也就是这里要讲的数组数组。问题:哪只羊最重?问题:哪只羊最重?我们先看例子:用键盘输入我们先看例子:用键盘输入10只羊的重量存放到只羊的重量存放到一个名为一个名为sheep的数组中的数组中6/*/*/*/*程序名:程序名:程序名:程序名:6_1.cpp6_1.cpp(数组示例)(数组示例)(数组示例)(数组示例)*/*/*作作作作 者:者:者:者:wuwh *wuwh */*/*编制时间:编制时间:编制时间:编制时间:20022002年年年年9 9月月月月2020日日日日 */*/*主要功能:找出最重的羊主要功能:找出最重的羊主要功能:找出最重的羊主要功能:找出最重的羊 */*/*#include#include /预编译命令预编译命令预编译命令预编译命令#include#include /预编译命令预编译命令预编译命令预编译命令using namespace std;using namespace std;int main()int main()/主函数主函数主函数主函数 float sheep10;float sheep10;/数组,有数组,有数组,有数组,有1010个浮点类型元素,个浮点类型元素,个浮点类型元素,个浮点类型元素,/用于存用于存用于存用于存1010只羊每一只的重量只羊每一只的重量只羊每一只的重量只羊每一只的重量 memset(sheep,0,sizeof(sheep);/memset(sheep,0,sizeof(sheep);/初始化数组元素为初始化数组元素为初始化数组元素为初始化数组元素为0 0float bigsheep=0.0;float bigsheep=0.0;/浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量浮点类型变量,存放最肥羊的重量int i=0,bigsheepNo=0;int i=0,bigsheepNo=0;/整型变量,整型变量,整型变量,整型变量,i i 用于计数循环,用于计数循环,用于计数循环,用于计数循环,/bigsheepNo/bigsheepNo用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号用于记录最肥羊的号 7for(i=0;i10;i=i+1)for(i=0;i10;i=i+1)/计数循环计数循环计数循环计数循环 /循环,开始循环,开始循环,开始循环,开始 coutcout请输入羊的重量请输入羊的重量请输入羊的重量请输入羊的重量sheepsheep i i sheepi;cin sheepi;/输入第输入第输入第输入第i i只羊的重量只羊的重量只羊的重量只羊的重量 if(bigsheep sheepi)if(bigsheep sheepi)/如果第如果第如果第如果第i i只羊比当前最肥羊大只羊比当前最肥羊大只羊比当前最肥羊大只羊比当前最肥羊大 bigsheep=sheepi;bigsheep=sheepi;/让第让第让第让第i i只羊为当前最肥羊只羊为当前最肥羊只羊为当前最肥羊只羊为当前最肥羊 bigsheepNo=i;bigsheepNo=i;/纪录第纪录第纪录第纪录第i i只羊的编号只羊的编号只羊的编号只羊的编号 /循环结束循环结束循环结束循环结束 /输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量输出最肥羊的重量 cout cout 最肥羊的重量为最肥羊的重量为最肥羊的重量为最肥羊的重量为bigsheependl;bigsheependl;/输出该羊的编号输出该羊的编号输出该羊的编号输出该羊的编号 cout cout 最肥羊的编号为最肥羊的编号为最肥羊的编号为最肥羊的编号为bigsheepNoendl;bigsheepNoendl;return 0;return 0;8程程 序序 框框 图图9 类型说明符类型说明符数组名数组名 常量表达式常量表达式 例:例:例:例:float sheep10;float sheep10;int a20011000;int a20011000;说明说明1.1.数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;数组名的第一个字符应为英文字母;2.2.用用用用方括号方括号方括号方括号将将将将常量表达式常量表达式常量表达式常量表达式括起;括起;括起;括起;3.3.常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;常量表达式定义了数组元素的个数;数组的定义数组的定义104.4.数组下标从数组下标从数组下标从数组下标从 0 0 开始。如果定义开始。如果定义开始。如果定义开始。如果定义 5 5 个元素,是从第个元素,是从第个元素,是从第个元素,是从第 0 0 个元素至第个元素至第个元素至第个元素至第 4 4 个元素;个元素;个元素;个元素;例如例如例如例如int a5 定义了定义了5个数组元素如下个数组元素如下:a0,a1,a2,a3,a4这是这是这是这是 5 5 个带下标的变量,这个带下标的变量,这个带下标的变量,这个带下标的变量,这5 5个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的个变量的类型是相同的 115.5.常量表达式中不允许包含变量常量表达式中不允许包含变量例如例如int n;n=5;int an;不合法!不合法!因为因为 n 是变量,不是常量是变量,不是常量12#define N 100 /宏定义,宏定义,N为常数为常数100#define M 200 /宏定义,宏定义,M为常数为常数200int a N ;/定义有定义有定义有定义有100100个元素的整型数组个元素的整型数组个元素的整型数组个元素的整型数组a along b N+M ;/定义有定义有定义有定义有300300个元素的长整型数组个元素的长整型数组个元素的长整型数组个元素的长整型数组b bdouble g M+6 ;/定义有定义有定义有定义有206206个元素的双精度实个元素的双精度实个元素的双精度实个元素的双精度实 /型数组型数组型数组型数组g g以上定义是合法的以上定义是合法的#define N 100 为命令行,不是语句,程序在为命令行,不是语句,程序在 编译时遇到编译时遇到N 就用就用100替换。在命令行中定义替换。在命令行中定义的符号名的符号名N,也被称为符号常量,也被称为符号常量N。13第一种方法第一种方法 直接在定义时初始化直接在定义时初始化例如例如例如例如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;数组初始化数组初始化14第二种方法第二种方法 使用使用 memset 函数函数格式为格式为memset(数组名数组名,初始化值初始化值,sizeof(数组名数组名)举例:举例:memset(sheep,0,sizeof(sheep);含义是将名为含义是将名为 sheep 的数组中的全部元素均初的数组中的全部元素均初始化为始化为 0。更深一层是说让系统为。更深一层是说让系统为 sheep10 所所分配的内存单元从分配的内存单元从 sheep0 为标志的地址单元为标志的地址单元到该数组的全部地址单元都赋以到该数组的全部地址单元都赋以 0。调用此库调用此库函数需要加入头文件函数需要加入头文件 。151.1.1.1.#include include using namespace std;using namespace std;int main()int main()int a4;int a4;/声明项声明项声明项声明项cout a0 endl;cout a0 endl;cout a1 endl;cout a1 endl;cout a2 endl;cout a2 endl;cout a3 endl;cout a3 endl;return 0;return 0;2.2.2.2.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=0,1,2,3;int a4=0,1,2,3;请自己上机做请自己上机做7个实验个实验163.3.3.3.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=3,8;int a4=3,8;4.4.4.4.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=2,4,6,8,10;int a4=2,4,6,8,10;5.5.5.5.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int a4=2,4,6,d;int a4=2,4,6,d;6.6.6.6.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为 int d;int d;int a4=2,4,6,d;int a4=2,4,6,d;7.7.7.7.其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为其他不变,改变声明项为int n=4;int n=4;int an=0,1,2,3;int an=0,1,2,3;17讨讨 论论 问问 题题使用筛法求使用筛法求100100以内的所有素数以内的所有素数18 6.2 筛筛 法法19思路思路1.1.想象将想象将想象将想象将100100100100个数看作沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。沙子筛走,剩下的就是素数了。2.2.非素数一定是非素数一定是非素数一定是非素数一定是 2 2 2 2、3 3 3 3、4 4 4 4 的倍数。的倍数。的倍数。的倍数。3.3.使用数组,让下标就是使用数组,让下标就是使用数组,让下标就是使用数组,让下标就是100100100100以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的以内的数,让数组元素的值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为值作为筛去与否的标志。比如筛去以后让元素值为1 1 1 1。20方法的依据:方法的依据:1 1 1 1至至至至100100100100这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:这些自然数可以分为三类:单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数单位数:仅有一个数1 1 1 1。素数:素数:素数:素数:是这样一个数,它大于是这样一个数,它大于是这样一个数,它大于是这样一个数,它大于1 1 1 1,且只有,且只有,且只有,且只有1 1 1 1 和它自身这样两个正因数。和它自身这样两个正因数。和它自身这样两个正因数。和它自身这样两个正因数。合数:合数:合数:合数:除了除了除了除了1 1 1 1和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。和自身以外,还有其他正因数。1 1 1 1不是素数,除不是素数,除不是素数,除不是素数,除1 1 1 1以外的自然数,当然以外的自然数,当然以外的自然数,当然以外的自然数,当然只有素数与合数。筛法实际上是筛去合数,只有素数与合数。筛法实际上是筛去合数,只有素数与合数。筛法实际上是筛去合数,只有素数与合数。筛法实际上是筛去合数,留下素数。留下素数。留下素数。留下素数。21为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:为了提高筛法效率,注意到:令令令令 n n 为合数(这里是为合数(这里是为合数(这里是为合数(这里是100100),),),),c c 为为为为 n n 的最小正因数,的最小正因数,的最小正因数,的最小正因数,据初等数论,只要找到据初等数论,只要找到据初等数论,只要找到据初等数论,只要找到 c c 就可以就可以就可以就可以确认确认确认确认 n n 为合数,将其筛去。为合数,将其筛去。为合数,将其筛去。为合数,将其筛去。一定注意:要进行一定注意:要进行一定注意:要进行一定注意:要进行“筛筛筛筛”的的的的11001100的数字是与的数字是与的数字是与的数字是与数组数组数组数组prime101prime101的下标相对应的,而每个数组元素的下标相对应的,而每个数组元素的下标相对应的,而每个数组元素的下标相对应的,而每个数组元素的取值只有的取值只有的取值只有的取值只有2 2个:是个:是个:是个:是0 0或或或或1 1,分别代表(标志)与下,分别代表(标志)与下,分别代表(标志)与下,分别代表(标志)与下标相对应的数字是素数或不是素数。标相对应的数字是素数或不是素数。标相对应的数字是素数或不是素数。标相对应的数字是素数或不是素数。22程序框图如下:程序框图如下:请同学来请同学来请同学来请同学来分析左边分析左边分析左边分析左边程序的结程序的结程序的结程序的结构构构构从而了解从而了解从而了解从而了解算法的设算法的设算法的设算法的设计思路计思路计思路计思路为程序代为程序代为程序代为程序代码的实现码的实现码的实现码的实现创造条件创造条件创造条件创造条件23上述框图很清晰地描述了筛法的思路:上述框图很清晰地描述了筛法的思路:1.1.1.1.第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将第一块是一个计数型的循环语句,功能是将primeprime数数数数组清零。组清零。组清零。组清零。primec=0;primec=0;c=2,3,100c=2,3,1002.2.2.2.第二块是正因数第二块是正因数第二块是正因数第二块是正因数d d 初始化为初始化为初始化为初始化为 d=2d=2。3.3.3.3.第三块是循环筛数。这里用了一个第三块是循环筛数。这里用了一个第三块是循环筛数。这里用了一个第三块是循环筛数。这里用了一个 do whiledo while 语句,语句,语句,语句,属于一种直到型循环属于一种直到型循环属于一种直到型循环属于一种直到型循环24举举 例例求求 的近似值的近似值25例例.求求的近似值的近似值 用变量用变量用变量用变量pipi表示表示表示表示的值。的值。的值。的值。令令令令表示括号中的每个项表示括号中的每个项表示括号中的每个项表示括号中的每个项当最后一项的绝对值小于等于当最后一项的绝对值小于等于当最后一项的绝对值小于等于当最后一项的绝对值小于等于 时,忽略掉以后的项时,忽略掉以后的项时,忽略掉以后的项时,忽略掉以后的项26/*/*程程 序序 名:名:5_2.cpp */*作作 者:者:wuwh */*编制时间:编制时间:2002年年9月月20日日 */*主要功能:求主要功能:求pi的近似值的近似值 */*#include#include using namespace std;int main()/主函数主函数int sum=0;/整型变量,总项数整型变量,总项数float pi=0.0,a=1.0,b=1.0,c=1.0;/浮点变量,浮点变量,a为分母,为分母,b为分子,为分子,c为为b除以除以a 27 do do /直到型循环直到型循环直到型循环直到型循环 /循环体,开始循环体,开始循环体,开始循环体,开始 pi=pi+c pi=pi+c;/累加每一项累加每一项累加每一项累加每一项 sum=sum+1;sum=sum+1;a=a+a=a+2.0f2.0f;/;/计算每一项的分母;计算每一项的分母;计算每一项的分母;计算每一项的分母;强制将强制将强制将强制将2.02.0转换成转换成转换成转换成floatfloat型型型型 b=-b;/b=-b;/分子变正负号分子变正负号分子变正负号分子变正负号 c=b/a;c=b/a;/计算每一项计算每一项计算每一项计算每一项 /循环体结束循环体结束循环体结束循环体结束while(fabs(c)1e-6);/while(fabs(c)1e-6);/当当当当c c的绝对值大于的绝对值大于的绝对值大于的绝对值大于1010的的的的-6-6次方次方次方次方时,继续时,继续时,继续时,继续 /执行循环体,否则退出执行循环体,否则退出执行循环体,否则退出执行循环体,否则退出pi=pi=4.0f4.0f*pi;*pi;/得到最终结果;得到最终结果;得到最终结果;得到最终结果;将将将将4.04.0作为作为作为作为floatfloat类型类型类型类型cout “pi=”pi endlcout “pi=”pi endl;/输出输出输出输出pipi值值值值cout “sum=”sum endl;cout “sum=”sum 1e-6);29运行结果运行结果 pi=3.14159,sum=500000答:会构成答:会构成死循环死循环,即无休止地执行循环体,即无休止地执行循环体请实验:请实验:1.1.将将将将 b b 定义为定义为定义为定义为 int int 型看看执行结果并分析为什么型看看执行结果并分析为什么型看看执行结果并分析为什么型看看执行结果并分析为什么2.2.将将将将 1 1e-6 e-6 变为变为变为变为 1 1e-7 e-7 或或或或 1 1e-4 e-4 看看结果看看结果看看结果看看结果提问:这种循环当表达式的值提问:这种循环当表达式的值永远为真永远为真时,时,会如何?会如何?30举举 例例求两个整数的最小公倍数求两个整数的最小公倍数31分析:假定有分析:假定有x,y 且且 x y,设最小公倍数为设最小公倍数为 z1.z 一定会一定会=x2.z=k x,k=1,2,3.z 一定会被一定会被 y 整除整除用两个最简单的数试一下就可以找到算法用两个最简单的数试一下就可以找到算法.比如比如 x=5,y=3.32第一步第一步 z=x /x=5 5%3!=0 /z%y 不能整除不能整除不能整除不能整除第二步第二步 z=z+x 10%3!=0 /z%y 不能整除不能整除不能整除不能整除第三步第三步 z=z+x 15%3=0 /z%y 能整除能整除能整除能整除 找到了找到了 z,15就是就是5和和3的最小公倍数的最小公倍数33/*/*/*/*程程程程 序序序序 名:名:名:名:5_3.cpp *5_3.cpp */*/*作作作作 者:者:者:者:wuwh *wuwh */*/*编制时间:编制时间:编制时间:编制时间:20022002年年年年9 9月月月月2020日日日日 */*/*主要功能:求两个数的最小公倍数主要功能:求两个数的最小公倍数主要功能:求两个数的最小公倍数主要功能:求两个数的最小公倍数 */*/*#include#include#include#include using namespace std;using namespace std;int main()int main()/主函数主函数主函数主函数 int x=0,y=0,z=0,w=0;/int x=0,y=0,z=0,w=0;/整型变量整型变量整型变量整型变量cout “cout x;cin x;/键盘输入整数键盘输入整数键盘输入整数键盘输入整数 x xcin y;cin y;/键盘输入整数键盘输入整数键盘输入整数键盘输入整数 y yif(x y)if(x y)/让让让让 x x 表示两者中的大数表示两者中的大数表示两者中的大数表示两者中的大数 w=x;x=y;y=w;/w=x;x=y;y=w;/“倒油瓶倒油瓶倒油瓶倒油瓶”方法方法方法方法 z=x;z=x;/将一个大数赋给将一个大数赋给将一个大数赋给将一个大数赋给 z zwhile(z%y!=0)while(z%y!=0)/当当当当z z不能被不能被不能被不能被y y整除时,就让整除时,就让整除时,就让整除时,就让z z累加累加累加累加x xz=z+x;z=z+x;cout “cout “最小公倍数为最小公倍数为最小公倍数为最小公倍数为”z endl;”z endl;/输出最小公倍数输出最小公倍数输出最小公倍数输出最小公倍数 return 0;return 0;34cout x;/键盘输入整数键盘输入整数 xcin y;/键盘输入整数键盘输入整数 yif(x y)/让让 x 表示两者中的表示两者中的 大数大数w=x;x=y;y=w;35 z=x;/将一个大数赋给将一个大数赋给 z /当当z不能被不能被y整除时,就让整除时,就让z累加累加x while(z%y!=0)z=z+x;cout 最小公倍数为最小公倍数为 z endl;36请同学们去比较三种循环的异同之处请同学们去比较三种循环的异同之处 1.for 循环(计数型循环)循环(计数型循环)2.当型循环(当型循环(while循环)循环)3.直到型循环(直到型循环(do while 循环)循环)上机将筛出素数的程序完成上机将筛出素数的程序完成自学与比较自学与比较37排排 序序 问问 题题38 6.3 冒泡排序法冒泡排序法 39 a 1 8 3 2 4 9 下标 1 2 3 4 5 6 希望排成:a 9 8 4 3 2 1 下标 1 2 3 4 5 640 冒泡排序法冒泡排序法问题:问题:将几个数从大到小排序并输出将几个数从大到小排序并输出414243从表中可以看出最小的一个数第一遍扫描就交换到从表中可以看出最小的一个数第一遍扫描就交换到从表中可以看出最小的一个数第一遍扫描就交换到从表中可以看出最小的一个数第一遍扫描就交换到a6a6中。中。中。中。如果将如果将如果将如果将a1a1视为水底,视为水底,视为水底,视为水底,a6a6视为水面:视为水面:视为水面:视为水面:最轻的最轻的最轻的最轻的(最小的最小的最小的最小的)一个数一个数一个数一个数 1 1 最先浮到水面,交换到最先浮到水面,交换到最先浮到水面,交换到最先浮到水面,交换到a6;a6;次轻的次轻的次轻的次轻的 2 2 第二遍扫描交换到第二遍扫描交换到第二遍扫描交换到第二遍扫描交换到a5a5;再轻的再轻的再轻的再轻的 3 3 第三遍扫描交换到第三遍扫描交换到第三遍扫描交换到第三遍扫描交换到a4a4;依此类推,有依此类推,有依此类推,有依此类推,有6 6个数,前个数,前个数,前个数,前5 5个数到位需个数到位需个数到位需个数到位需5 5遍扫描,第遍扫描,第遍扫描,第遍扫描,第6 6个最个最个最个最重的数自然落在重的数自然落在重的数自然落在重的数自然落在a1a1中。因此,中。因此,中。因此,中。因此,6 6个数只需个数只需个数只需个数只需5 5遍扫描,令遍扫描,令遍扫描,令遍扫描,令扫描编数为扫描编数为扫描编数为扫描编数为 J J,J=n-1,n=6J=n-1,n=6。冒泡排序算法分析:冒泡排序算法分析:44再看在每遍扫描中,相邻两数组元素的比较次数。再看在每遍扫描中,相邻两数组元素的比较次数。再看在每遍扫描中,相邻两数组元素的比较次数。再看在每遍扫描中,相邻两数组元素的比较次数。当当当当j=1j=1j=1j=1时,时,时,时,i=1,2,i=1,2,i=1,2,i=1,2,n-j,n-j,n-j,n-j。n=6n=6n=6n=6时,比较时,比较时,比较时,比较5 5 5 5次之后次之后次之后次之后a6a6a6a6中中中中有一个最小数到达,这时有一个最小数到达,这时有一个最小数到达,这时有一个最小数到达,这时a6a6a6a6不必再参与比较了。不必再参与比较了。不必再参与比较了。不必再参与比较了。因此在第二遍搜索时,因此在第二遍搜索时,因此在第二遍搜索时,因此在第二遍搜索时,j=2,i=1,2,j=2,i=1,2,j=2,i=1,2,j=2,i=1,2,n-j,n-j,n-j,n-j,即即即即i=1,2,3,4i=1,2,3,4i=1,2,3,4i=1,2,3,4。比较比较比较比较4 4 4 4次之后次小的一个数到达了次之后次小的一个数到达了次之后次小的一个数到达了次之后次小的一个数到达了a5a5a5a5。这这这这时时时时a5a5a5a5不必再参与比较了。不必再参与比较了。不必再参与比较了。不必再参与比较了。因此,因此,因此,因此,j=3j=3j=3j=3时,时,时,时,i=1,2,3i=1,2,3i=1,2,3i=1,2,3;j=4 j=4 j=4 j=4时,时,时,时,i=1,2i=1,2i=1,2i=1,2;j=5 j=5 j=5 j=5时,时,时,时,i=1.i=1.i=1.i=1.理出上述规律后,程序就不难编了理出上述规律后,程序就不难编了45int i=0,j=0,p=0,a 7;/整型变量整型变量memset(a,0,sizeof(a);/数组初始化数组初始化for(i=1;i=6;i+)/键入键入6个数个数cout 请输入待排序的数请输入待排序的数a i ai;/输入整数输入整数46为了表述方便,定义以下为了表述方便,定义以下3个变量:个变量:n n 待排序的数的个数,这里待排序的数的个数,这里待排序的数的个数,这里待排序的数的个数,这里 n=6n=6 j j 扫描遍数,扫描遍数,扫描遍数,扫描遍数,j=1,2,n-1j=1,2,n-1 i i 第第第第j j遍扫描待比较元素的下标,遍扫描待比较元素的下标,遍扫描待比较元素的下标,遍扫描待比较元素的下标,i=1,2,n-ji=1,2,n-j冒泡排序算法设计:冒泡排序算法设计:47采用两重计数型循环:采用两重计数型循环:采用两重计数型循环:采用两重计数型循环:步骤步骤1 1:将待排序的数据放入数组中;:将待排序的数据放入数组中;步骤步骤2 2:置:置j j为为1 1;步骤步骤3 3:让:让 i i 从从1 1到到n-jn-j,比较比较aiai与与ai+1ai+1,如果如果 ai=ai+1ai=ai+1,位置不动;位置不动;如果如果 ai ai+1 ai ai+1,位置交换,位置交换,步骤步骤4 4:让:让 j=j+1j=j+1;只要只要 j!=n j!=n 返回步骤返回步骤3 3 ,当当j=n j=n 时执行时执行步骤步骤5 5步骤步骤5 5:输出排序结果:输出排序结果48/*/*/*/*程程程程 序序序序 名:名:名:名:5_4.cpp 5_4.cpp */*/*作作作作 者:者:者:者:wuwh *wuwh */*/*编制时间:编制时间:编制时间:编制时间:20022002年年年年9 9月月月月2222日日日日 */*/*主要功能:冒泡排序主要功能:冒泡排序主要功能:冒泡排序主要功能:冒泡排序 */*/*#include#include/预编译命令预编译命令预编译命令预编译命令#include#include/预编译命令预编译命令预编译命令预编译命令using namespace std;using namespace std;int main()int main()/主函数主函数主函数主函数 int i=0,j=0,p=0,a7;int i=0,j=0,p=0,a7;/整型变量整型变量整型变量整型变量memset(a,0,sizeof(a);memset(a,0,sizeof(a);/整型数组初始化整型数组初始化整型数组初始化整型数组初始化for(i=1;i=6;i+)for(i=1;i=6;i+)/键入键入键入键入6 6个数,放入个数,放入个数,放入个数,放入a a数组中数组中数组中数组中 cout cout 请输入待排序的数请输入待排序的数请输入待排序的数请输入待排序的数a i =;a i ai;cin ai;/用键盘输入整数赋给用键盘输入整数赋给用键盘输入整数赋给用键盘输入整数赋给aiai for(j=1;j=5;j+)for(j=1;j=5;j+)/冒泡排序,外层循环冒泡排序,外层循环冒泡排序,外层循环冒泡排序,外层循环for(i=1;i=6-j;i+)for(i=1;i=6-j;i+)/内层循环内层循环内层循环内层循环if(ai ai+1)if(ai ai+1)/如果如果如果如果 ai ai+1ai ai+1 p=ai p=ai;/让让让让 ai ai 与与与与 ai+1 ai+1 交换交换交换交换 ai=ai+1;ai=ai+1;ai+1=p;ai+1=p;for(i=1;i=6;i+)for(i=1;i=6;i+)/输出排序结果输出排序结果输出排序结果输出排序结果cout ai endl;cout ai endl;/输出输出输出输出 aiai return 0;return 0;49/*/*/*/*程程程程 序序序序 名:名:名:名:5_4.cpp 5_4.cpp */*/*作作作作 者:者:者:者:wuwh *wuwh */*/*编制时间:编制时间:编制时间:编制时间:20022002年年年年9 9月月月月2222日日日日 */*/*主要功能:冒泡排序主要功能:冒泡排序主要功能:冒泡排序主要功能:冒泡排序 */*/*#include/预编译命令预编译命令#include/预编译命令预编译命令using namespace std;50 int main()int i=0,j=0,p=0,a 7;memset(a,0,sizeof(a);for(i=1;i=6;i+)cout 请输入待排序的数请输入待排序的数a“i a i;51for(j=1;j=5;j+)/外层循环外层循环for(i=1;i=6-j;i+)/内层循环内层循环 T T if(ai ai+1)F F p=ai;ai=ai+1;ai+1=p;52for(j=1;j=5;j+)/外层循环外层循环 for(i=1;i=6-j;i+)/内层循环内层循环if(a i a i+1 )/让让 ai 与与 ai+1 交换交换 p=a i;a i =a i+1;a i+1=p;53 for(i=1;i=6;i+)/输出排序结果输出排序结果cout a i endl;return 0;54结结 束束
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服