资源描述:
《上机实验六 一维数组 - 答案》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、上机实验六一维数组班级学号姓名本次题目一共5题,必做4个,选做1个。选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!一.目的要求1.掌握一维数组的基本概念,定义和初始化方法;2.掌握一维数组的基本操作,如输入、输出、引用数组元素;3.掌握与数组有关的基本算法,如寻找最大/最小值、排序等。二.实验内容【实验题1】程序改错:源程序用数组求Fibonacci数列前20项,但在带标记的代码行存在错误。源程序如下:#includevoidmain(){inti,fib[20];fib[1]=fib[2]=1;//错误1for(i=3;i<=
2、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("");}}数组的下标应该从几开始?标出的三个错误语句行,应分别改为?数组下标应该从0开始,错误1修改为:fib[0]=fib[1]=1;错误2修改为:for(i=2;i<20;i++);错误3修改为:for(i=0;i<20;i++)未改正错误之前,程序运行结果是(只写最后一项)4181改正后,程序运行结果是(只写最后一项)6765【实验题2】程序填空:给定
3、平面上10个点,求其中离原点最近的点。源程序用一维数组x存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i],y[i])。用变量index记录最近点的下标。程序中使用距离的平方做比较:x*x+y*y。#includevoidmain(){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
4、,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(d5、11又应如何填写?if(d>min){//Line11【实验题3】程序填空:输入5个整数,将这5个数按逆时针顺序转动一次后再输出,如输入12345,逆时针转动一次后,输出23451。要求用数组实现。提示:设存放整数的数组为a。要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中;然后从第1个元素到最后1个元素,依次向前移一位,即a[i-1]=a[i](i=1,…,4);最后将存放在t中的首元素放入最后的元素。#includevoidmain(){inti,t,a[5];printf("Input5integers:");for(i=
6、0;i<5;i++)scanf("%d",&a[i]);t=a[0];//Line7for(i=1;i<5;i++)//Line8a[i-1]=a[i];//Line9a[4]=t;//Line10printf("Afterrotation:");for(i=0;i<5;i++)printf("%5d",a[i]);printf("");}运行程序,输入12345,结果为:23451【实验题4】程序填空:输入一个整数n(1≤n≤10),再输入n个整数,将它们按升序排列后输出,分别用选择法和冒泡法完成排序。程序分析1_选择法:(1)由于n最大是10,需要定义一
7、个长度为10的整型数组a;(2)整个排序只需要确定前n-1个元素(a[0]~a[n-2]),最后一个元素a[n-1]无需另外处理;(3)在确定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#defineNUM10voidmain(){inti,j,k,n,temp,a[NUM];scanf("%d",&n);//输入nprintf("Input%dnumbers:",n);for(i=