请高手帮忙详细解释一下下面的一个C语言程序!谢谢。要详细。

2024-11-14 17:28:27
推荐回答(2个)
回答1:

#include
int fun(long n)
{
long m;
int a[5],i,j,k;
a[0]=n/10000; //n的万位数字
a[1]=(n-a[0]*10000)/1000; //千位
a[2]=(n-a[0]*10000-a[1]*1000)/100; //百位
a[3]=(n-a[0]*10000-a[1]*1000-a[2]*100)/10; //十位
a[4]=n%10; //个位

//下面为对数组冒泡法排序
for(i=0;i<5;i++)
for(j=i+1;j<5;j++)
{
if(a[i]{
k=a[j];
a[j]=a[i];
a[i]=k;
}
}

//重新变成五位数字,并返回这个数字
m=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4];
return m;
}
int main()
{
long n;
scanf("%ld",&n); //读取一个五位数
printf("%ld",fun(n)); //输出经过各位排序后的新五位数

}

回答2:

//该程序的测试必须输入5位数,否则可能发生错误

#include
int fun(long n) //声明参数为长整型的函数fun()
{
long m;
int a[5],i,j,k; //a[5]存放5位数的每个位的数字
a[0]=n/10000; //a[0]结果为第一个数字,一下几条语句累死,注意数
a[1]=(n-a[0]*10000)/1000; //组a[]是int型,结果为整数
a[2]=(n-a[0]*10000-a[1]*1000)/100;
a[3]=(n-a[0]*10000-a[1]*1000-a[2]*100)/10;
a[4]=n%10;
for(i=0;i<5;i++) //“冒泡排序”时间复杂度O(N^2)
for(j=i+1;j<5;j++)
{
if(a[i]{
k=a[j];
a[j]=a[i];
a[i]=k;
}
}
m=a[0]*10000+a[1]*1000+a[2]*100+a[3]*10+a[4]; //得到新的5位数
return m;
}
int main()
{
long n;
//printf("imput a number with five digits:/n");
scanf("%ld",&n); //输入一个5位数
printf("%ld",fun(n)); //调用fun()

}