第6章利用数组处理批量数据
例6.1对十个数组元素依次赋值0,1,2,3,4,5,6,7,8,9,要求逆序输出。 例6.2用数组来处理斐波那契数列问题。 例6.3有十个地区面积,要求对它们由小到大顺序排列。 例6.4将一个二维数组行和列的元素互换,存到另一个二维数组中。 例6.5有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值和所在行号列号。 例6.6输出一个已知字符串 例6.7输出一个菱形图。 例6.8统计字符个数。 例6.9有三个字符串,要求找出其中“最大”者。
例6.1对十个数组元素依次赋值0,1,2,3,4,5,6,7,8,9,要求逆序输出。
#include <stdio.h>
int main ( )
{
int i, a[ 10 ] ;
for ( i= 0 ; i<= 9 ; i++ )
a[ i] = i;
for ( i= 9 ; i>= 0 ; i-- )
printf ( "%2d" , a[ i] ) ;
printf ( "\n" ) ;
return 0 ;
}
例6.2用数组来处理斐波那契数列问题。
#include <stdio.h>
int main ( )
{
int i;
int f[ 20 ] = { 1 , 1 } ;
for ( i= 2 ; i< 20 ; i++ )
f[ i] = f[ i- 2 ] + f[ i- 1 ] ;
for ( i= 0 ; i< 20 ; i++ )
{
if ( i% 5 == 0 )
printf ( "\n" ) ;
printf ( "%12d" , f[ i] ) ;
}
printf ( "\n" ) ;
return 0 ;
}
例6.3有十个地区面积,要求对它们由小到大顺序排列。
#include <stdio.h>
int main ( )
{
int a[ 10 ] ;
int i, j, t;
printf ( "input 10 numbers:\n" ) ;
for ( i= 0 ; i< 10 ; i++ )
scanf ( "%d" , & a[ i] ) ;
printf ( "\n" ) ;
for ( j= 0 ; j< 9 ; j++ )
for ( i= 0 ; i< 9 - j; i++ )
if ( a[ i] > a[ i+ 1 ] )
{
t= a[ i] ;
a[ i] = a[ i+ 1 ] ;
a[ i+ 1 ] = t;
}
printf ( "the sorted numbers:\n" ) ;
for ( i= 0 ; i< 10 ; i++ )
printf ( "%4d" , a[ i] ) ;
printf ( "\n" ) ;
return 0 ;
}
例6.4将一个二维数组行和列的元素互换,存到另一个二维数组中。
#include <stdio.h>
int main ( )
{
int a[ 2 ] [ 3 ] = { { 1 , 2 , 3 } , { 4 , 5 , 6 } } ;
int b[ 3 ] [ 2 ] , i, j;
printf ( "array a:\n" ) ;
for ( i= 0 ; i<= 1 ; i++ )
{
for ( j= 0 ; j<= 2 ; j++ )
{
printf ( "%5d" , a[ i] [ j] ) ;
b[ j] [ i] = a[ i] [ j] ;
}
printf ( "\n" ) ;
}
printf ( "array b:\n" ) ;
for ( i= 0 ; i<= 2 ; i++ )
{
for ( j= 0 ; j<= 1 ; j++ )
printf ( "%5d" , b[ i] [ j] ) ;
printf ( "\n" ) ;
}
return 0 ;
}
例6.5有一个3×4的矩阵,要求编程序求出其中值最大的那个元素的值和所在行号列号。
#include <stdio.h>
int main ( )
{
int i, j, row= 0 , colum= 0 , max;
int a[ 3 ] [ 4 ] = { { 1 , 2 , 3 , 4 } , { 9 , 8 , 7 , 6 } , { - 10 , 10 , - 5 , 2 } } ;
max= a[ 0 ] [ 0 ] ;
for ( i= 0 ; i<= 2 ; i++ )
for ( j= 0 ; j<= 3 ; j++ )
if ( a[ i] [ j] > max)
{
max= a[ i] [ j] ;
row= i;
colum= j;
}
printf ( "max=%d\nrow=%d\ncolum=%d\n" , max, row, colum) ;
return 0 ;
}
例6.6输出一个已知字符串
#include <stdio.h>
int main ( )
{
char c[ 15 ] = { 'I' , ' ' , 'a' , 'm' , ' ' , 'a' , ' ' , 's' , 't' , 'u' , 'd' , 'e' , 'n' , 't' , '.' } ;
int i;
for ( i= 0 ; i< 15 ; i++ )
printf ( "%c" , c[ i] ) ;
printf ( "\n" ) ;
return 0 ;
}
例6.7输出一个菱形图。
#include <stdio.h>
int main ( )
{
char diamond[ 5 ] [ 5 ] = { { ' ' , ' ' , '*' } , { ' ' , '*' , ' ' , '*' } , { '*' , ' ' , ' ' , ' ' , '*' } , { ' ' , '*' , ' ' , '*' } , { ' ' , ' ' , '*' } , } ;
int i, j;
for ( i= 0 ; i< 5 ; i++ )
{
for ( j= 0 ; j< 5 ; j++ )
{
printf ( "%c" , diamond[ i] [ j] ) ;
}
printf ( "\n" ) ;
}
return 0 ;
}
例6.8统计字符个数。
#include <stdio.h>
int main ( )
{
char string[ 81 ] ;
int i, num= 0 , word= 0 ;
char c;
gets ( string) ;
for ( i= 0 ; ( c= string[ i] ) != '\0' ; i++ )
if ( c== ' ' ) word= 0 ;
else if ( word== 0 )
{
word= 1 ;
num++ ;
}
printf ( "There are %d words in this line.\n" , num) ;
return 0 ;
}
例6.9有三个字符串,要求找出其中“最大”者。
#include <stdio.h>
#include <string.h>
int main ( )
{
char str[ 3 ] [ 20 ] ;
char string[ 20 ] ;
int i;
for ( i = 0 ; i < 3 ; i++ )
{
gets ( str[ i] ) ;
}
if ( strcmp ( str[ 0 ] , str[ 1 ] ) > 0 )
{
strcpy ( string, str[ 0 ] ) ;
}
else
{
strcpy ( string, str[ 1 ] ) ;
}
if ( strcmp ( str[ 2 ] , string) > 0 )
{
strcpy ( string, str[ 2 ] ) ;
}
printf ( "\n" ) ;
printf ( "the largest string:\n" ) ;
printf ( "%s\n" , string) ;
return 0 ;
}