关于通过指针变量来实现参数的间接双向传递的问题
题目如下:1.找出100-999之间的水仙花数构成一个数组。输出该数组,每个数占5列,左对齐,每行输出3个数。(水仙花数:n位数(n>=3),每个位上的数字的n次幂之和等于它本身。例如:1^3+5^3+3^3=153)
2.将该数组中的数按其十位数的大小非降序排列,结果仍保存在原数组中。输出该数组,每个数占5列,左对齐,每行输出6个数。
3.将该数组中的每个数的构成数字拆解形成若干独立的数字,结果仍然保存在该数组中(构成数字的顺序与原数组保持一致。例如:原数组{153,370}=>新数组{1,5,3,3,7,0})。输出该数组,每个数占5列,左对齐,每行输出10个数。
4.去除新数组中的冗余数字(仅保留重复数字的第一次出现),结果仍然保存在该数组中,输出该数组,每个数占5列,左对齐,每行输出10个数。(例如:原数组{1,5,3,3,7,0}=>新数组{1,5,3,7,0})
主函数如下:
#define MAX 100
int main()
{
int arr[MAX],count;
printf("水仙花数列表:\n");
count=fill(arr); //生成水仙花数数组
display(arr,count,3); //按指定的每行数组个数显示数组
printf("排序后数字列表:\n");
msort(arr,count); //按十位数字非降序排序
display(arr,count,6);
printf("构成数字列表:\n");
msplit(arr,&count); //拆解构成数字,更新数组
display(arr,count,10);
printf("去除冗余后数字列表:\n");
count=mremove(arr,count); //去除数组中的冗余数字,保留其首次出现
display(arr,count,10);
return 0;
}
下面是我写的代码:
#include <stdio.h>
#define MAX 100
int fill(int arr[])
{
int i,count,sum,m,n,k;
count=0;
for(i=100,sum=0;i<=999;i++)
{
m=i/100;
n=i/10%10;
k=i%10;
sum=m*m*m+n*n*n+k*k*k;
if(sum==i)
{
arr[count]=i;
count++;
}
}
return count;
printf("\n");
}
void display(int arr[],int count,int n)
{
int i;
for(i=0;i<count;i++)
{
printf("%5d",arr[i]);
if((i+1)%n==0)
printf("\n");
}
printf("\n");
}
void msort(int arr[],int count)
{
int i,j,temp,m,n;
for(i=0;i<count-1;i++)
{
for(j=0;j<count-i-1;j++)
{
m=arr[j]/10%10;
n=arr[j+1]/10%10;
if(m>n)
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
void msplit(int arr[],int *count)
{
}
红色字体的函数不会写了,老师说这个&count是为了通过指针变量来实现参数的间接双向传递;求教是怎么实现的