9.27 输入一行数字字符,请用数组元素作为计数器来统计每个数字字符的个数。用下标为0的元素统计字符‘0’的个数,用下标为‘1’的元素统计字符‘1’的个数······
#include
main()
{ int str[10]={0},i;
char ch;
printf("请输入一串字符:");
while((ch=getchar())!='n')
{ if((ch>='0')&&(ch<='9'))
str[ch-'0']+=1;
}
for(i=0;i<=9;i++)
printf("%d:%d个n",i,str[i]);
}
9.28 编写函数,对具有10个整数的数组进行如下操作:从下标为n的元素开始直到最后一个元素,一次向前移动一个位置。输出移动后的结果。
#include
//#include
#define NUM 10
void fun(int *a,int n,int x)
{ int i;
for(i=x;i
9.29 编写函数,把数组中的所有奇数放在另一个数组中返回。
#include
#include
#define M 20
int fun(int *a,int *b,int n)
{ int i,k=0;
for(i=0;i
9.30 编写函数,对字符数组中的字母按由大到小的字母顺序进行排序。
//注意:这段代码比较繁琐,可将arrin函数功能直接写入主函数进行简化。
#include
#define NUM 6
void fun(char *,int );
void arrin(char *a,int n)//输入字符
{ int i=0;
char ch;
printf("请输入5个字符:");//只能输入5个字符,否则会出错
while(((a[i]=getchar())!='n')&&(i
9.31 输入若干有序数放在数组中。然后输入一个数,插入到此有序列数中,插入后,数组中的数仍然有序。请对插在最前、插在最后、插在中间三种情况运行程序,以便验证程序是否正确。
#include
#define NUM 10
main()
{ int a[NUM],i,j,k,n,x;
n=NUM;
printf("请输入即将输入有序数的个数:");scanf("%d",&k);
while(k>=n)
{ printf("请重新输入即将输入有序数的个数:");scanf("%d",&k);//控制输入的数在NUM的范围内
}
printf("请输入%d个有序数:",k);//十个元素,得空出来一个元素来空出插入的位置
for(i=0;i=x){j=i;break;}//找出插入的位置,赋值给j
else j=k;//当输入的数大于所有的有序数时,j=k,在末尾插入。
}
for(i=k;i>=j;i--)a[i+1]=a[i];//空出位置
a[j]=x;//替换
k++;//输出的有序数+1
for(i=0;i
9.32 编写函数,把任意十进制正整数转换成二进制数。提示:把十进制数不断被2除的余数放在一个一维数组中,直到商为零。在主函数中进行输出,要求不得按逆序输出。
注意:这个程序可能不符合题目中的主函数不得按逆序输出的要求,有其他不同见解的小伙伴可以提提修改意见,本人也是开始学c不久。( •̀ ω •́ )✧
#include
#define NUM 20
int fun(int *a,int n,int x)
{ int i=0,j,k,t;
while(x>0)
{ a[i]=x%2;
x=x/2;
i++;
}
for(i=n-1;i>=0;i--)if(a[i]==1){k=i;break;}//从后向前遍历,选出第一个不为0的下标,这个下标代表的元素就是二进制数的开头
i=0;j=k;
while(i
9.33 编写函数,调用随机数产生0到19之间的随机数,在数组中存入 15个互不重复的整数。要求在主函数进行输出结果。若已定义x为int类型,调用随机函数步骤如下。
//方法1:
#include
#include
#define NUM 15
void fun(int *a,int n)
{ int i,j,x;
for(i=0;i
//方法2:
#include
#include
#define NUM 15
void fun(int *a,int n)
{ int i,j,x;
for(i=0;i
9.34 求任意方阵每行、每列、两对角线上元素之和。
//这个程序写的有点繁琐,仅供参考
#include
#include
#define M 5
#define N 6
void getdata(int (*)[]);
void rowsum(int (*)[],int *);
void colsum(int (*)[],int *);
void diasum(int (*)[],int *);
void outdata(int (*)[]);
void getdata(int (*a)[N])
{ int i,j;
for(i=0;i=0;j--)if(i==j)sum+=a[i][j];}
sdia[0]=sum;
printf("对角线元素之和:%d ",sdia[0]);
}
main()
{ int a[M][N];
int srow[M];int scol[N],sdia[1];
getdata(a);
outdata(a);
rowsum(a,srow);
colsum(a,scol);
printf("n");
diasum(a,sdia);
printf("n");
}
9.35 求两个矩阵的和。
#include
#include
#define M 5
#define N 6
void fun(int (*a)[N],int (*b)[N],int (*c)[N])
{ int i,j,x,y;
for(i=0;i
9.36 编写程序打印出以下形式的乘法九九表。
#include
main()
{ int a[9][9];
int i,j,k,n;
printf("t* * A MULTIP;ICATION TABLE * *n");
printf("t");
for(i=1;i<=9;i++)printf("(%d) ",i);
printf("n");
printf("---------------------------------------------------n");
for(i=0;i<9;i++)
{
for(j=0;j<9;j++)a[i][j]=(i+1)*(j+1);
}
for(i=0;i<9;i++)
{ printf("(%d)",i+1);
printf(" ");
for(n=0;n<9;n++)printf("%-5d",a[i][n]);//%-5d中的负号使输出数据左对齐。
printf("n");
}
printf("---------------------------------------------------n");
}
9.37 调用随机函数为5X4的矩阵置100以内的整数,输出该矩阵,求出每行元素之和,并把和值最大的那一行与第一行上的元素对调。若已定义x为int类型,请参考习题9.33调用随机函数。
//这个程序是用通过自编函数实现的,略显繁琐,不通过自编函数实现可能会更简单。
#include
#include
#define M 5
#define N 4
void getdata(int (*)[]);
void outdata(int (*)[]);
void rowsum(int (*)[],int *);
void compare(int (*)[],int *);
void exchange(int (*)[],int *);
void getdata(int (*a)[N])
{ int i,j;
for(i=0;i
9.38 调用随机函数为5X4的矩阵置100以内的整数,输出该矩阵,然后逆置该矩阵,即将第一列的元素放在第一行上,第二列元素放在第二行上,其他以此类推。
#include
#include
#define M 5
#define N 5
main()
{ int a[M][N];
int i,j,t;
for(i=0;i