早教吧 育儿知识 作业答案 考试题库 百科 知识分享

求大神帮助找出下面C程序的错误!问题描述按程序功能要求编写程序.(1)从键盘输入一个正整数(不多于5位),计算该正整数与789之和(记为sum);(2)将整数sum各个位拆分到数组a中;(

题目详情
求大神帮助找出下面C程序的错误!
【问题描述】按程序功能要求编写程序.
(1)从键盘输入一个正整数(不多于5位),计算该正整数与789之和(记为sum);
(2)将整数sum各个位拆分到数组a中;
(3)数组a从小到大排序;
(4)将排序后的数组a组成一个值为最小的整数(记为min);
(5)输出min及其位数(两数中间以空格分隔).
【样例输入】52387
【样例输出】13567 5
【样例说明】52387+789=53176,重排后得到的最小数为13567,其位数为5位.
#include
int main()
{
int sum,n=0,i=0,k,x,index,temp,min=0;
int a[5];
scanf("%d",&x);
sum=x+789;
while(sum!=0)
{
a[i]=sum%10;
sum=sum/10;
i++;
n++;
}
for(k=0;k
▼优质解答
答案和解析

三个错误:

 for(k=0;k<n-1;k++)  应该为 for(k=0;k<n;k++)    【n为数字位数,所以需要循环n次】

if(a[i]<a[index]) 如果满足条件,则后面四句都需要执行,所以需要加{}

这四句话中,index=i; 需要放到最后执行,否则下标值已经相同了,交换没有意义



修改后代码段:


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

    {

        index=k;

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

            if(a[i]<a[index]) 

            {

                temp=a[i];

                a[i]=a[index];

                a[index]=temp;


                index=i;

            }

    }


结果:

52387

13567 5

Press any key to continue