当前位置:首页 > 上机实验六 一维数组- 答案
上机实验六 一维数组
班级 学号 姓名 本次题目一共5题,必做4个,选做1个。
选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!
一.目的要求
1. 2. 3.
掌握一维数组的基本概念,定义和初始化方法;
掌握一维数组的基本操作,如输入、输出、引用数组元素; 掌握与数组有关的基本算法,如寻找最大/最小值、排序等。
二.实验内容
【实验题1】程序改错:源程序用数组求Fibonacci数列前20项,但在带标记的代码行存在错误。源程序如下:
#include
{ int i, fib[20];
fib[1]= fib[2]= 1; //错误1 for(i=3; i<=20; i++) //错误2 fib[i]= fib[i-1] +fib[i-2]; for(i=1; i<=20; i++){ //错误3 printf(\ 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】程序填空:给定平面上10个点,求其中离原点最近的点。源程序用一维数组x存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i], y[i])。用变量index记录最近点的下标。程序中使用距离的平方做比较:x*x+y*y。
#include
int i, index; //index是离原点最近的点的下标 double d, min; //min是到原点的最近距离的平方 double x[]={1.1, 3.2, -2.5, 5.67, 3.42, -4.5, 2.54, 5.6, 0.97, 4.65}; // 赋初值 double y[]={-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 ){ //Line 11 min=d; index=i; } } printf(\ x=%.2f, y=%.2f \\n\ x[index] , y[index] ); //输出最近点的下标和坐标 }
程序运行结果为:
数组x和y的长度应该各是多少? 10,10
如果将程序功能改为求10个点中离原点最远的点,语句行Line 11又应如何填写?if( d>min ){
//Line 11
【实验题3】程序填空:输入5个整数, 将这5个数按逆时针顺序转动一次后再输出,如输入1 2 3 4 5,逆时针转动一次后,输出2 3 4 5 1。要求用数组实现。
提示:设存放整数的数组为a。要实现数组逆时针转动,只要先将首元素a[0]“搬”至一个变量t中; 然后从第1个元素到最后1个元素,依次向前移一位, 即a[i-1]= a[i] ( i= 1, … , 4);最后将存放在t中的首元素放入最后的元素。
#include
int i, t, a[5]; printf(\ for(i=0; i<5; i++)
scanf(\ &a[i] );
t= a[0] ; //Line 7 for(i= 1 ; i< 5 ; i++) //Line 8 a[i-1]=a[i]; //Line 9 a[4] = t; //Line 10 printf(\ for(i=0;i<5;i++)
printf(\ a[i] );
printf(\ }
运行程序,输入1 2 3 4 5, 结果为:2 3 4 5
1 【实验题4】程序填空:输入一个整数n (1≤n≤10),再输入n个整数,将它们按升序排列后输出,分别用选择法和冒泡法完成排序。
程序分析1_选择法:
(1) 由于n最大是10,需要定义一个长度为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
int i, j, k,n, temp, a[NUM]; scanf(\ //输入n
printf(\ for(i=0; i scanf(\ //输入n个整型元素 //选择法排序,注意是排序n个元素 for(i=0; i< n-1 ; i++) { for(j= i+1 ; j< n ; j++) if( a[i] > a[j] ) //Line 13 { temp = a[i] ; a[i] = a[j] ; a[j] = temp;} //a[i]??a[j] } for(i=0; i printf(\ //输出排序后的数组 printf(\ } 程序分析2_冒泡法: (1) 整个排序只需要确定后n-1个元素(a[1] ~a[n-1]),最前一个元素a[0]无需另外处理; (2) 在确定a[i](i=1,2,…,n-1)时,按j=0,1,…,i-1的顺序,一次比较a[j]和[j+1],如果a[j]>a[j+1],则交换a[j]与 a[j+1]。 #include int i, j, k,n, temp, a[10]; scanf(\ //输入正确的n printf(\ for(i=0; i scanf(\ //输入n个整型元素 //冒泡法排序,注意是排序n个元素 for(i=0; i< n-1 ; i++) {
共分享92篇相关文档