| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3723 人关注过本帖
标题:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
取消只看楼主 加入收藏
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
结帖率:92%
收藏
已结贴  问题点数:20 回复次数:11 
在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
有若干整数按从小到大顺序放在数组中,用户输入一个数插入到此数组中,数组中的数依然按从小到大排列。求大佬看一下这个程序哪里有问题?
#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: 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: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
求各方大佬帮看下最开始的带n的指针程序错在哪儿,谢谢~
2018-04-01 14:24
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 9楼 童生
谢谢~第一个带指针的程序,把数组大小改成11,就能正确运行了。我还想问一下为什么第二个不带指针的程序,数组越界还可以正确运行,第一个带指针的就不能?
2018-04-01 14:37
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 13楼 童生
??没明白,两个程序都有s[i+1]=s[i]语句,循环初始条件是i等于9,那i+1就等于10,就是说两个程序都出现了s[10],都越界了啊?
2018-04-01 15:43
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 16楼 童生
循环结束的时候j和i相等,就算把第一个程序的i改成j,运行结果也没变,还是不对。
2018-04-01 19:20
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 16楼 童生
这两个程序逻辑没问题,不然第二个就不会运行正确了。
2018-04-01 19:22
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 19楼 童生
所以呢?把i改成j,加上分号(分号是我复制程序过来的时候漏了,不好意思),运行结果一样是一堆乱码。。。i和j写错了,只不过新加的数位置不对,又不会影响到为什么是乱码的问题。。。
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  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

--------------------------------
2018-04-02 12:33
快速回复:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
数据加载中...
 
   



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

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