2、输入N个整数,存储输入的数及对应的序号,然后将输入的数按从小到大的顺序进行排列,输出排序后的序号和数值。请完善程序。 #include <stdio.h> #define N 10 struct { int no; int num; }array[N]; int main() { int i,j,num; for(i=0;i<N;i++ ) //插入排序 { printf("enter No. %d:",i); scanf("%d",&num); for( (1) ;j>=0 && array[j].num > num; j-- ) (2) ; array[ j+1].num=num; array[j+1].no=i; } for(i=0;i<N;i++) printf("%d=%d,%d\n",i, (3) ); return 0; }
时间: 2023-12-05 12:04:11 浏览: 56
请见完善后的程序如下:
```c
#include <stdio.h>
#define N 10
struct {
int no;
int num;
} array[N];
int main() {
int i, j, num;
for (i = 0; i < N; i++) //插入排序
{
printf("enter No. %d:", i);
scanf("%d", &num);
for (j = i - 1; j >= 0 && array[j].num > num; j--)
{
array[j + 1] = array[j];
}
array[j + 1].num = num;
array[j + 1].no = i;
}
for (i = 0; i < N; i++)
printf("%d=%d,%d\n", array[i].no, array[i].num);
return 0;
}
```
解析如下:
1. 初始化变量i为0, 如果i小于N,执行循环体内的语句,i每次加1。
2. 打印提示信息,等待用户输入一个整数,保存到变量num中。
3. 初始化变量j为i-1,如果j大于等于0并且第j个元素的值大于num,则执行循环体内的语句,j每次减1。在循环过程中,将第j个元素向右移动一个位置,以便为num腾出空间。
4. 将num保存在第j+1个元素中,将i保存在第j+1个元素的序号no中。
5. 依次输出排好序的序号和数值。
注意:在第三个for循环输出语句中,应该将array[i].no替换为array[i].num,以输出正确的序号和数值。