1.源代码
#include <stdio.h>
#define N 10
void insert(int *p,int x,int n)//x表示待插入的数值,n表示数组中已有的数值的个数。
{
int i,j,t; //不允许再定义其它变量和数组
*(p+9)=x;
for(i=1;i<n;i++){
for(j=0;j<n-i;j++){
if(p[j]>p[j+1]){
t=p[j];
p[j]=p[j+1];
p[j+1]=t;
}
}
}
}
int main()
{
int i,m,a[N]={10,12,14,17,20,25,28,31,40};
scanf("%d",&m);
insert(a,m,N) ;
for(i=0;i<N;i++)
printf("%4d",a[i]);
printf("\n");
return 0;
}
2.代码思路
#include <stdio.h>
是一个预处理指令,用于包含标准输入输出头文件,以便使用printf()
和scanf()
函数。#define N 10
是一个宏定义,用于定义一个常量N
,其值为10
,表示数组的最大长度。void insert(int *p,int x,int n)
是一个自定义函数,用于在一个整数数组中插入一个整数。它有三个参数:int *p
是一个指向数组的指针,用于传递数组的首地址。int x
是一个整数,用于表示要插入的数值。int n
是一个整数,用于表示数组中已有的数值的个数。
- 函数体中,首先将
*(p+9)=x
,即将要插入的数值x
存储到数组的最后一个位置,也就是p[9]
。 - 然后使用一个嵌套的
for
循环,实现冒泡排序算法,对数组进行升序排序。外层循环从i = 1
到i < n
,内层循环从j = 0
到j < n - i
,每次循环中比较p[j]
和p[j + 1]
的大小,如果p[j]
大于p[j + 1]
,就交换它们的位置。交换的过程中,使用一个临时的整数变量t
,以及赋值语句,实现数值的交换。 int main()
是程序的主函数,程序的执行从这里开始。- 函数体中,首先定义了一个长度为
N
的整数数组a
,并初始化为{10,12,14,17,20,25,28,31,40}
,表示已经排好序的数组;以及两个整数变量i
和m
,用于表示循环的控制变量和要插入的数值。 - 然后使用
scanf("%d",&m)
函数,从标准输入读取一个整数,赋值给m
,表示要插入的数值。 - 接着调用
insert(a,m,N)
函数,将数组a
的地址、要插入的数值m
、以及数组的长度N
作为参数传递,函数会在数组中插入m
,并对数组进行升序排序。 - 最后使用一个
for
循环,从i = 0
到i < N
,每次循环中使用printf("%4d",a[i])
函数,打印排序后的数组a
的第i
个元素,中间用四个空格分隔。打印完毕后,再使用printf("\n")
函数,输出一个换行符。然后使用return 0
语句,结束主函数。
一个可能的输出样例是:
输入:15
输出: 10 12 14 15 17 20 25 28 31 40
这表示用户输入了 15
,将它插入到数组 a
中,排序后的结果是 10 12 14 15 17 20 25 28 31 40
。