版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
选择排队问题的解题思路与数据组织//************************************//*程序名:5_1.cpp(数组示例)*//*作者:wuwh*//*编制时间:2002年9月20日*//*主要功能:找出最重的羊*//************************************#include<iostream.h> //预编译命令#include<memory.h> //预编译命令voidmain() //主函数{
floatsheep[10]; //数组,有10个浮点类型元素,
//用于存10只羊每一只的重量
memset(sheep,0,sizeof(sheep));//初始化数组元素为0
floatbigsheep=0.0f; //浮点类型变量,存放最肥羊的重量
inti=0,bigsheepNo=0; //整型变量,i用于计数循环,
//bigsheepNo用于记录最肥羊的号2#include<memory.h>floatsheep[10];memset(sheep,0,sizeof(sheep));3
for(i=0;i<10;i=i+1) //计数循环
{ //循环,开始
cout<<"请输入羊的重量sheep["<<i<<"]=";//提示用
cin>>sheep[i]; //输入第i只羊的重量
if(bigsheep<sheep[i]) //如果第i只羊比当前最肥羊大
{ bigsheep=sheep[i]; //让第i只羊为当前最肥羊
bigsheepNo=i; //纪录第i只羊的编号
} } //循环结束 //输出最肥羊的重量
cout<<"最肥羊的重量为"<<bigsheep<<endl; //输出该羊的编号
cout<<"最肥羊的编号为"<<bigsheepNo<<endl;}4
for(i=0;i<10;i=i+1)
{
cout<<“请输入羊的重量sheep["<<i<<“]“<<endl;
cin>>sheep[i];
if(bigsheep<sheep[i])
{ bigsheep=sheep[i];
bigsheepNo=i;
} } 5程序框图6
类型说明符 数组名[常量表达式]例: floatsheep[10]; inta2001[1000];说明1.数组名的第一个字符应为英文字母;2.用方括号将常量表达式括起;3.常量表达式定义了数组元素的个数;数组的定义74.数组下标从0开始。如果定义5个元素,是从第0个元素至第4个元素;
例如 inta[5]定义了5个数组元素如下:
a[0],a[1],a[2],a[3],a[4]
这是5个带下标的变量,这5个变量的类型是相同的
85.常量表达式中不允许包含变量例如 intn; n=5; inta[n]; 不合法!因为n是变量,不是常量9#defineN100#defineM200inta[N];longb[N+M];doubleg[M+6];以上定义是合法的10
第一种方法直接声明时初始化 例如
inta[5]={3,5,4,1,2};
a[0]=3;a[1]=5;a[2]=4;a[3]=1;a[4]=2;数组初始化11
第二种方法使用memset函数 格式为
memset(数组名,初始化值,sizeof(数组名)) 举例:
memset(sheep,0,sizeof(sheep));
含义是将名为sheep的数组中的全部元素均初始化为0。更深一层是说让系统为sheep[10]所分配的内存单元从sheep[0]为标志的地址单元到该数组的全部地址单元都赋以0。调用此库函数需要加入头文件<memory.h>。121.#include<iostream.h> voidmain() { inta[4]; //声明项 cout<<a[0]<<endl; cout<<a[1]<<endl; cout<<a[2]<<endl; cout<<a[3]<<endl; }2.其他不变,改变声明项为
inta[4]={0,1,2,3};请自己上机做6个实验133.其他不变,改变声明项为
inta[4]={3,8};4.其他不变,改变声明项为
inta[4]={2,4,6,8,10};5.其他不变,改变声明项为
inta[4]={2,4,6,d};6.其他不变,改变声明项为
intn=4; inta[n]={0,1,2,3};14讨论问题使用筛法求100以内的所有素数15思路想象将100个数看作沙子和小石头子,让小石头子权称素数;让沙子当作非素数。弄一个筛子,只要将沙子筛走,剩下的就是素数了。非素数一定是2、3、4……的倍数。使用数组,让下标就是100以内的数,让数组元素的值作为筛去与否的标志。比如筛去以后让元素值为1。16方法的依据:
1至100这些自然数可以分为三类:单位数:仅有一个数1。素数:是这样一个数,它大于1,且只有1和它自身这样两 个正因数。合数:除了1和自身以外,还有其他正因数。
1不是素数,除1以外的自然数,当然只有素数与合数。筛法实际上是筛去合数,留下素数。
17为了提高筛法效率,注意到: 令n为合数(这里是100),c为n的最小正因数,
据初等数论,只要找到c就可以确认n为合数,将其筛去。
18程序框图如下:19上述框图很清晰地描述了筛法的思路:1.第一块是一个计数型的循环语句,功能是将prime数组清零。
prime[c]=0; c=2,3,…,1002.第二块是正因数d初始化为d=2。3.第三块是循环筛数。这里用了一个dowhile
语句,属于一种直到型循环,其一般形式为:
do {
循环体语句块 }
while(表达式) 20do{
循环体语句块;}while(表达式) 21直到型循环框图如下:直到表达式为假时才退出循环,所以循环体至少执行一次。22举例求π的近似值23例.求π的近似值
用变量pi表示π的值。
令 表示括号中的每个项当最后一项的绝对值小于等于时,忽略掉以后的项24//************************************//*程序名:5_2.cpp*//*作者:wuwh*//*编制时间:2002年9月20日*//*主要功能:求pi的近似值*//************************************#include<iostream.h>#include<math.h>voidmain() //主函数{ intsum=0; //整型变量,总项数
floatpi=0,a=1.0,b=1.0,c=1.0; //浮点变量,a为分母,b为分子,c为b除以a
do //直到型循环 { //循环体,开始 pi=pi+c; //累加每一项 sum=sum+1; a=a+2.0f; //计算每一项的分母 b=-b; //分子变正负号
c=b/a; //计算每一项 } //循环体结束 while(fabs(c)>1e-6); //当c的绝对值大于10的-6次方时,继续 //执行循环体,否则退出
pi=4.0f*pi; //得到最终结果 cout<<"pi="<<pi<<endl; //输出pi值 cout<<"sum="<<sum<<endl; //输出总项数}25do //直到型循环 { //循环体,开始
pi=pi+c; //累加每一项
sum=sum+1;
a=a+2.0f; //计算每一项的分母
b=-b; //分子变正负号
c=b/a; //计算每一项} //循环体结束
while(fabs(c)>1e-6);26运行结果
pi=3.14159,sum=500000答:会构成死循环,即无休止地执行循环体请实验:1.将b定义为int型看看执行结果并分析为什么2.将1e-6变为1e-7或1e-4看看结果提问:这种循环当表达式的值永远为真时,会如何?27下面还要介绍另一种循环“当循环”一般形式: while(表达式) { 语句块;(循环体) }28
while(表达式){
语句块(循环体);}29思考#defineN1while(N){cout<<“welcometoTsinghua\n“;}程序运行后会出现什么情况?30思考#defineN1while(N-1){cout<<“welcometoTsinghua\n“;}程序运行后会出现什么情况?31
作业比较3种循环语句各有什么特点?题目:某选手10000m跑的每400m用时记录在名为RUN的数组中,请你计算平均用时(每400m的平均用时),要求使用3种循环语句来编程。1.for2.do…while3.while32举例求两个整数的最小公倍数33分析:假定有x,y且x>y,设最小公倍数为z1.z一定会>=x2.z=kx,k=1,2,…3.z一定会被y整除用两个最简单的数试一下就可以找到算法.比如x=5,y=3.34第一步z=x=5 5%3!=0//z%y不能整除第二步z=z+x=10 10%3!=0//z%y
不能整除第三步z=z+x=15 15%3==0//z%y
能整除找到了z,15就是5和3的最小公倍数35//************************************//*程序名:5_3.cpp*//*作者:wuwh*//*编制时间:2002年9月20日*//*主要功能:求两个数的最小共倍数*//************************************#include<iostream.h>#include<math.h>voidmain() //主函数{ intx=0,y=0,z=0,w=0;//整型变量
cout<<“请输入两个整数,用空格隔开:”;//提示信息 cin>>x; //键盘输入整数x cin>>y; //键盘输入整数y if(x<y) //让x表示两者中的大数
{ w=x;x=y;y=w; } z=x; //将一个大数赋给z while(z%y!=0) //当z不能被y整除时,就让z累加x z=z+x; cout<<"最小公倍数为"<<z<<endl; //输出最小公倍数}36cout<<“请输入两个整数,用空格隔开:”;//提示信息 cin>>x; //键盘输入整数x cin>>y; //键盘输入整数y if(x<y) //让x表示两者中的大数
{ w=x;x=y;y=w; }37
z=x; //将一个大数赋给z//当z不能被y整除时,就让z累加xwhile(z%y!=0) {z=z+x;}cout<<"最小公倍数为"<<z<<endl; 38 请同学们去比较三种循环的异同之处1.for循环(计数型循环) 2.当型循环(while循环)3.直到型循环(dowhile循环)上机将挑肥羊的程序和筛出素数的程序完成自学与比较39排序问题40问题:将几个数从大到小排序并输出,介绍冒泡排序法4142从表中可以看出最小的一个数第一遍扫描就交换到a[6]中。如果将a[1]视为水底,a[6]视为水面:最轻的(最小的)一个数1最先浮到水面,交换到a[6];次轻的2第二遍扫描交换到a[5];再轻的3第三遍扫描交换到a[4]; …依此类推,有6个数,前5个数到位需5遍扫描,第6个最重的数自然落在a[1]中。因此,6个数只需5遍扫描,即j=n-1,n=6。冒泡排序算法分析:43再看在每遍扫描中,相邻两数组元素的比较次数。当j=1时,i=1,2,…,n-j。n=6时,比较5次之后a[6]中有一个最小数到达,这时a[6]不必再参与比较了。因此在第二遍搜索时,j=2,i=1,2,…,n-j,即i=1,2,3,4。比较4次之后次小的一个数到达了a[5]。这时a[5]不必再参与比较了。因此,j=3时,i=1,2,3;j=4时,i=1,2;j=5时,i=1。理出上述规律后,程序就不难编了44为了表述方便,定义以下3个变量:n——待排序的数的个数,这里n=6
j——扫描遍数,j=1,2,…,n-1
i——第j遍扫描待比较元素的下标,i=1,2,…,n-j冒泡排序算法设计:45采用两重计数型循环:步骤1:将待排序的数据放入数组中;步骤2:置j为1;步骤3:让i从1到n-j,比较a[i]与a[i+1], 如果a[i]>=a[i+1],位置不动; 如果a[i]<a[i+1],位置交换, 步骤3结束后a[n-j+1]中的数为最小的数步骤4:让j=j+1,只要j!=n就返回步骤3 当j==n时执行步骤5步骤5:输出排序结果46//************************************//*程序名:5_4.cpp*//*作者:wuwh*//*编制时间:2002年9月22日*//*主要功能:冒泡排序*//************************************#include<iostream.h> //预编译命令#include<memory.h> //预编译命令voidmain() //主函数{ inti=0,j=0,p=0,a[7]; //整型变量 memset(a,0,sizeof(a)); //整型数组初始化
for(i=1;i<=6;i++) //键入6个数,放入a数组中
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 骨肿瘤专题知识宣讲培训
- 高中体育与健康一年级武术一段拳教学设计
- 高一信息技术《信息系统的应用》教学设计:基于全生命周期的项目式实践探究
- 高中政治必修四第二单元综合探究《坚持历史唯物主义 反对历史虚无主义》教学设计
- 初中数学九年级一轮复习教案:三角形的边角关系及重要线段
- 初中九年级班主任工作教学设计:毕业班家长会家校共育实践探究
- 第21课《小圣施威降大圣》练习 (含解析)统编版语文七年级上册
- 2026年管理类联考领导力与执行力专项训练题库
- 质量管理规章制度
- 二手房买卖合同(2篇)
- 亲电反应和亲核反应-专题讲座
- 化验室危险化学品培训
- 围手术期血糖管理的专家共识
- 2026年石油化工设备检维修市场调研报告
- 2025年顺丰月结合同合同范本分享
- 2025-2026学年华中师大版(2024)小学体育与健康一年级全一册《应急电话学会打》教学设计
- 甘肃专职消防管理办法
- 《青少年户外运动技能等级划分及评定》
- 2025年宜都市总工会公开招聘乡镇工会协理员3人考试备考试题及答案解析
- (完整)营养指导员理论知识考核试题库(含答案)
- 医院危化品安全知识培训课件
评论
0/150
提交评论