上机试验六一维数组-答案_第1页
上机试验六一维数组-答案_第2页
上机试验六一维数组-答案_第3页
上机试验六一维数组-答案_第4页
上机试验六一维数组-答案_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

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

文档简介

上机实验六一维数组班级学号姓名本次题目一共5题,必做4个,选做1个。选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!一.目的要求掌握一维数组的基本概念,定义和初始化方法;掌握一维数组的基本操作,如输入、输出、引用数组元素;掌握与数组有关的基本算法,如寻找最大/最小值、排序等。二.实验内容【实验题1】程序改错:源程序用数组求Fibonacci数列前20项,但在带标记的代码行存在错误。源程序如下:#include<stdio.h>voidmain(){inti,fib[20];fib[1]=fib[2]=1;//错误1for(i=3;i<=20;i++)//错误2fib[i]=fib[i-1]+fib[i-2];for(i=1;i<=20;i++){//错误3printf("%6d",fib[i]);if((i+1)%5==0)printf("\n");}}数组的下标应该从几开始?标出的三个错误语句行,应分别改为?数组下标应该从0开始,错误1修改为:fib[0]=fib[1]=1;错误2修改为:for(i=2;i<20;i++);错误3修改为:for(i=0;i<20;i++)未改正错误之前,程序运行结果是(只写最后一项)4181改正后,程序运行结果是(只写最后一项)6765【实验题2】程序填空:给定平面上10个点,求其中离原点最近的点。源程序用一维数组%存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i],y[i])。用变量index记录最近点的下标。程序中使用距离的平方做比较:x*x+y*y。#include<stdio.h>voidmain(){inti,index;//index是离原点最近的点的下标doubled,min;//min是到原点的最近距离的平方doublex[]={1.1,3.2,-2.5,5.67,3.42,-4.5,2.54,5.6,0.97,4.65};//赋初值doubley[]={-6,4.3,4.5,3.67,2.42,2.54,5.6,-0.97,4.65,-3.33};//:赋初值index=0;min=_x[0]*x[0]+.y[0]*y[0];〃设第0个点为最近点for(i=1;i<10;i++){d=x[i]*x[i]+y[i]*y[i];if(d<min){//Line11min=d;index=i;}}printf("%d:x=%.2f,y=%.2f\n",index,x[index],v「index]);〃输出最近点的下标和坐标}程序运行结果为:数组x和y的长度应该各是多少?10,10如果将程序功能改为求10个点中离原点最远的点,语句行Line11又应如何填写?if(d>min){//Line11【实验题3】程序填空:输入5个整数,将这5个数按逆时针顺序转动一次后再输出,如输入12345,逆时针转动一次后,输出23451。要求用数组实现。提示:设存放整数的数组为a。要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中;然后从第1个元素到最后1个元素,依次向前移一位,即a[i-1]=a[i](i=1,…,4);最后将存放在t中的首元素放入最后的元素。#include<stdio.h>voidmain(){inti,t,a[5];printf("Input5integers:\n");for(i=0;i<5;i++)scanf("%d",&a⑴);t=a10];//Line7for(i=1;i<5;i++)//Line8a[i-1]=a[i];//Line9a「4]=t;//Line10printf("Afterrotation:\n");for(i=0;i<5;i++)printf("%5d",a「i]);printf("\n");}运行程序,输入12345,结果为:23451【实验题4】程序填空:输入一个整数n(WW),再输入n个整数,将它们按升序排列后输出,分别用选择法和冒泡法完成排序。程序分析1_选择法:(1)由于n最大是10,需要定义一个长度为10的整型数组a;整个排序只需要确定前n-1个元素(a[0]〜a[n-2]),最后一个元素a[n-1]无需另外处理;在确定a[i](i=0,1,…,n-2)时,先将a[i]本身看成最小,将a[i]与后面的元素a[j](j=i+1,i+2,…,n-1)一—比较,如果a[i]>a[j],则交换a[i]与a[j]。#include<stdio.h>#defineNUM10voidmain(){inti,j,k,n,temp,a[NUM];scanf("%d",&n);〃输入nprintf("Input%dnumbers:\n",n);for(i=0;i<n;i++)scanf("%d",&a[i]);//输入n个整型元素〃选择法排序,注意是排序n个元素for(i=0;i<n-1;i++){for(j=i+1;j<n;j++)if(a[i]>a[i])//Line13{temp=a[i];a[i]=a[j];a[j]=temp;}//a[i](fa[j]}for(i=0;i<n;i++)printf("%d",a[i]);//输出排序后的数组printf("\n");}程序分析2_冒泡法:整个排序只需要确定后n-1个元素(a[1]〜a[n-1]),最前一个元素a[0]无需另外处理;在确定a[i](i=1,2,…,n-1)时,按j=0,1,…,i-1的顺序,一次比较a[j]和[j+1],如果a〈]>a[j+1],则交换a[j]与a[j+1]。#include<stdio.h>voidmain(){inti,j,k,n,temp,a[10];scanf("%d",&n);〃输入正确的nprintf("Input%dnumbers:\n",n);for(i=0;i<n;i++)scanf("%d”,&a[i]);//输入n个整型元素〃冒泡法排序,注意是排序n个元素for(i=0;i<n-1;i++){for(j=0;j<n-1-i;j++)if(a「H>a「i+1])//Line13//a[j](fa[j+1]{temp=a[j];a[j]=a[j+1];a[j+1]=temp//a[j](fa[j+1]for(i=0;i<n;i++)printf("%d",a[i]);//输出排序后的数组printf("\n");}运行程序,输入n:5,输入5个整数:23-9140-3,显示结果为:运行程序,本题有一定的难度,应该是目前为止最难的一道实验题目!请认真阅读给出的例子后,进行算法思考,然后再试着写算法【选做题】【实验题5】直接插入排序,从小到大排序。10.2.1直接插入排序直接插入排序(StraightInsertionSort)是一种最简单的排序方法,它的基本操作是将一个记录插入到已排好序的有序表中,从而得到一个新的、记录数增1的有序表0假定待排序的6个数为:49237891033完成直接插入排序的一个简单步骤是:1)定义两个数组a[6]={49,23,78,9,10,33};b[6]={0,0,0,0,0,0};需要完成数组a中元素的排序;2)直接将元素49赋给b[0];3)向数组b中插入第二个元素23,则有b[0]=23,b[1]=49;4)向数组b中插入第三个元素78,则有b[0]=23,b[1]=49,b[2]=78;5)向数组b中插入第四个元素9,则有b[0]=9,b[1]=23,b[2]=49,b[3]=78;6)….依次插入后面的数7)基本思想就是每次向一个有序数组b中插入一个元素,n个数插入n-1次即可完成排序。因此,直接插入排序的关键操作就是向一个有序数组中插入一个元素:有序数组中插入一个数:假设数组b已排好前4个元素,即b[0]=9,b[1]=23,b[2]=49,b[3]=78。向该数组中插入第5个元素10,:插入方法:1)找到需要存放元素10的位置:从b[0]向后依次进行比较,找到第一个大于10的数23,则10应该插入到元素23之前,也即10应该放入位置b[1]。2)插入元素10:(1)首先,要给元素10腾出位置。则从b[1]开始后的元素需要向后移动一位,移动后的结果为b[2]=23,b[3]=49,b[4]=78,…。(2)然后,插入元素10,即令b[1]=10;则插入完成后有b[0]=9,b[1]=10,b[2]=23,b[3]=49,b[4]=78最后得到的数组b,就是数组a元素从小到大排序请认真读懂上述直接插入算法的思想,补齐下面代码#include<stdio.h>voidmain(){//数据初始化inta[6]={49,23,78,9,10,33};intb[6]={0,0,0,0,0,0};inti,j,k;//直接插入法排序,补齐下面代码b[0]=a[0];//第一个元素直接插入〃插入一个元素a[i],分三步完成:1)选择插入点,2)插入点后的元素后移动,3)插入for(i=1;i<6;i++)//i指标对应接下来要插入的a[i]{//第一步:寻找插入点k=i;//a[i]大于目前b中所有的元素,则插入点为i。如果a[i]大于所有已插入元素,则k

温馨提示

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

评论

0/150

提交评论