这是错误的代码
//求一组数据中的最大值
#include <stdio.h>
#include <stdlib.h> //system()
int main(void)
{
int n=1, a[n], i=0, j=0, k=0;
printf("请输入数组长度:");
scanf("%d", &n);
for( i = 0; i < n; i++ ) //输入数组元素值
{
printf("%d=", i+1);
scanf("%d", &a[i]);
}
for( j = 0; j < ( n-1 ); j++ ) //起泡法
for( i = 0; i < ( n - 1) - j ; i++ )
if(a[i] < a[i+1])
{
k = a[i];
a[i] = a[i+1];
a[i+1] = k;
}
printf("按由大到小排列为:\n");
for( i = 0; i < n; i++ )
printf("%d\n", a[i]);
printf("此数列最大值为:%d\n", a[0]);
system( "pause" );
return 0;
}
我如果这么写的话,如果输入15,则程序运行错误,但是如果我将数组的声明改一下位置的话就没事了,请问是什么原因?
//求一组数据中的最大值
#include <stdio.h>
#include <stdlib.h> //system()
int main(void)
{
int n=1, i=0, j=0, k=0;
printf("请输入数组长度:");
scanf("%d", &n);
int a[n]; //修改
for( i = 0; i < n; i++ ) //输入数组元素值
{
printf("%d=", i+1);
scanf("%d", &a[i]);
}
for( j = 0; j < ( n-1 ); j++ ) //起泡法
for( i = 0; i < ( n - 1) - j ; i++ )
if(a[i] <= a[i+1])
{
k = a[i];
a[i] = a[i+1];
a[i+1] = k;
}
printf("按由大到小排列为:\n");
for( i = 0; i < n; i++ )
printf("%d\n", a[i]);
printf("此数列最大值为:%d\n",a[0]);
system( "pause" );
return 0;
}
C语言 可变长数组
答案:3 悬赏:0 手机版
解决时间 2021-02-13 06:05
- 提问者网友:捧腹剧
- 2021-02-12 19:41
最佳答案
- 五星知识达人网友:街头电车
- 2021-02-12 21:17
我暂时保留我的看法!
全部回答
- 1楼网友:醉吻情书
- 2021-02-12 23:59
你放scanf函数前面,就表示申明了只有一个元素的数组,而放在它后面,就表示数组大小是随着你输入的数字 的不同而变化的,放前面之所以出错时数组溢出越界了
- 2楼网友:等灯
- 2021-02-12 22:47
你后面这个程序也是有问题的,只是“碰巧”可以运行而已。
这个“碰巧”的意思是你的程序只有一个main函数,且你在声明了int a[n]之后没有声明别的变量,这样当你用a[14]访问到越界的数组的时候也能按照你的预想运行,不信的话可以在int a[n]之后声明别的变量,并在“printf("按由大到小排列为:\n");” 这个语句之前去改变它的值,这样肯定就会改变到数组a里面元素的值。
实际编译器在编译下面的程序的时候,预先只是按n=1来给数组a分配了一个int空间而已。
你的程序应该要用malloc/free来动态申请数组a的内存空间,记得使用完后并释放它。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯