啊哈磊_编程从这里起步
标题:
求大神指导 一个将一个数字插入数组并保持原顺序的程序,错在哪里了
[打印本页]
作者:
大家一起喊比悠
时间:
2014-4-17 23:46
标题:
求大神指导 一个将一个数字插入数组并保持原顺序的程序,错在哪里了
{:soso_e118:}
#include <stdio.h>
void main()
{
int a[9]={10,20,30,40,70,80,90,100}, i,n,j;
printf("please input the num\n");
scanf("%d",&n);
for(i=0;i<8;i++)
{
if(a[i]<=n&&a[i+1]>n)
break;
}
for(j=9;j>i;j--)
a[j]=a[j-1];
a[i+1]=n;
for(i=0;i<9;i++)
printf("%7d",a[i]);
}
作者:
rosynirvana
时间:
2014-4-18 00:23
#include <stdio.h>
int main()
{
int a[9]={10,20,30,40,70,80,90,100}, i,n,j;
printf("please input the num\n");
scanf("%d",&n);
for(i=0;i<8;i++)
{
if(a[i]>=n)
break;
}
for(j=8;j>=i;j--)
a[j]=a[j-1];
a[i]=n;
for(i=0;i<9;i++)
printf("%7d",a[i]);
getchar();getchar();
}
复制代码
作者:
981013
时间:
2014-4-18 19:34
这个程序在试图插入大于100的数据时会出问题,原因如下:
if(a[i]<=n&&a[i+1]>n)
复制代码
这句,当i=7时,a[i+1],即a[8],是0(当一个数组被初始化了一部分时,其余部分自动赋值为0)
于是,若i=7时,以上条件是不可能成立的,然后
for(i=0;i<8;i++)
复制代码
for循环再将i自增(i++),此时i=8,循环条件不再被满足,于是i在程序余下的部分里就是8,而
a[i+1]=n;
复制代码
就把n的值赋给了一个并不存在的数组元素a[9](记住数组的索引是从0开始的,也就是说,数数要这样数:第0、第1、第2……{:soso_e113:})
同样在插入10以下的数据时也会出问题,原因:
由于插入的数字<10,
if(a[i]<=n&&a[i+1]>n)
复制代码
这句永远不可能成立(a
最小是10,a
不可能<=一个小于10的数)
然后就和上面一样了
还有个编码习惯上的问题,
void main()
复制代码
这个很多“先进”的编译器都不承认,标准的无参main是
int main()
复制代码
欢迎光临 啊哈磊_编程从这里起步 (https://bbs.codeaha.com/)
Powered by Discuz! X3.2