新手问题:已知一个排列有序的数组,输入一个数并插入数组中。仍保持数组的排列有序!

linhui1314 2008-03-23 10:13:33
如题,请各位朋友帮忙看下下面的程序错在哪。
在TC200运行,输入数字:7,运行结果27476789。。

#include<stdio.h>
main()
{
int a[10]={2,4,6,,8,10,12} /*定义一个递增的数组*/
int i,j=0,k,l,z;

printf("please input a integer:\n");
scanf("%d",&i);

while(a[j]!='\0') /*数组中的元素个数*/
j++;

for(k=0;k<j;k++) /*关键是这个循环,是循环出错了吗?*/
{
if(i>a[k])
{
for(l+j-1;l>k;l--)
a[l+1]=a[j];
}
}
a[l+1]=i; /*插入*/
for(z=0;z<=j;z++)
printf("%d",a[z]);
}

用了很多变量。。可否减少变量的数量?
...全文
1583 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
linhui1314 2008-03-23
  • 打赏
  • 举报
回复


谢谢各位大牛。。

初学者很多人都跟我一样/编的时候很迷茫。。。。

目的性太差了。。。

冰矿 2008-03-23
  • 打赏
  • 举报
回复

#include<stdio.h>
main()
{
int a[10]={2,4,6,,8,10,12} /*数组里的赋值注意两个,,定义一个递增的数组*/
int i,j=0,k,l,z;

printf("please input a integer:\n");
scanf("%d",&i);

while(a[j]!='\0') /*数组中的元素个数,改为a[j] != 0,因为没有初始化到的元素默认为0*/
j++;

for(k=0;k<j;k++) /*关键是这个循环,是循环出错了吗? 对*/
{
if(i>a[k]) /*元素递增,怎么能这样判断呢?,应该是找第一个比i大的元素,这就是要插入的位置,找到后就应该退出循环*/
{
for(l+j-1;l>k;l--)/*然后元素后移空出插入位置*/
a[l+1]=a[j];
}
}
a[l+1]=i; /*插入*/
for(z=0;z<=j;z++)
printf("%d",a[z]);
}
linhui1314 2008-03-23
  • 打赏
  • 举报
回复
能否帮我指出错误。并改正之```万分感谢。。
刚学C。。这是老师布置的作业。。
LuGuangbO 2008-03-23
  • 打赏
  • 举报
回复
printf("please input a integer:\n");
-->
printf("please input an integer:\n");
冰矿 2008-03-23
  • 打赏
  • 举报
回复
楼主思路好乱啊

#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
int a[10]={2,4,6,8,10,12};
int i,j,k;

printf("please input a integer:\n");
scanf("%d",&i);

for (k = 0; k < 6; k++)
if (i < a[k]) break;/*找到插入位置*/
for (j = 6; j >= k; j--)/*元素后移*/
a[j+1] = a[j];
a[k] = i; /*插入*/
for (k = 0; k < 6+1; k++)
printf("%d ",a[k]);

system("PAUSE");
return 0;
}

测试
please input a integer:
7
2 4 6 7 8 10 12 请按任意键继续. . .
星羽 2008-03-23
  • 打赏
  • 举报
回复


#include<stdio.h>
int main()
{
int a[10]={2,4,6,8,10,12}; /*定义一个递增的数组*/
int i,j=0,k,l,z;

printf("please input a integer:\n");
scanf("%d",&i);

while(a[j] != 0) /*数组中的元素个数, 这里有问题,如果含有0就有问题了*/
j++;

for(k=0;k<j;k++) /*关键是这个循环,是循环出错了吗?*/
{
if(i < a[k])
{
for(l=j-1;l >= k; l--)
a[l+1] = a[l];

break;
}
}
a[k] = i; /*插入*/
for(z=0;z<=j;z++)
printf("%d ",a[z]);

return 0;
}

csdn5211 2008-03-23
  • 打赏
  • 举报
回复
while(a[j]!='\0') /*数组中的元素个数*/
j++;

这个也不对啊,a里也没有什么'\0'啊。

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧