LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1458|回复: 23

关于数组的问题!谢谢!

[复制链接]
发表于 2004-11-17 20:34:10 | 显示全部楼层 |阅读模式
/*不是作业 :)*/
题目是 这样的 :
已经有一个已经排好序的数组,今输入一个数,要求安原来排序的规律将这个书插入数组中。
解:
/*此题只能有我自己给出一个数组,今令这个数组为a[6]={1,2,3,4,5,6};*/

  1. main()
  2. {
  3. int a[6]={1,2,3,4,5,6},j,k,n;
  4. float i;
  5. scanf("%f",&i);
  6. if(i<a[0])
  7. {j=a[5];
  8. for(n=0;n<=4;n++,a[n+1]=a[n])
  9. a[0]=i;
  10. for(n=0;n<=5;n++)
  11. {printf("%f",a[n]);}
  12. printf("%f\n",j);
  13. }
  14. else if(i>a[5])
  15. {for(n=0;n<=5;n++)
  16. {printf("%f",a[n]);}
  17.   printf("%f",i);
  18. }
  19. for(n=1;n<=5;n++)
  20.   {if(i>a[n-1]&&i<a[n])
  21.    {k=a[5];
  22.     while(n<=4)
  23.     {a[n+1]=a[n];}
  24.      a[n]=i;
  25.    for(n=0;n<=5;n++)
  26.       {printf("%f",a[n]);}
  27.        printf("%f",k);
  28.     }
  29.   }
  30. }
复制代码

这是我的编译结果,很不理想,请教我那里有错误!真诚的感谢!!:)

  1. 这是我的编译结果:
  2. gcc -o fydream ti.c
  3. ./fydream
  4. 假如输入的是“5.5”(就是在i>1&&i<6,时的情况)
  5. 结果 什么也不输出,
  6. 假如输入“7”
  7. 则输出:0.0000000.0000000.0000000.0000000.0000000.0000007.000000
  8. 这个只有最后 的7.000000的输出是对的,但是前6为却都是0.000000
  9. 假如我输入0.5
  10. 则输出:0.0000000.0000000.0000000.0000000.0000000.0000000.000000
复制代码

  1. 我想要的结果是:
  2. 假如输入5.5就输出:1.0000002.0000003.0000004.0000005.0000005.5000006.000000
  3. 加入输入7就应该输出:1.0000002.0000003.0000004.0000005.0000006.0000007.000000
  4. 加入输入0.5应该输出:
  5. 0.5000001.0000002.0000003.0000004.0000005.0000006.000000
复制代码

谢谢了!我很急!:)
发表于 2004-11-17 20:43:54 | 显示全部楼层

回复: 关于数组的问题!谢谢!

最初由 不死潜龙 发表

int a[6]={1,2,3,4,5,6},j,k,n;
float i;

你定义的数组是整形的。
而输入的5.5是浮点数。
 楼主| 发表于 2004-11-17 21:25:06 | 显示全部楼层
哦!:)如果改成浮点就没问题了吧!:)
发表于 2004-11-17 22:55:38 | 显示全部楼层
你的程序有问题,只判断了
if(i<a[0])和if(i>a[5]),5.5不属于这个范围
发表于 2004-11-18 10:54:02 | 显示全部楼层
数组元素只有6个,插入的第7 个元素放在那儿?数组中没有给要插入的数预留空间。
 楼主| 发表于 2004-11-20 13:29:42 | 显示全部楼层
  1. for(n=1;n<=5;n++)
  2.   {if(i>a[n-1]&&i<a[n])
  3.    {k=a[5];
  4.     while(n<=4)
  5.     {a[n+1]=a[n];}
  6.      a[n]=i;
复制代码

在这里我已经给了当输入的书在1-6留了空间了!
我多定义了两个变量,就是为了在两个端点的值被覆盖前把两个端点的值接受呀?:)
发表于 2004-11-20 20:47:31 | 显示全部楼层
说句老实话,你的程序我实在是看不懂。既然要插入一个新元素,数组中肯定要留有空间才行。你的数组才有6个元素,却要插入第7个元素。这第7个元素放在那儿?
发表于 2004-11-20 21:32:48 | 显示全部楼层
帮你写了一个,你试一下
[PHP]
main()
{
float a[7]={1,2,3,4,5,6},i;
int n,m=0;
printf("Input a number:");
scanf("%f",&i);
if(i>a[5])
{
a[6]=i;
goto loop;
}
else
{
for(n=0;n<7;n++)
{
if(i<=a[n])
{
for(m=6;m>n;m--)
a[m]=a[m-1];
a[n]=i;
goto loop;
}
}
}
loop:
for(n=0;n<7;n++)
printf("%f\n",a[n]);
}
[/PHP]
之前的代码没有实际上机,这回改了一下,判断了一下输入数据大于a[5]的情况。
 楼主| 发表于 2004-11-21 09:38:01 | 显示全部楼层
哦!谢谢两位老兄的指点,特别的感谢orphen兄弟给出源代码,让我这个小菜参考,谢谢!我知道了,是我的思路错了,如果只定义相应为数的数组,在这个数组中插入数时,在"i>a[0]&&i<a[5]"情况时非常不好写,所以应该定义一个多一位的数组,我明白了,谢谢!!
发表于 2004-11-21 09:40:55 | 显示全部楼层
楼上的问题是大大的有,很多基本概念都不清楚,一步一步慢慢来吧。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表