当前位置:文档之家› 实验八数组应用一答案

实验八数组应用一答案

实验八数组应用(一)答案
一、实验目的
1. 掌握一维数组的定义和使用;
2. 了解二维数组的定义和使用。

二、实验学时数
2学时
三、实验步骤
(一)阅读程序
1.#include<stdio.h>
main()
{ int a[]={1,2,3,4,5},i,j,s=0;
j = 1;
for ( i = 4 ; i>=0 ; i--)
{
s = s+ a[i] * j ;
j = j * 10 ;
}
printf(" s= %d \n" , s );
2. #include<stdio.h>
main()
{
int k ;
int a[3][3] = {9,8,7,6,5,4,3,2,1} ;
for (k =0;k < 3;k++ )
printf("%d \n",a[k][2-k]);
3.main()
{ int i , j ,x =0 ,y = 0 , m ;
int a[3][3] = { 1, -2 , 0 , 4 , -5 , 6 , 2 , 4 };
m = a [0][0] ;
for (i=0 ;i < 3 ;i++)
for (j = 0 ; j<3 ; j++ )
if ( a[ i] [ j ] >m )
{
m = a[ i ][ j ] ;
x = i ;
y = j ;
}
printf(“ ( % d , % d ) = % d \n“ , x , y,m );
(二)完成程序
要求:依据题目要求,分析已给出的语句,填写空白。

但是不要增行或删行,改动程序的结构。

1.下面程序的功能是将十进制整数转换成二进制,请在_______上填写正确内容。

#include<stdio.h>
main()
{ int k=0,n,j,num[16]={0};
printf("输入要转换的十进制数\n");
scanf("%d",&n);
printf ("%d转换为二进制数:\n",n);
do
{ num[k]=_n%2_;
n=n/2;k++;
} while(n!=0);
for(k=15;k>=0;k--)
printf("%d",num[k]);
}
2、设数组 a 的元素均为正整数,以下程序是求 a 中奇数的个数和奇数的平均值,请在_______上填写正确内容。

#include<stdio.h>
main()
{ int a[10]={10,9,8,7,6,5,4,3,2,1};
int k,s,i;
float ave;
for(i=0,k=s=0;i<10;i++)
{ if(a[i]%2==0) continue ;
s+=a[i];
k++;
}
if(k!=0)
{ ave=s/k;
printf ("%d,%f\n",k,ave);
}
}
(三)调试程序
要求:调试运行下列程序是否正确,若有错,写出错在何处?填写正确的运行结果。

1.以下程序实现的功能是输入四个数,求这四个数的和.
#include<stdio.h>
main()
1.{ int a(4)={4*0};//改为 int a[4]={0};
2. int i;
3.for (i=0;i<4;i++) scanf("%d",&a[i]);
4.for (i=0;i<4;i++) a[0]=a[0]+a[i];// 改为i=0
5.printf( "%d ",a[0]);
2.以下程序实现的功能是求10个元素的和。

行号#include<stdio.h>
1.main()
2.{ int a[11],i;//改为 int a[11]={0},i;
3. for(i=1;i<=10;i++)
4. scanf ("%d",&a); //改为 &a[i]
5. for (i=1;i<=10;i++);
6. a[0]=a[0]+a[i];
3.调试下列程序,使之具有如下功能:输入10个整数,按每行3个数输出这些整数,最后输出10个整数的平均值。

写出调试过程。

行号
1 main( )
2 { int i,n,a[10],av;//改为 int i,n=10,a[10];float av;
3 for(i=0;i<n;i++)
4 scanf("%d",a[i]);//改为 scanf(“%d”,&a[i]);
5 for(i=0;i<n;i++)
6 { printf("%d",a[i]);
7 if(i%3==0)
8 printf("\n");}
9 for(i=0;i!=n;i++)
10 av+=a[i];
11 printf("av=%f\n",av); }//改为printf(“av=%f\n”,av/10); 上面给出的程序是完全可以运行的,但是运行结果是完全错误的。

调试时请注意变量的初值问题、输出格式问题等。

请使用前面实验所掌握的调试工具,判断程序中的错误并改正。

1.试编制程序使数组中的数按照从大到小的次序排列。

(起泡法或选择法) #include<stdio.h>
#define N 5
main( )
{ int a[N];
int i,j,t;
for (i=0;i<N;i++)//输入N个数
scanf("%d",&a[i]);
printf("\n");
for (j=0; j<N-1; j++)//排序
for(i=j+1; i<N; i++)
if (a[j]<a[i])
{ t=a[j];a[j]=a[i];a[i]=t; }
printf("The sorted numbers: \n");
for (i=0; i<N; i++)//输出排序后的值
printf(" %d ",a[i]); }
2.求5×5矩阵下两条对角线上的各元素之和。

#include<stdio.h>
#define N 5
main( )
{int a[N][N],i,j,s=0;
for(i=0;i<N;i++) //输入数组元素
for(j=0;j<N;j++)
scanf("%d",&a[i][j]);
for(i=0;i<N;i++) //求对角线元素和
for(j=0;j<N;j++)
if((i==j)||(i+j==N-1))s=s+a[i][j];
for(i=0;i<N;i++) //输出数组元素
{for(j=0;j<N;j++)
printf(" %d ",a[i][j]);
printf("\n");}
printf("%d",s);//输出对角线元素和}。

相关主题