C语言习题06_数组
习题06(01)十进制转换为二进制
题目描述
将输入的十进制正整数 n 转换为二进制数,并将转换结果输出,输出按高位在左,低位在右
的顺序。
输入描述
输入一个不大于 65536* 65536 的正整数。
输出描述
从第一个非零的高位开始输出,高位在左,低位在右。
输入样例
72
输出样例
1001000
#include <stdio.h>
#include <math.h>
int main ( )
{
unsigned int n, r, i, j, sum;
unsigned int a[ 33 ] = { 0 } ;
scanf ( "%d" , & n) ;
r = 1 ;
sum = 0 ;
i = 31 ;
j = 0 ;
while ( n)
{
r = n % 2 ;
n = n / 2 ;
a[ i] = r;
i-- ;
j++ ;
}
for ( i = 32 - j; i < 32 ; i++ )
{
printf ( "%d" , a[ i] ) ;
}
printf ( "\n" ) ;
return 0 ;
}
习题06(02)读入数组元素的值按要求计算和
题目描述
编程实现读入 5 行 4 列矩阵中的前 4 行 3 列整数(如下图,数据可变),然后将各行之和、
各列之和与所有数字之和求出,并对应填入表中的最后一列、最后一行以及矩阵的右下角位
置并输出。
7 8 9
4 5 6
1 2 3
9 8 7
输入描述
以行优先的顺序依次输入矩阵中的 12 个数,每行输入一个整数。
输出描述
以方阵的形式输出整个矩阵的数据,格式控制为:printf("%4d",a[i][j]);
输入样例
1
2
3
4
5
6
7
8
9
11
12
13
输出样例
1 2 3 6
4 5 6 15
7 8 9 24
11 12 13 36
23 27 31 81
#include <stdio.h>
int main ( )
{
int i, j, t;
int a[ 5 ] [ 4 ] ;
for ( i = 0 ; i < 4 ; i++ )
{
for ( j = 0 ; j < 3 ; j++ )
{
scanf ( "%d" , & a[ i] [ j] ) ;
}
}
a[ 0 ] [ 3 ] = a[ 0 ] [ 0 ] + a[ 0 ] [ 1 ] + a[ 0 ] [ 2 ] ;
a[ 1 ] [ 3 ] = a[ 1 ] [ 0 ] + a[ 1 ] [ 1 ] + a[ 1 ] [ 2 ] ;
a[ 2 ] [ 3 ] = a[ 2 ] [ 0 ] + a[ 2 ] [ 1 ] + a[ 2 ] [ 2 ] ;
a[ 3 ] [ 3 ] = a[ 3 ] [ 0 ] + a[ 3 ] [ 1 ] + a[ 3 ] [ 2 ] ;
a[ 4 ] [ 0 ] = a[ 0 ] [ 0 ] + a[ 1 ] [ 0 ] + a[ 2 ] [ 0 ] + a[ 3 ] [ 0 ] ;
a[ 4 ] [ 1 ] = a[ 0 ] [ 1 ] + a[ 1 ] [ 1 ] + a[ 2 ] [ 1 ] + a[ 3 ] [ 1 ] ;
a[ 4 ] [ 2 ] = a[ 0 ] [ 2 ] + a[ 1 ] [ 2 ] + a[ 2 ] [ 2 ] + a[ 3 ] [ 2 ] ;
a[ 4 ] [ 3 ] = a[ 0 ] [ 3 ] + a[ 1 ] [ 3 ] + a[ 2 ] [ 3 ] + a[ 3 ] [ 3 ] ;
t = 0 ;
for ( i = 0 ; i < 5 ; i++ )
{
for ( j = 0 ; j < 4 ; j++ )
{
if ( t % 4 == 0 )
{
printf ( "\n" ) ;
}
printf ( "%4d " , a[ i] [ j] ) ;
t++ ;
}
}
printf ( "\n" ) ;
return 0 ;
}
习题06(03) 魔方阵
题目描述
输出魔方阵,所谓魔方阵即它的每一行、每一列和对角线之和均相等。
输入描述
请输入 1 到 15 之间的奇数作为魔方的行列宽度。
输出描述
以矩阵的形式输出魔方矩阵数据。以 printf("%5d",a[i][j])的格式要求分开相邻数据。
输入样例
5
输出样例
17 24 1 8 15
23 5 7 14 16
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
#include <stdio.h>
int main ( )
{
unsigned long int a[ 30 ] [ 30 ] ;
int i, j, k, n;
scanf ( "%ld" , & n) ;
if ( ( n != 0 ) && ( n <= 15 ) && ( n % 2 != 0 ) )
{
for ( i = 1 ; i <= n; i++ )
{
for ( j = 1 ; j <= n; j++ )
{
a[ i] [ j] = 0 ;
}
}
j = n / 2 + 1 ;
a[ 1 ] [ j] = 1 ;
for ( k = 2 ; k <= n * n; k++ )
{
i = i - 1 ;
j = j + 1 ;
if ( ( i < 1 ) && ( j > n) )
{
i = i + 2 ;
j = j - 1 ;
}
else
{
if ( i < 1 )
i = n;
if ( j > n)
j = 1 ;
}
if ( a[ i] [ j] == 0 )
a[ i] [ j] = k;
else
{
i = i + 2 ;
j = j - 1 ;
a[ i] [ j] = k;
}
}
for ( i = 1 ; i <= n; i++ )
{
for ( j = 1 ; j <= n; j++ )
{
printf ( "%5ld" , a[ i] [ j] ) ;
}
printf ( "\n" ) ;
}
}
return 0 ;
}
习题06(04) 在数组中插入一个数
题目描述
有一个已经排好序的数组,要求输入一个数后,按原来排序的规律将它插入数组中。
输入描述
已排好序的数组数据由程序固定给出。输入任意一个待插入的数,类型为整型。
输出描述
输出插入数据后的数组
输入样例
5
输出样例
1,4,5,7,10,11,24,34,45,56,76
#include <stdio.h>
int main ( )
{
int a[ 11 ] = { 1 , 4 , 7 , 10 , 11 , 24 , 34 , 45 , 56 , 76 } ;
int t1, t2, n, end, i, j, t;
scanf ( "%d" , & n) ;
end = a[ 9 ] ;
if ( n >= end)
{
a[ 10 ] = n;
}
else
{
for ( i = 0 ; i < 10 ; i++ )
{
if ( a[ i] > n)
{
t1 = a[ i] ;
a[ i] = n;
for ( j = i + 1 ; j < 11 ; j++ )
{
t2 = a[ j] ;
a[ j] = t1;
t1 = t2;
}
break ;
}
}
}
t = 0 ;
for ( i = 0 ; i < 11 ; i++ )
{
if ( t > 0 )
{
printf ( "," ) ;
}
printf ( "%d" , a[ i] ) ;
t++ ;
}
printf ( "\n" ) ;
return 0 ;
}