下弦月之夜_夜末 发表于 2013-12-3 17:35:21

数字查找与排序问题 请看看。。。

/*一组有序的数据8,9,12,18,23,34,56,78,输入一个待查找的数,如果该数存在则
输出该数所在的序号,如果不存在则将该数插入到该数组中,保持数组的有序性。*/
#include "stdio.h"

int main(void)
{
        int a={8,9,12,18,23,34,56,78},i,num,j;
        scanf("%d",&num);
        for(i=0;i<8;i++)
        {
                if(num==a)
                {
                printf("%d的位置是第%d个",num,i+1);
                break;   
                }
       
        }

        if(i==8)   //num的值不在a数组中的情况
                {
                        for(i=0;i<8;i++)
                                if(num<a)      
                                        break;      //跳出循环后,将i的值传递给下面的语句,由其去判断。
               
                        if(i!=0)    //num的值大于78 或 大于8小于78 的情况
                        {
                                for(j=0;j<i;j++)
                                        printf("%d ",a);   //先输出比num小的值
                                printf("%d ",num);       //再输出num的值
                                for(j=i;j<8;j++)      
                                        printf("%d ",a);   //最后输出比num大的值
                        }
            //if(i==0)语句需放在if(i!=0)的下面。否则,i的值经过if(i==0)语句,改变为8,使得if(i!=0)语句符合条件而执行,影响输出结果。
                        if(i==0)    //num的值小于8的情况
                        {
                          printf("%d ",num);
                          for(i=0;i<8;i++)
                                printf("%d ",a);
                        }
                }
        return 0;
}


代码正确,结果也正确。
就感觉这代码不怎么好,有点复杂。
请问大神
你有什么不同的思路
请指教一下

此处略缺三万 发表于 2013-12-3 21:44:32

写了一个,用两个数组比较方便~代码奉上,有错误请指出~~~
#include "stdio.h"
int main(void)
{
        int a={8,9,12,18,23,34,56,78},i,num,temp;
        scanf("%d",&num);
        if((num!=8)&&(num!=9)&&(num!=12)&&(num!=18)&&(num!=23)&&(num!=34)&&(num!=56)&&(num!=78))   
        {                                                //如果查找的数不在数组内那么执行插入算法
                for (i=0;i<8;i++)
                {
                        temp=a;                           
                }
                for (i=0;i<8;i++)
                {
                        if((a<num)&&(num<a))      
                        {                                                                                       
                                a=num;                                       
                                for (;i<8;i++)                               
                                {
                                        a=temp;               
                                }
                        }
                }
                for (i=0;i<8;i++)
                {
                        printf("%d ",a);
                }               
        }
        else
        {       
                for (i=0;i<8;i++)
                {
                        if (a==num)
                        {
                                printf("%d\n",i+1);
                        }
                }               
        }       
        return 0;
}

下弦月之夜_夜末 发表于 2013-12-4 00:44:46

此处略缺三万 发表于 2013-12-3 21:44 static/image/common/back.gif
写了一个,用两个数组比较方便~代码奉上,有错误请指出~~~
#include "stdio.h"
int main(void)


你好 谢谢你的回帖
在输入不属于a数组里面的值的num时,出错了。
部分代码(输入的数num不是a数组里的值时)出错了
if((a<num)&&(num<a))
当输入的数num大于78时,i=7,而元素a不存在。
   for (i=0;i<8;i++)
                {
                        printf("%d ",a);
                }
请问你是想把num的值嵌入a数组里面,然后将num在内的九个值输出吗?
但初始化后不能改变数组的大小。
这是我的看法,希望对你有点帮助。{:1_1:}
            
页: [1]
查看完整版本: 数字查找与排序问题 请看看。。。