实验八 数组(1)
班级______________姓名___________指导老师_____________成绩___________
第_____________机房___________号机器 时间:________________________
实验目的:1,掌握一维数组的定义和使用。
2,了解二维数组的定义和使用。
实验要求:每次实验前,学生要先预习实验内容,写出分析结果或程序,经实验指导老师检查后,上机运行、调试程序,得出最终正确结果。
实 验 内 容
一、读程序
结果;上机运行程序,得到运行结果,比较之。
1,
#include <stdio.h>
main()
{ int a[ ]={1,2,3,4},i,j,s=0 ;
j = 1;
for ( i = 3 ; 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] = { 1,2,3,4,5,6,7,8,9 } ;
for ( k =0 ; k < 3 ; k ++ )
printf(“%d,\n”,a [k] [2-k ] );
}
C语言程序设计上机指导与同步训练
·40·
·40·
分析结果
运行结果
3.有以下输入,7 10 5 4 6 7 9 8 3 2 4 6 12 2 -1<CR>,则下面程序的运行结果是
#include <stdio.h>
main()
{
int b[51],x,i,j =0,n = 0 ;
scanf(,%d,,&x) ;
while (x>-1)
{ b[++n ] = = x ;
scanf(“%d”,&x);}
for (i=1 ;i <= n ;i++)
if ( b[i] % 2 = = 0) b[ + +j ] = = b[i] ;
for ( i =1 ; i <= i; i + +)
printf(,%3d \n”,b[i] );
printf (,\n”) ;
}
分析结果
运行结果
4,
#include <stdio.h>
main()
{
int i,j,row =0,col = 0,m ;
int a[3][3] = { 1,-2,0,4,-5,6,2,4,9};
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 ] ;
row = i ;
col = j ;
}
printf(,( % d,% d ) = % d \n“,row,col,m );
}
分析结果
运行结果
5.若有以下输入( CR 表示按Enter键) 52<CR>,则将下面程序的运行结果填入下表中。
#include <stdio.h>
main()
第一部分 C语言程序设计上机指导
·41·
·41·
{
int low =0,mid,high = 7,found,x ;
found =0 ;
int a[ 8 ] = { 6,12,18,42,44,52,67,94 };
scanf(,%d,,&x ) ;
while (( low <= high ) && ( found = = 0 ))
{
mid = ( low + high ) / 2 ;
if ( x > a [mid] ) low = mid + 1;
else if (x < a [mid] ) high = mid -1 ;
else { found = 1 ; break ; }
}
if (found = = 1 )
printf(,Search Successful ! The index is,% d \n,,mid );
else printf (,Can’t search ! \n,);
}
分析结果
运行结果
6,
#include <stdio.h>
main()
{
int i,j,n =1 ;
int a[ 5 ][ 5 ] ;
for (i=0 ;i < 5 ;i++)
for (j = 0 ; j < 5 ; j++ )
a [ i ][ j ] =n + + ;
printf (,The result is,\n” ) ;
for (i=0 ;i < 5 ;i++)
{ for (j = 0 ; j < = i ; j++ )
printf (,% 4 d,,a [ i ][ j ] );
printf (,\ n,) ;
}
}
分析结果
运行结果
二、完成程序
要求:根据要求,分析给出的上下语句,填写程序。
1,以下程序的功能是以每行4 个数据的形式输出a数组元素,请在_______上填写正确内容。
#include <stdio.h>
#define N 20
main()
C语言程序设计上机指导与同步训练
·42·
·42·
{ int a [N ] ;
for ( i = 0 ; i <= N -1 ; i + + )
scanf (,% d,,____________) ;
for ( i = 0 ; i <= N -1 ; i + + )
if ( i % 4 = = 0 ) printf (“\n,) ;
printf (,%3d,,_______________);
}
printf (“\n“) ;
}
2,下面程序的功能是将十进制整数转换成二进制整数,请在_______上填写正确内容。
#include <stdio.h>
main()
{
int k =0,n,j,num[20] ;
printf (,Enter data that will be converted \n,) ;
scanf(,%d,,&n) ;
do
{ k + + ;
num[k] = n ______ 2 ;
n = n / 2 ;
} while( n ! = 0 );
printf (“The data % d has been converted,\n”,n ) ;
for ( _________________________)
printf(,% 4d \n,,num[k] );
}
3,设数组a中的元素均为正整数,以下程序是求a中偶数的个数和偶数的平均值,请在_______上填写正确内容。
#include <stdio.h>
main()
{
int a [10 ] = { 1,2,3,4,5,6,7,8,9,10 } ;
int k,s,i ;
float ave ;
for ( i = 0,k= s =0 ; i< 10 ;i ++ )
{ if ( _____________) continue ;
s + = _____________ ;
k + + ;
}
if( k! = 0)
{ ave = s / k ; printf (,%d,%f \n,,k,ave );
}
}
4,以下程序的功能是求出矩阵 a 的主对角线上的元素之和,请在_______上填写正确内容。
#include <stdio.h>
main()
第一部分 C语言程序设计上机指导
·43·
·43·
{
int a[ 3 ][ 3 ] = { 1,3,5,7,9,11,13,15,17 };
int sum = 0,i,j ;
for (i=0 ;i < 3 ;i++)
for (j = 0 ; j < 3 ; j++ )
if (____________) sum += _______________;
printf (,Sum = %d \n”,sum) ;
}
三、调试程序
要求:分析下列程序是否正确,如有错,错在哪儿?应如何改正?如正确,运行结果如何?上机调试之。
1,
main()
{ int a ( 3) = { 3 * 0 } ;
int i ;
for (i=0 ;i < 3 ;i+ +) scanf (,%d,,&a[ i ] );
for (i=0 ;i < 3 ;i++) a[ 0 ] = a [ 0 ] + a [ i] ;
printf(,%d,“,a[0] ) ;
}
运行结果,
正确
错误所在,
错误
应改为,
2,
main()
{ int a [ 10 ],i ;
scanf (,%d,,&a) ;
for ( i =1 ; i <=10 ; i + +) ;
a [0] = a [ 0] + a[ i ] ;
printf(,Sum= % d \n“,a[0]) ;
}
运行结果,
正确
错误所在,
错误
应改为,
3,下面程序将二维数组a 的行和列元素互换后存到另一个二维数组b中。
main()
{ int i,j ;
int a [ ] [ ] = { { 1,2,3 },{ 4,5,6 }} ;
int b [3][2],i,j ;
for (i=0 ;i < =1 ;i++)
{ for (j = 0 ; j < =2 ; j++ )
C语言程序设计上机指导与同步训练
·44·
·44·
{ printf (“%5d”,a [ i ][ j ] );
b [ j ][ I ] = a [ I ][ j ] ;
}
printf (,\n”) ;
}
for (i=0 ;i < =1 ;i++)
{ for (j = 0 ; j < =2 ; j++ )
printf (“%5d”,b [ i ][ j ] );
printf (,\n”) ;
}
}
运行结果,
正确
错误所在,
错误
应改为,
4,下面程序的功能是用数组求Fibonacci数列前20 项,每行输出5项。
main()
{ int i,f [ 20 ] ;
f [0] = f[ 1 ] =1 ;
for (i=2 ; i < 20 ; i ++)
{ f [ 1 ] = f [ 1 ] + f[ 2] ;
f [ 2 ] = f [ 2] + f [1] ;
}
for (i=0 ; i < 20 ; i ++)
{ if ( i%4= = 0) printf(“\n”) ;
printf(“%12d”,f [ i ] );
}
}
运行结果,
正确
错误所在,
错误
应改为,
四、写程序
1,编写一个程序,从键盘输入 30 个学生的成绩,统计最高分、最低分和平均分,并输出。
2,通过循环按行顺序为一个5*5 的二维数组a赋1~25的自然数,然后输出该数组的右上半三角的数,试编程。
3,设计一个程序,统计4个人的g5483g12092数,g2454g2164g6249g12092的人数,低g112250个,4个人的g5483g12092
分g2047用整数1、2、3、4表示,用-1表示输入结g7475,输出统计结果。
4,将一个数组中的值按g17882序g18337g7044存g6930。g1375g3926:g2419g7481顺序为8、6、5、3、2、1,g16213求g6925
为1、2、3、5、6、8。