| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3627 人关注过本帖
标题:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
只看楼主 加入收藏
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
int s[10]={0,1,2,3,4,5,6,7,8,9}; 这个s[]是定长的,s[0],s[9]就是边界,虽然C99增加了变长数组但也不是象你这么随心用的.问一下,你为什么不试试s[-1]
2018-04-01 14:37
青蝶
Rank: 2
等 级:论坛游民
帖 子:160
专家分:51
注 册:2018-2-4
收藏
得分:0 
回复 9楼 童生
谢谢~第一个带指针的程序,把数组大小改成11,就能正确运行了。我还想问一下为什么第二个不带指针的程序,数组越界还可以正确运行,第一个带指针的就不能?
2018-04-01 14:37
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
两程序都是错的,与指针无关。
后面一个对是因为你用了s[j]=x;  ,这里的j 与i+1相等.

2018-04-01 14:43
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
数组越界还可以正确运行,是因为你写的是一个小程序,如同你独在一个大房子,随便踢几脚打几拳,打中踢中其他物品受伤的概率较小。但是如果写一个大程序,如同这房子又进了不少人不少物品,你再试试踢几脚打几拳
2018-04-01 14:47
青蝶
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: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
for后一句一
2018-04-01 16:42
青蝶
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: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
程序代码:
#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;
    printf("j = %d  ,i = %d \n ",j,i);//你看看是不是一样?你怎么这么宁?
    *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;
}

Entrez un chiffre : 12
Le tableau precedent : 1  6  7  10  14  18  22  29  36  47
j = 4  ,i = 3

 Le nouveau tableau : 1  6  7  12  14  14  18  22  29  36  47
请按任意键继续. . .
2018-04-01 20:19
童生
Rank: 6Rank: 6
等 级:侠之大者
威 望:8
帖 子:205
专家分:455
注 册:2018-3-7
收藏
得分:0 
初学不会用编译器的调试跟踪功能,那就用个笨办法,在需要断点,观察点加个printf把相关数据输出来看看是否对
2018-04-01 20:23
快速回复:在有序数组中插入一个数,数组依然有序,求看下程序问题在哪儿?
数据加载中...
 
   



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

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