c语言编写问题15

来源:百度知道 编辑:UC知道 时间:2024/09/21 04:30:47
在数组中插入一个数,将得到的数组降序排列。
#include <stdio.h>
#define N 5

void main()
{
int i,j;
int num[N+1]={23,45,60,67,88},in;
printf("\n 插入前的数组元素:\n");

for(i=0;i<N;i++)
{
printf("%d",num[i]);
}
printf("\n 请输入一个要插入的元素:");
scanf("%d",&in);

for(i=0;i<N;i++)
{
if(num[i]>in)
break;
}
for(j=N;j>i;j--)
{
num[j]=num[j-1];
}
num[i]=in;
printf("\n 插入后的数组元素为:\n");
for(i=0;i<N;i++)
{
printf("%d",num[i]);
}
printf("\n");
}

问题:for(j=N;j>i;j--)是什么意思,请详细解释。
就本题而言,为什么要j>i,而且j--?

首先这是一个for循环的语句,j和i一样都是一个循环计数器,每循环一次,i或j的变量值自加或自减。
j=N,就是把N的值赋给变量j
j>i,是判断条件,只有j的值大于i的值的时候,才会进行循环,一旦小于或等于,则退出循环,i和j的数值都是随时改变的,根据你上面的那段代码,i循环是一个外循环,j循环是内循环,内外循环的关系好比时针和分针,外循环是失真,内循环是分针,外循环执行一次,内循环执行所有。
j--是一个计数器再求值,就是说每当j循环一次后,j的值就会自减1
其中for(j=N;j>i;j--)中的两个;必须要的,否则就会产生编译错误

for(j=N;j>i;j--)这一重循环的作用:使原数组中从num[i]开始以后的的每个元素都向后挪一位(即num[i+1]=num[i]),从而可以空出一个位子num[i],接下来的"num[i]=in;" 就使输入的那个大于num[i]的数占了空出的位子.从而达到降序排列.