求大神帮助找出下面C程序的错误!

【问题描述】按程序功能要求编写程序。(1)从键盘输入一个正整数(不多于5位),计算该正整数与789之和(记为sum);(2)将整数sum各个位拆分到数组a中;(3)数组a... 【问题描述】按程序功能要求编写程序。
(1)从键盘输入一个正整数(不多于5位),计算该正整数与789之和(记为sum);
(2)将整数sum各个位拆分到数组a中;
(3)数组a从小到大排序;
(4)将排序后的数组a组成一个值为最小的整数(记为min);
(5)输出min及其位数(两数中间以空格分隔)。
【样例输入】52387
【样例输出】13567 5
【样例说明】52387+789=53176,重排后得到的最小数为13567,其位数为5位。
#include<stdio.h>
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<n-1;k++)
{
index=k;
for(i=k+1;i<n;i++)
if(a[i]<a[index]) index=i;
temp=a[i];
a[i]=a[index];
a[index]=temp;
}
for(i=0;i<n;i++)
min=min*10+a[i];
printf("%d %d",min,n);
return 0;
}
展开
 我来答
jim2zj2zj
2013-05-29 · 超过31用户采纳过TA的回答
知道答主
回答量:122
采纳率:100%
帮助的人:84.8万
展开全部

三个错误:

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

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

  3. 这四句话中,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

快意品人生
2013-05-29 · TA获得超过471个赞
知道小有建树答主
回答量:606
采纳率:0%
帮助的人:160万
展开全部
if(a[i]<a[index])
{
index=i;
temp=a[i];
a[i]=a[index];
a[index]=temp;
}
还有啊,注意程序的书写格式,你写的有点乱
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2013-05-29
展开全部
for(i=k+1;i<n;i++)
if(a[i]<a[index]) index=i;////////错在此行
temp=a[i];
a[i]=a[index];
a[index]=temp

另外,后三行是否应该括起来!?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式