| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3722 人关注过本帖
标题:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:24 
在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
有若干整数按从小到大顺序放在数组中,用户输入一个数插入到此数组中,数组中的数依然按从小到大排列。求大佬看一下这个程序哪里有问题?
#include<stdio.h>
#include<stdlib.h>
void inserer(int *s,int x,int *n){
    int i,j=0;
    while(j<*n && s[j]<x) j++;
    for(i=(*n)-1;i>=j;i--) s[i+1]=s[i];
    s[i]=x;
    *n=(*n)+1;
}
void output(int *s,int *n){
    int i;    for(i=0;i<*n;i++) printf("%d  ",s[i]);
    printf("\n");
}
int main(void){
    int s[10]={1,6,7,10,14,18,22,29,36,47},x;
    int n=10;    printf("Entrez un chiffre : ");
    scanf("%d",&x);   
    printf("Le tableau precedent : ");
    output(s,&n);
    inserer(s,x,&n)
    printf("Le nouveau tableau : ");
    output(s,&n);
    return EXIT_SUCCESS;
}

假如输入12,运行结果:
Entrez un chiffre : 12
Le tableau precedent : 1  6  7  10  14  18  22  29  36  47
Le nouveau tableau : 1  6  7  12  14  14  18  22  29  36  48  12  9900928  0  4199400  0  0  0  46  0  4225568  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0

--------------------------------
搜索更多相关主题的帖子: 数组 插入 一个数 int printf 
2018-04-01 11:41
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:14 
int s[10]={1,6,7,10,14,18,22,29,36,47}
s大小固定了,最多10个数
2018-04-01 12:32
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
逻辑错误还在其次,概念性错误要不得
2018-04-01 12:33
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 2楼 童生
最开始固定了,后面也可以根据需要加长度啊,比如这个程序,开始规定数组长度是10个元素,后来加了第11个元素:
#include<stdio.h>
#include<stdlib.h>
void output(int *s,int n){
  int i;
  for(i=0;i<n;i++) printf("%d ",s[i]);
  printf("\n");
}
int main(void){
  int s[10]={0,1,2,3,4,5,6,7,8,9};
  output(s,10);
  s[10]=10;
  output(s,11);
  return EXIT_SUCCESS;
}
  
运行结果没问题啊:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10

--------------------------------
2018-04-01 12:57
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
应该是n那个指针没用对,我又写了一个不用n的指针的程序,可以正确输出。
#include<stdio.h>
#include<stdlib.h>
void inserer(int *s,int x,int n){
    int i,j=0;
    while(j<n && s[j]<x) j++;
    for(i=n-1;i>=j;i--) s[i+1]=s[i];
    s[j]=x;
}
void output(int *s,int n){
    int i;
    for(i=0;i<n;i++) printf("%d  ",s[i]);
    printf("\n");
}
int main(void){
    int s[]={1,6,7,10,14,18,22,29,36,47},x;
    int n=10;
    printf("Entrez un chiffre : ");
    scanf("%d",&x);
    printf("Le tableau precedent : ");
    output(s,n);
    inserer(s,x,n);
    printf("Le nouveau tableau : ");
    output(s,n+1);
    return EXIT_SUCCESS;
}
运行结果:
Entrez un chiffre : 14
Le tableau precedent : 1  6  7  10  14  18  22  29  36  47
Le nouveau tableau : 1  6  7  10  14  14  18  22  29  36  47

--------------------------------
2018-04-01 14:17
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
求大佬帮忙看看第一次用指针的程序错在哪儿了?
2018-04-01 14:18
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
以下是引用青蝶在2018-4-1 12:57:13的发言:

最开始固定了,后面也可以根据需要加长度啊,比如这个程序,开始规定数组长度是10个元素,后来加了第11个元素:
#include<stdio.h>
#include<stdlib.h>
void output(int *s,int n){
  int i;
  for(i=0;i<n;i++) printf("%d ",s);
  printf("\n");
}
int main(void){
  int s[10]={0,1,2,3,4,5,6,7,8,9};
  output(s,10);
  s[10]=10;
  output(s,11);
  return EXIT_SUCCESS;
}
  
运行结果没问题啊:
0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9 10

--------------------------------

晕到
2018-04-01 14:19
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
求各方大佬帮看下最开始的带n的指针程序错在哪儿,谢谢~
2018-04-01 14:24
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
切记,在C中你定义任何如s[10],有下标的,使用时s[10]就是越界的!!!!!!非法的!!!!

#include<stdio.h>
#include<stdlib.h>

int main(void){
  int s[10]={0,1,2,3,4,5,6,7,8,9};

  for(int i=10;i<10000;i++)
  {
      s[i]=i;
  }

  return EXIT_SUCCESS;
}

试一下,我不知道i为多少时会中止程序
2018-04-01 14:27
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
for(i=(*n)-1;i>=j;i--) s[i+1]=s[i];
    s[i+1]=x;逻辑错在这里
2018-04-01 14:34
快速回复:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
数据加载中...
 
   



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

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