实验6-数组——参考答案

  • 格式:doc
  • 大小:101.00 KB
  • 文档页数:16

. .

.

.页脚. 实验6 数组

一、一维数组实验

2. 编程:输入长度为10的整型数组并输出;然后将其逆序存放后再输出。例如:

#include

void main()

{

int i, j, a[10], t;

printf("Input 10 number: ");

for(i=0; i<10; i++) /*读入数据*/

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

printf("origin data: ");

for(i=0; i<10; i++) /*输出原始数据*/

printf("%d ", a[i]);

printf("\n");

for(i=0,j=9; i

{

t=a[i];

a[i]=a[j];

a[j]= t;

}

printf("After reversed: "); /*输出逆序存放后的数据*/

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

printf("%d ", a[i]);

printf("\n");

}

3. 编程:输入n个(1

.

.页脚.

#include

void main()

{

int i, n , max, min, a[10], sum;

float average;

printf("Input n (1

scanf("%d", &n);

if(1

{

printf("Input %d integer:", n); /*输入数据并求累加和*/

for(i=0, sum=0; i

{

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

sum+=a[i];

}

average=(float)sum/n; /*求出平均值*/

for(i=0, max=0, min=0; i

{

if(a[i] > a[max])

max= i;

if(a[i] < a[min])

min= i;

}

printf("max=%-5d index=%d\n", a[max], max);

printf("min=%-5d index=%d\n", a[min], min);

printf("average=%.2f\n", average);

}

else

printf("数据超出围");

}

4. 编程:青年歌手参加歌曲大奖赛,有10个评委对她(他)进行打分,试编程求这位选手的平均得分并输出(去掉一个最高分和一个最低分)。

#include

void main()

{

int i, max, min;

float a[10], ave;

printf("请输入10个评委的打分:");

for(i=0, ave=0; i<10; i++) /*输入分数并求累加和*/ . . .

.页脚. {

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

ave+=a[i];

}

for(i=0, max=0 , min=0; i<10; i++) /*求最大、最小值的下标*/

{

if(a[i]>a[max])

max=i;

if(a[i]

min=i;

}

ave=ave-a[max]-a[min];

ave=ave/8;

printf("该选手的评委打分是:");

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

printf("%.2f ", a[i]);

printf("\n");

printf("去掉最高分%.2f,去掉最低分%.2f,该选手的平均得分是%.2f\n", a[max], a[min], ave);

}

5. 编程:用两种方法输出斐波那切数列的前40项(参考例6-4)。

要求: (1)方法1:不使用数组;

#include

void main()

{

int f1=1, f2=1, f3, i;

printf("%12d%12d", f1, f2);

for(i=3; i<=40; i++)

{

f3=f1+f2;

printf("%12d", f3);

if(i%5==0)

printf("\n");

f1= f2;

f2= f3;

}

}

(2)方法2:使用一维数组。 . .

.

.页脚. #include

void main()

{

int i;

int fib[40];

fib[0]=fib[1]=1;

for(i=2; i<40; i++) /*计算其余的38个数*/

fib[i]= fib[i-1] + fib[i-2];

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

{

printf("%12d",fib[i]);

if((i+1)%5==0)

printf("\n");

}

}

6. 编程:输入n个(1

#include

void main()

{

int i, j, n;

float a[10], t;

printf("Input n: ");

scanf("%d",&n);

if(n>1 && n<=10)

{

printf("Input %d number:", n);

for(i=0;i

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

printf("Before sorted:"); /*输出排序前的数据*/

for(i=0; i

printf("%.2f ", a[i]);

printf("\n");

for(i=0; i

.页脚. for(j=0; j

if( a[j] < a[j+1] )

{

t=a[j];

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

a[j+1]=t;

}

printf("After sorted:"); /*输出排序结果*/

for(i=0; i

printf("%.2f ", a[i]);

printf("\n");

}

else

printf("数据超出围");

}

7. 在上题基础上(输入n个float型的数据并保存到数组中,用冒泡法或选择法将它们从大到小排序后输出)完成:在已经排好序的数组(长度不足10)中插入一个数m(键盘输入)后输出,保持数组的降序排列。

程序分析:首先判断此数是否大于最后一个数,然后再考虑插入中间的数的情况,插入后此元素之后的数,依次后移一个位置。

#include

void main()

{

int i, j, n, p;

float a[10], t, m;

printf("Input n: ");

scanf("%d", &n);

if(n>1 && n<=10)

{

printf("Input %d number:", n);

for(i=0; i

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

printf("Before sorted: "); /*输出排序前的数据*/

for(i=0; i

printf("%.2f ", a[i]);

printf("\n");

for(i=0; i

for(j=0; j

if( a[j] < a[j+1] )

{