关于C语言数组的问题

来源:百度知道 编辑:UC知道 时间:2024/07/07 01:31:21
从键盘上任意输入n个整数,用冒泡法按从小到大地排序,并在屏幕上显示出来。
#include "stdio.h"
#define NUM 10
main()
{ int data[NUM];
int i,j,temp;
~~~~~~~~~~~~~~~~~~~~~~~~
冒泡法排序
for(i=0; i<NUM-1; i++)
for(j=NUM-1; j>i; j--)
if(data[j]<data[j-1])
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};
冒泡法下面第二句中那个j=NUM-1 j为什么=NUM-1而不是NUM呢?NUM怎么理解啊~~~~~~~谢谢
是输入10个整数,不是n,date的十个元素分别是什么啊?

#include "stdio.h"
#define NUM 10 ---------这里NUM的理解是下面碰到的NUM这个字符都表示整数10,所以下面data[NUM]可以理解为data[10],依此推.
main()
{ int data[NUM];
int i,j,temp;
~~~~~~~~~~~~~~~~~~~~~~~~
冒泡法排序
for(i=0; i<NUM-1; i++)
for(j=NUM-1; j>i; j--)
if(data[j]<data[j-1]) -----这里三句的意思是从数组最后开始进行比较,而数组的大小为10,但数组的下标是从0开始的,所以数组最后一个元素为NUM - 1 = 10-1 = 9,即DATA[9]是最后一个元素.
{temp=data[j];
data[j]=data[j-1];
data[j-1]=temp;
};

程序第二句#define NUM 10 和int data[NUM]已经定义数组长度为10,故输入的是10个整数,但是,这里没有scanf()函数,也没有为数组初始化,所以,date的十个元素date[0]date[1]date[2]……date[9]的值未知,

这样说清楚吗?

那样的话, 后面的 data[NUM] 越出数组范围了. 数组data的最后一个元素是
data[NUM-1]

在声明和定义数组的时NUM是描述数组里的元素个数的(10个),而下面的
data[NUM-1]是描述数组元素表示数组里第NUM的元素。即使是data[NUM]也是‘\0’(空操作字符),无意义。

因为10个数你只要进行9次排列就能得到他们的顺序了啊,所以i<num-1
比如3 2 1首先是第一轮排列排成2 1 3 然后第二轮排列 1 2 3

至于j=num-1,因为数组只有10个元素啊,data[10]的话就是第11个元素了,越界了啊!
只有在定义数组的时候int dat