问题:合并有序线性表的程序

ScorpioZZR 2003-08-21 01:57:09
1.学着学着就头晕了,为什么我这个程序结果不正确?
2.是因为c[]没有初始化吗?可无论c里的值原来是如何的不确定,我赋给它新值了,难道不行?
3.或者是别的错误原因?我把int c[11];改成int c[11]={0};也不行,为什么?
-----
#include <stdio.h>

void main()
{
int a[7]={1,2,3,3,5,8,10};
int b[4]={2,6,9,16};
int c[11];
int i=0,j=0,k=0;
while((i!=6)&&(j!=3))
{
if (a[i]<=b[j])
{
c[k]=a[i];k++;i++;
}
else
{
c[k]=b[j];k++;j++;
}
}
if (i==6)
{
c[k]=b[j];k++;j++;
}
if (j==3)
{
c[k]=a[i];k++;i++;
}
for(i=0;i<k;i++)printf("%5d",c[k]);
}
...全文
87 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengzhenwanli 2003-08-21
  • 打赏
  • 举报
回复
if (a[i]<=b[j])
{
c[k]=a[i];
k++;
i++;/*为何在单步运行到这段时发现c[k]的值还是那一大串的长整型数啊?照理说,应该变成赋值后的值才对。不过程序倒是运行正常的。*/
}
你把这个分开写,这样编译器就会显示正确了。分成3行,不然照一行写,c[k]老是显示的是下一个值,因为k增加了。
还有你的list程序,我现在正在研究容器类的实现,估计过两天给你看。
ScorpioZZR 2003-08-21
  • 打赏
  • 举报
回复
程序是让人给改对了。但是我有个疑问,见程序中注释。
--
#include <stdio.h>

void main()
{
int c[11];
int a[7]={1,2,3,3,5,8,10};
int b[4]={2,6,9,16};

int i=0,j=0,k=0;
while((i!=7)&&(j!=4))
{
if (a[i]<=b[j])
{
c[k]=a[i];k++;i++;/*为何在单步运行到这段时发现c[k]的值还是那一大串的长整型数啊?照理说,应该变成赋值后的值才对。不过程序倒是运行正常的。*/
}
else
{
c[k]=b[j];k++;j++;
}
}
while(i==7&&j!=4)
{
c[k]=b[j];k++;j++;
}
while (j==4&&i!=7)
{
c[k]=a[i];k++;i++;
}
for(i=0;i<k;i++)
printf("%5d\n",c[i]);
printf("\n");
}
Dragon132 2003-08-21
  • 打赏
  • 举报
回复
结贴吧
ScorpioZZR 2003-08-21
  • 打赏
  • 举报
回复
我非常惭愧!
ScorpioZZR 2003-08-21
  • 打赏
  • 举报
回复
晕,看来这几天不但眼睛不好,而且脑袋瓜也模糊了:((
看来真的得潜心静养几天,居然范这么愚蠢的错误……
pengzhenwanli 2003-08-21
  • 打赏
  • 举报
回复
上面都说完了。up一下
oceancat 2003-08-21
  • 打赏
  • 举报
回复
for(i=0;i<k;i++)printf("%5d",c[k]);
还是
for(i=0;i<k;i++)printf("%5d",c[i]);
Dragon132 2003-08-21
  • 打赏
  • 举报
回复
你的算法有点错误,我改了一下你看看

#include <stdio.h>

void main()
{
int c[11];
int a[7]={1,2,3,3,5,8,10};
int b[4]={2,6,9,16};

int i=0,j=0,k=0;
while((i!=7)&&(j!=4))
{
if (a[i]<=b[j])
{
c[k]=a[i];k++;i++;
}
else
{
c[k]=b[j];k++;j++;
}
}
while(i==7&&j!=4)
{
c[k]=b[j];k++;j++;
}
while (j==4&&i!=7)
{
c[k]=a[i];k++;i++;
}
for(i=0;i<k;i++)
printf("%5d\n",c[i]);
printf("\n");
}
Dragon132 2003-08-21
  • 打赏
  • 举报
回复
#include <stdio.h>

void main()
{
int a[7]={1,2,3,3,5,8,10};
int b[4]={2,6,9,16};
int c[11];
int i=0,j=0,k=0;
while((i!=6)&&(j!=3))
{
if (a[i]<=b[j])
{
c[k]=a[i];k++;i++;
}
else
{
c[k]=b[j];k++;j++;
}
}
if (i==6)
{
c[k]=b[j];k++;j++;
}
if (j==3)
{
c[k]=a[i];k++;i++;
}
for(i=0;i<k;i++)printf("%5d",c[i]); //这里应该是c[i] 不是c[k]
}

69,368

社区成员

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

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