9.27 输入一行数字字符 , 请用数组元素作为计数器来统计每个数字字符的个数 . 用下标为

0 元素统计字符 "1" 的个数 , 下标为 1 的元素统计字符 "2" 的个数 ,...

 

※程序如下※

 

#include<stdio.h>

void count(int a[])

{

int i;

char ch;

while((ch=getchar())!='\n')

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

if(i==ch-'0')

if(i==0)

a[9]++;

else

a[i-1]++;

}

main( )

{

int i,a[10]={0};

count(a);

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

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

}

——————————————————————————————————————

9.28 编写函数 , 对具有 10 个整数的数组进行如下操作 : 从第 n 个元素开始直到最后一个元

素 , 依次向前移动一个位置 . 输出移动后的结果 .

 

※程序如下※

fun (int a[],int n)

{

int i;

for(i=n;i<9;i++)

a=a[i+1];

}

 

main()

{

int a[10]={0,1,2,3,4,5,6,7,8,9},n,i;

scanf("%d",&n);

fun(a,n);

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

printf("%d ",a);

}

——————————————————————————————————————

9.29 编写函数把数组中所有奇数放在另一个数组中返回 .

 

※程序如下※

 

#include<stdio.h>

#include<conio.h>

int fun(int a[],int b[])

{

int i,j=0;

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

if(a%2==1)

b[j++]=a;

return(j);

}

 

main()

{

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

clrscr();

printf("\n****Enter 10 integer number:****\n");

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

scanf("%d",&a);

j=fun(a,b);

printf("****Output the odd arrage***:\n");

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

printf("%d ",b);

getch();

}

——————————————————————————————————————

9.30 编写函数对字符数组中的输入字母,按由大到小的字母顺序进行排序。

 

※程序如下※

 

#include<stdio.h>

void alpha_sort(char a[],int n);

void alpha_rout(char a[],int n);

main()

{

char a[20];

int n;

clrscr();

printf("****The original alphabetic is****:\n");

gets(a);

n=strlen(a);

alpha_sort(a,n);

alpha_rout(a,n);

}

 

void alpha_sort(char a[],int n)

{

int i,j,p,t;

for(j=0;j<n-1;j++)

{

p=j;

for(i=j+1;i<n;i++)

if(a[p]<a) p=i;

if(p!=j)

{

t=a[j];

a[j]=a[p];

a[p]=t;

}

}

}

 

void alpha_rout(char a[],int n)

{

int i;

printf("\n****The alphabetic of sorting is****:\n");

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

printf("%c",a);

}

——————————————————————————————————————

9.31 输入若干有序数放在数组中。然后输入一个数,插入到此有序数列中,插入后,

数组中的数仍然有序。请对以下三种情况运行你的程序,以便验证你的程序是否

正确。

( 1 )插在最前 ( 2 )插在最后 ( 3 )插在中间

 

※程序如下※

 

#include<stdio.h>

#define M 10

void sort(int a[M],int b[M+1],int n)

{

int i;

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

{

if(a[0]>a[M-1])

{

if(n<a)

b=a;

else

{

b=n;

break;

}

}

 

else

{

if(n>a)

b=a;

else

{

b=n;

break;

}

}

}

if(i<M)

for(;i<M;i++)

b[i+1]=a;

else

b=n;

}

 

main()

{

int i,n,a[M],b[M+1];

clrscr();

printf("Enter ten integer number(be sorted):\n");

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

scanf("%d",&a);

printf("Enter a number\n");

scanf("%d",&n);

sort(a,b,n);

printf("Result of insert\n");

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

printf("%d ",b);

}

——————————————————————————————————————

9.32 编写函数把任意十进制整数转换成二进制数 . 提示 : 把十进制数不断除 2 除 , 余数放

在一个一维数组中 , 直到商数为零 . 在主函数中进行输出 , 要求不得按逆序输出 .

 

※程序如下※

 

#include<stdio.h>

int dec_bin(int a[],int decimal) /* 变量 decimal 表示十进制数 */

{

int i=0,remainder;

while(decimal>0)

{

remainder=decimal%2;

decimal=decimal/2;

a[i++]=remainder;

if(decimal<2)

{

a=decimal;

break;

}

}

return(i);

}

 

main()

{

int i,j,decimal,a[64];

printf("Enter decimal number:\n");

scanf("%d",&decimal);

j=dec_bin(a,decimal);

for(i=j;i>=0;i--)

printf("%d",a);

}

——————————————————————————————————————

9.33 编写函数调用随机函数产生 0 到 19 之间的随机数,在数组中存入 15 个互不重复的整

数。要求在主函数中输出结果。若已定义 x 为 int 类型,调用随机函数步骤如下:

# include "stdio.h"

.

.

.

x=rand()%20 /* 产生 0 到 19 的随机数 */

 

※程序如下※

 

#include<stdlib.h>

void rand1(int a[])

{

int i=0,j,x,flag;

while(i<15)

{

flag=1;

x=rand()%20;

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

if(a[j]==x)

{

i--;

flag=0;

break;

}

if(flag==1)

a=x;

i++;

}

}

 

main()

{

int i,a[15];

clrscr();

rand1(a);

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

printf("%d ",a);

}

——————————————————————————————————————

9.34 求任意方阵每行、每列、两对角线上元素之和。

 

※程序如下※

 

#include<stdio.h>
#define M 3
void line_sum(int a[M][M],int a1[])
{
int i,j,k;
for(i=0,k=0;i<M;i++,k++)
{
a1[k]=0;
for(j=0;j<M;j++)
a1[k]+=a[i][j];
}
}

void column_sum(int a[M][M],int a2[])
{
int i,j,k;
for(i=0,k=0;i<M;i++,k++)
{
a2[k]=0;
for(j=0;j<M;j++)
a2[k]+=a[j][i];
}
}

void diagonal_sum(int a[M][M],int a3[])
{
int i,j;
for(i=0;i<M;i++)
for(j=0;j<M;j++)
{
if(i==j)
a3[0]+=a[i][j];
if(i+j==M-1)
a3[1]+=a[i][j];
}
}

main()
{
int i,j,a[M][M],a1[M],a2[M],a3[2]={0};
clrscr();
i=M;
printf("****Enter %d x %d phalanx****\n",i,i);
for(i=0;i<M;i++)
for(j=0;j<M;j++)
scanf("%d",&a[i][j]);
line_sum(a,a1);
column_sum(a,a2);
diagonal_sum(a,a3);
for(i=0;i<M;i++)
printf("line%d=%d\n",i,a1[i]);
for(i=0;i<M;i++)
printf("column%d=%d\n",i,a2[i]);
for(i=0;i<2;i++)
printf("diagonal%d=%d\n",i,a3[i]);
}



——————————————————————————————————————

9.35 求两个矩阵的和

 

#include<stdio.h>

#define M 4

void add(int a[M][M],int b[M][M],int c[M][M])

{

int i,j;

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

{

for(j=0;j<M;j++)

c[i][j]=a[i][j]+b[i][j];

}

}

 

main()

{

int i,j,k,a[M][M],b[M][M],c[M][M]={0};

i=M;

printf("****Enter NO.1 Matrix( %d x %d)****\n",i,i);

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

for(j=0;j<M;j++)

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

i=M;

printf("****Enter NO.2 Matrix( %d x %d)****\n",i,i);

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

for(j=0;j<M;j++)

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

add(a,b,c);

i=M;

printf("****Output result Matrix( %d x %d)****\n",i,i);

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

{

for(j=0;j<M;j++)

printf("%5d",c[i][j]);

printf("\n");

}

}

——————————————————————————————————————

9.36 编写函数打印出以下形式的乘法九九表。

** A MULTIPLICATION TABLE **

(1) (2) (3) (4) (5) (6) (7) (8) (9)

----------------------------------------------------------

(1) 1 2 3 4 5 6 7 8 9

(2) 2 4 6 8 10 12 14 16 18

(3) 3 6 9 12 15 18 21 24 27

(4) 4 8 12 16 20 24 28 32 36

(5) 5 10 15 20 25 30 35 40 45

(6) 6 12 18 24 30 36 42 48 54

(7) 7 14 21 28 35 42 49 56 63

(8) 8 16 24 32 50 48 56 64 72

(9) 9 18 27 36 45 54 63 72 81

----------------------------------------------------------

 

※程序如下※

 

#include<stdio.h>

main()

{

int i,j;

clrscr();

printf("** A MULTIPLICATION TABLE **\n");

printf("\(1) (2) (3) (4) (5) (6) (7) (8) (9)\n");

printf("----------------------------------------------------------\n");

for(i=1;i<=9;i++)

{

printf("\t(%d)",i);

for(j=1;j<=9;j++)

printf("%4d",i*j);

printf("\n");

}

printf("----------------------------------------------------------\n");

}

——————————————————————————————————————

9.37 调用随机函数为 5 x 4 的矩阵置 100 以内的整数,输出该矩阵,求出每行元素之和

并把和值最大的那一行与第一行上的元素对调。若已定义 x 为 int 类型,调用随机

函数步骤如下:

# include "stdio.h"

#include<stdio.h>
#include<stdlib.h>
void rand1(int *p)
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<4;j++,p++)
*p=rand()%100;
}

void exchange(int a[5][4])
{
int i,j,max,temp,b[5]={0};
for(i=0;i<5;i++)
for(j=0;j<4;j++)
b[i]+=a[i][j];
for(i=0;i<5;i++)
if(b[i]<b[i+1])max=i+1;
for(j=0,i=0;j<4;j++)
{
temp=a[i][j];
a[i][j]=a[max][j];
a[max][j]=temp;
}
}

main()
{
int i,j,a[5][4];
clrscr();
rand1(a);
printf("****The origient Matrix****\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
exchange(a);
printf("****The exchange Matrix****\n");
for(i=0;i<5;i++)
{
for(j=0;j<4;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}


——————————————————————————————————————

9.38 调用随机函数为 5 x 5 的矩阵置 100 以内的整数,输出该矩阵,然后逆置该矩阵。

即将第一列的元素放在第一行上、第二列的元素放在第二行上、其它依次类推。

 

※程序如下※

 

#include<stdio.h>
#include<stdlib.h>
void Rand1(int *p)
{
int i,j;
for(i=0;i<5;i++)
for(j=0;j<5;j++,p++)
*p=rand()%100;
}

void Reverse_Matrix(int a[5][5])
{
int i,j,temp;
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
{
temp=a[j][i];
a[j][i]=a[i][j];
a[i][j]=temp;
}
}

main()
{
int i,j,a[5][5];
clrscr();
Rand1(a);
printf("****The Result of rand() Function()****\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
Reverse_Matrix(a);
printf("****The Result of Reverse Matrix Function()****\n");
for(i=0;i<5;i++)
{
for(j=0;j<5;j++)
printf("%5d",a[i][j]);
printf("\n");
}
}