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");
}
}