| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 767 人关注过本帖
标题:为什么这个程序的运行结果是这样的,求解..
只看楼主 加入收藏
cangogo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-28
结帖率:0
收藏
已结贴  问题点数:20 回复次数:18 
为什么这个程序的运行结果是这样的,求解..
问题是:已有一个已排好序的数组,输入一个数,要求按原来的排序规律将它插入到数组中。
我的程序是:
#include "stdio.h"
#define N 7
void paixu(int k,int *a);
void main()
{
 int i,a[N]={586,513,489,284,106,46,24};
 printf("the former array is:\n");
 for(i=0;i<N;i++)
 printf("%-5d",a[i]);
 printf("\ninput a Num:");
 scanf("%d",&i);
 paixu(i,a);
 for(i=0;i<=N;i++)
 printf("%-5d",a[i]);  
}
void paixu(int k,int *a)
{
 int t=N,i=N,j=0;
  while(1)
  {
      if(k>=a[j])
      {while(i>j)
       a[t--]=a[--i];
       a[j]=k;
       break;}
      j++;
  }
}
图片附件: 游客没有浏览图片的权限,请 登录注册

注:明明测试过当时赋值时a[N]是24的,不知道为什么运行后结果就变为7了。是不是要扩展数组长度?唉...
搜索更多相关主题的帖子: include former 
2015-04-28 18:13
情.难言ゝ
Rank: 3Rank: 3
来 自:安徽安庆
等 级:论坛游侠
威 望:1
帖 子:74
专家分:137
注 册:2013-9-8
收藏
得分:5 
你扩展数组长度试试呗  

树叶的离去,是风的追求、还是树的不挽留???
2015-04-29 17:07
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:5 
#include "stdio.h"
#define N 80
void paixu(int k,int *a);
int main()
{
int i,a[N]={586,513,489,284,106,46,24},length=7;
printf("the former array is:\n");
for(i=0;i<length;i++)
printf("%-5d",a[i]);
printf("\ninput a Num:");
scanf("%d",&i);
length++;
paixu(i,a);
for(i=0;i<length;i++)
printf("%-5d",a[i]);  
}
void paixu(int k,int *a)
{
int t=N,i=N,j=0;
  while(1)
  {
      if(k>=a[j])
      {while(i>j)
       a[t--]=a[--i];
       a[j]=k;
       break;}
      j++;
  }
}

剑栈风樯各苦辛,别时冰雪到时春
2015-04-29 17:19
cangogo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-28
收藏
得分:0 
回复 3楼 林月儿
你试下int i,length=7,a[N]={586,513,489,284,106,46,24}; 这样声明,为什么不可以了...好奇试了试,如果intlength=7 ,i,a[N]={586,513,489,284,106,46,24};或者int i,length,a[N]={586,513,489,284,106,46,24}; length=7和你那样的声明就可以程序通过。好奇怪...想知道原理,是我编译器问题么,你也试试。
2015-04-29 18:42
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
N是数组的上限,之所以引入length是因为我只对前length个数组数据处理,后续的空间只是在扩充起到作用。
而这里的length看做数组有效长度,不然想你那样越界就麻烦了

剑栈风樯各苦辛,别时冰雪到时春
2015-04-29 18:49
liangrongye
Rank: 1
等 级:新手上路
帖 子:5
专家分:5
注 册:2011-12-14
收藏
得分:5 
我是这样的
程序代码:
#include<stdio.h>
#define N 8
int sort(int k,int *a);
int main()
{
int i,a[N]={586,513,489,284,106,46,24};
printf("the former array is:\n");
for(i=0;i<N;i++)
printf("%d ",a[i]);
printf("\n");
printf("input a Num:");
scanf("%d",&i);
paixu(i,a);
for(i=0;i<N;i++)
printf("%d ",a[i]); 
return 0; 
}
int sort(int val,int *a)
{
int i=0,j,m;
  while((i++)<N)
  { 
      if(val>=a[i]){
        for(j=N-1;j>i;--j)
            a[j]=a[j-1];
        a[i]=val;
        return 1;
      }
  }
}


[ 本帖最后由 liangrongye 于 2015-4-29 21:00 编辑 ]
2015-04-29 18:50
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 6楼 liangrongye
#include<stdio.h>
#define N 8
int sort(int k,int *a);
int main()
{
int i,a[N]={586,513,489,284,106,46,24};
printf("the former array is:\n");
for(i=0;i<N;i++)                                     //=====>非要这么做还是N-1吧
printf("%d ",a[i]);
printf("\n");
printf("input a Num:");
scanf("%d",&i);
paixu(i,a);
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
int paixu(int val,int *a)                               //=====>这的函数名和上面的sort是两个?还是说位置错了?
{
int i=0,j,m;
  while((i++)<N)
  {
      if(val>=a[i]){
        for(j=N-1;j>i;--j)
            a[j]=a[j-1];
        a[i]=val;
        return 1;
      }
  }
}
楼上请稍微运行验证一下好吗?

剑栈风樯各苦辛,别时冰雪到时春
2015-04-29 19:03
cangogo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-28
收藏
得分:0 
回复 2楼 情.难言ゝ
#include "stdio.h"
#include "stdlib.h"
#define N 7
int length=N;
void paixu(int k,int *a);
void main()
{
int i,*p,a[N]={586,513,489,284,106,46,24};
p=(int*)malloc((N+1)*sizeof(int));
printf("the former array is:\n");
for(i=0;i<length;i++){
*(p+i)=a[i];
printf("%-5d",a[i]);}
printf("\ninput a Num:");
scanf("%d",&i);
paixu(i,p);
for(i=0;i<=N;i++)
printf("%-5d",p[i]);
free(p);  
}
void paixu(int k,int *a)
{
int x=N,j=0;
  while(1)
  {
      if(k>=a[j])
      {while(length>j)
       a[x--]=a[--length];
       a[j]=k;
       break;}
      j++;
  }
}
扩展以后确实可以了,数组一开始就固定了吧,超过数组长度的值都是垃圾值,所以只能另起一个动态数组了,谢谢~
2015-04-29 19:41
林月儿
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:湖南
等 级:版主
威 望:138
帖 子:2277
专家分:10647
注 册:2015-3-19
收藏
得分:0 
回复 8楼 cangogo
感觉还是向链表靠了

剑栈风樯各苦辛,别时冰雪到时春
2015-04-29 19:44
cangogo
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2015-4-28
收藏
得分:0 
回复 6楼 liangrongye
#include<stdio.h>
#define N 8
void paixu(int val,int *a);
int main()
{
int i,a[N]={586,513,489,284,106,46,24};
printf("the former array is:\n");
for(i=0;i<N-1;i++)
printf("%d ",a[i]);
printf("\n");
printf("input a Num:");
scanf("%d",&i);
paixu(i,a);
for(i=0;i<N;i++)
printf("%d ",a[i]);
return 0;
}
void paixu(int val,int *a)
{
int i=0,j;
  while(i<N)
  {
      if(val>=a[i]){
        for(j=N-1;j>i;--j)
            a[j]=a[j-1];
        a[i]=val;
        break;
      }
      i++;
  }
}
你之前的代码while((i++)<N)是不能排到最大位数的,因为从循环开始就略过了a[0],以至于val无法与a[0]比较,帮你改写了下成品,这样应该没问题了。
2015-04-29 20:56
快速回复:为什么这个程序的运行结果是这样的,求解..
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.026792 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved