上机实验六一维数组 答案

发布 2022-09-05 03:23:28 阅读 3150

班级学号姓名

本次题目一共5题,必做4个,选做1个。

选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!

一.目的要求。

1. 掌握一维数组的基本概念,定义和初始化方法;

2. 掌握一维数组的基本操作,如输入、输出、引用数组元素;

3. 掌握与数组有关的基本算法,如寻找最大/最小值、排序等。

二.实验内容。

实验题1】程序改错:源程序用数组求fibonacci数列前20项,但在带标记的**行存在错误。源程序如下:

#include<>

void main()

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("%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++)

未改正错误之前,程序运行结果是(只写最后一项 )

改正后,程序运行结果是(只写最后一项 )

实验题2】程序填空:给定平面上10个点,求其中离原点最近的点。源程序用一维数组x存放这10个点的x坐标,用一维数组y存放相应的y坐标,即第i个点的坐标为(x[i], y[i])。

用变量index记录最近点的下标。程序中使用距离的平方做比较:x*x+y*y。

#include<>

void main()

int i, index; /index是离原点最近的点的下标。

double d, minmin是到原点的最近距离的平方。

double x=赋初值。

double y=

printf("%d: x=%.2f, y=%.2f ", index, x[index] ,y[index输出最近点的下标和坐标。

程序运行结果为:

数组x和y的长度应该各是多少?

如果将程序功能改为求10个点中离原点最远的点,语句行line 11又应如何填写?if( d>minline 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<>

void main()

int i, t, a[5];

printf("input 5 integers:");

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

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

t= a[0line 7

for(i= 1 ; i< 5 ; iline 8

a[i-1]=a[iline 9

a[4] =tline 10

printf("after rotation:");

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

printf("%5d", 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 <>

#define num 10

void main()

int i, j, k,n, temp, a[num];

scanf("%d",&n输入n

printf("input %d numbers:", n );

for(i=0; iscanf("%d",&a[i]);输入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; iprintf("%d ",a[i输出排序后的数组。

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 <>

void main()

int i, j, k,n, temp, a[10];

scanf("%d",&n输入正确的n

printf("input %d numbers:", n );

for(i=0; iscanf("%d",&a[i]);输入n个整型元素。

//冒泡法排序,注意是排序n个元素。

for(i=0; i< n-1 ; i++)

for(j= 0 ; j< n-1-i ; j++)

if( a[j] >a[j+1] )line 13

temp=a[j]; a[j]=a[j+1]; a[j+1]=temp;} a[j]a[j+1]

for(i=0; iprintf("%d ",a[i输出排序后的数组。

printf("");

运行程序,输入n: 5,输入5个整数:23 -9 14 0 -3 ,显示结果为:

本题有一定的难度,应该是目前为止最难的一道实验题目!

请认真阅读给出的例子后,进行算法思考,然后再试着写算法。

选做题】【实验题5】直接插入排序,从小到大排序。

假定待排序的6个数为:49 23 78 9 10 33

完成直接插入排序的一个简单步骤是:

1) 定义两个数组a[6] =b[6]=;需要完成数组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 <>

void main()

//数据初始化。

int a[6]=;

int b[6]=;

int i,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=j始终不会被执行。

上机实验六一维数组 答案

班级学号姓名 本次题目一共5题,必做4个,选做1个。选做题可能有点难度,请尝试着做一下,能做出来说明目前你已经很强了!一 目的要求。1 掌握一维数组的基本概念,定义和初始化方法 2 掌握一维数组的基本操作,如输入 输出 引用数组元素 3 掌握与数组有关的基本算法,如寻找最大 最小值 排序等。二 实验...

上机实验七 二维数组字符数组答案

1算法提示 分析一个10行的杨辉三角,需要一个10 10的二维矩阵a,则 1 杨辉三角为下三角矩阵,只需要求出第i行 i 0,1,2,9 前i 1个元素,即a i j 0 j 0.i 2 每行的第0列元素均为1,即a i 0 1 3 每行的主对角线元素也均为1,即a i i 1 4 从第2行开始,每...

上机实验七 二维数组字符数组答案

1算法提示 分析一个10行的杨辉三角,需要一个10 10的二维矩阵a,则 1 杨辉三角为下三角矩阵,只需要求出第i行 i 0,1,2,9 前i 1个元素,即a i j 0 j 0.i 2 每行的第0列元素均为1,即a i 0 1 3 每行的主对角线元素也均为1,即a i i 1 4 从第2行开始,每...