(6.20)-第19课(5.2节-一维数组使用举例)_第1页
(6.20)-第19课(5.2节-一维数组使用举例)_第2页
(6.20)-第19课(5.2节-一维数组使用举例)_第3页
(6.20)-第19课(5.2节-一维数组使用举例)_第4页
(6.20)-第19课(5.2节-一维数组使用举例)_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

程序实现

voidmain(){inti,t,a[N];printf("Enter%dNumbers:\n",N);//提示输入数据

for(i=0;i<N;i++)

scanf("%d",&a[i]);

for(i=0;i<N/2;i++)

//将数组倒置

{t=a[i];a[i]=a[N-i-1];a[N-i-1]=t;

}

for(i=0;i<N;i++)

//输出倒置后的数组

printf("%d

",a[i]);}#define

N

8【例2:】从键盘上输入10个数,求出其中最大值并输出解题思路采用打擂台的方法:先把10个数存在数组中,指定第一个数为擂主(最大),然后擂主依次与其他数比较,若某数大于擂主,则该数为擂主。循环结束,擂主变量中一定是最大的数程序实现#define

N

10#include<stdio.h>voidmain(){inti,p,a[N];//变量p用于存放最大值的下标

printf("Enter%dNumbers:\n",N);//提示输入数据for(i=0;i<N;i++)scanf("%d",&a[i]);p=0;//先指定第一个数最大

for(i=1;i<N;i++)if(a[i]>a[p])p=i;printf(“最大值是:a[%d]=%d\n",p,a[p]);}【例3:】用冒泡排序法对6个数进行排序(升序)972541a[0]a[1]a[2]a[3]a[4]a[5]72541

927754712541794515241

5

7921

4

5

7

914129725419999972541初始状态第1轮第2轮第3轮第4轮第5轮7依次比较相邻的两个数,将小数放前面,大数放后面。经过第1轮(共5次比较与交换)后最大的数9已“沉底”。再对余下的前面5个数进行第二轮比较,次大的数又被安置......n个数排序需要进行n-1轮比较,从第1轮到第n-1轮,各轮的比较次数依次为:n-1次、n-2次…1次,第i轮比较中要进行n-i次两两比较程序实现#defineN6#include<stdio.h>voidmain(){inta[N],i,j,t;

for(i=0;i<N;i++)scanf(“%d”,&a[i]);for(i=0;i<N-1;i++)//外层循环控制进行几轮比较for(j=0;j<N-1-i;j++)//内层循环控制每轮的比较次数if(a[j]>a[j+1]){t=a[j];

a[j]=a[j+1];a[j+1]=t;

}

for(i=0;i<N;i++)printf(“%3d”,a[i]);}谢谢西华大学一维数组使用举例数组【例4:】用选择排序法对6个数进行排序(升序)972541a[0]a[1]a[2]a[3]a[4]a[5]12457912457997254191初始状态第1轮第2轮第3轮第4轮第5轮p=0p=1p=2p=5

172549p=1p=227

1

27549p=247p=3p=4p=3p=4从所有元素中选择一个最小值元素a[p]放在a[0]中(即让最大值元素a[p]与a[0]交换);再从a[1]开始到最后的各元素中选择一个最小值元素a[p]放在a[1]中;…依次类推…从a[i]开始到最后的各元素中选择一个最小值元素a[p]放在a[i]中程序实现#defineN6#include<stdio.h>voidmain(){inta[N],i,j,p,temp;for(i=0;i<N;i++)scanf("%d",&a[i]);for(i=0;i<N-1;i++)//外层循环控制进行几轮比较

{

p=i;for(j=i+1;j<N;j++)//内层循环控制每轮的比较if(a[j]<a[p])p=j;if(p!=i)

{temp=a[p];a[p]=a[i];a[i]=temp;}

}for(i=0;i<N;i++)printf("%5d",a[i]);}【例5:】使用顺序查找法在数组中查找某个特定的数据x。如果找到,则返回该数据位置解题思路设有N个数据放在a[0]---a[N-1]中,待查找的数据值为x,把x与a数组中的元素从头到尾一一进行比较查找,若相同,查找成功,若找不到,则查找失败程序实现#defineN10#include<stdio.h>main(){inti,x,f=0,a[N];

for(i=0;i<N;i++)scanf(“%d”,&a[i]);printf(“请输入待查找的数:\n”);scanf(“%d”,&x);for(i=0;i<N;i++)if(x==a[i]){f=1;break;}if(f==1)printf(“找到了!是第%d号元素。\n”,i);elseprintf(“找不到!\n”);}【例6:】使用折半查找法(二分查找)在数组中查找某个特定的数据x。如果找到,则返回该数据位置前提:数据已按一定规律(升或降序)排列好思路:先检索中间的数据是否所需,如不是,判断要找的数据在哪一边,缩小范围后再按同样方法继续检索,直到找到或找遍算法:设要找的数为x,N个数据已按升序排好存放在数组a中a、设bot=0,top=N-1mid=(bot+top)/2b、if(x==a[mid])找到了;c、elseif(x>a[mid])说明x在右边,让bot=mid+1;

else说明x在左边,让top=mid-1。重复b和c两步操作,直到x==mid(找到)或bot>top(找遍了)为止数据查找

x>a[mid]botmidtopbotbot=mid+1midx<a[mid]top=mid-1toptopbot找到x>a[mid]bot=mid+1topbotx==a[mid]x>a[mid]botmidtopbotbot=mid+1midx>a[mid]topbot=mid+1topbottopbotx<a[mid]toptop<bot没找到数据查找

#defineN10#include<stdio.h>voidmain(){inta[N]={1,4,7,13,16,19,28,36,49,60};intbot=0,mid,top=N-1,x;printf("请输入要查找的数x=");scanf("%d",&x);while(bot<=top){mi

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论