C语言中,数组是一组连续的相同类型的数据集合。 所以要在数组中插入元素,需要按照以下步骤:
1、找到插入点;
2、将插入点所在元素,及之后的所有元素,都向后移动一个单位;
3、将插入点赋值为要插入的元素。
以固定位置插入,代码举例如下:
#include <stdio.h>void insert(int *a, int n, int i, int v)
//将长度为n的数组a, 下标为i的位置插入值为v的元素。 插入后,数组长度为n+1.
{
int j
for(j = n-1 j>=i j --)//将i及以后的后移一位。 由于是固定位置插入,所以不需要查找插入位置。
a[j+1] = a[j]
a[i] = v//插入元素。
}
int main()
{
int a[5] = {1,3,6,7}/五个元素数组,初始化四个值。
int i
insert(a, 4, 2, 5)//将5插入到a[2]位置。
for(i = 0 i < 5 i ++)
printf("%d ", a[i])//输出结果,为1 3 5 6 7
return 0
}
所谓数组,是有序的元素序列。数组是在程序设计中,为了处理方便, 把具有相同类型的若干元素按无序的形式组织起来的一种形式。这些无序排列的同类数据元素的集合称为数组。
比如油烟机的风扇转速会和工作的模式之间有一定的关系,那么我们就可以把它的工作模式和一维数组的下标对应起来,我们将具体的转速放在数组中,这样的话就非常方便我们在日后查询。
再比如说家中的冷暖灯光控制这方面,色温灯里会有两个灯珠,分别对应的是冷光和暖光,选择不同的模式灯光的颜色就不同,我们就可以将这两种灯光的亮度pwm值事先放在二维数组中,以便调用调光。
在程序中合理地使用数组,会使程序的结构比较整齐,而且可以把较为复杂的运算,转化成简单的数组来表示。
相关内容:
一、使用规则:
1、可以只给部分元素赋初值。当{ }中值的个数少于元素个数时,只给前面部分元素赋值。
2、只能给元素逐个赋值,不能给数组整体赋值。
(请注意:在C、C#语言中是这样,但并非在所有涉及数组的地方都这样,数据库是从1开始。)
3、若不给可初始化的数组赋初值,则全部元素均为0值。
4、假如给全部元素赋值,则在数组说明中, 可以不给出数组元素的个数。
动态赋值可以在程序执行过程中,对数组作动态赋值。这时可用循环语句配合scanf函数逐个对数组元素赋值。
二、表示方法:
数组元素是组成数组的基本单元。
数组元素也是一种变量, 其标识方法为数组名后跟一个下标。下标表示了元素在数组中的顺序号。数组元素的一般形式为:数组名[下标] 其中的下标只能为整型常量或整型表达式。
如为小数时,C编译将自动取整。例如,a[5],a[i+j],a[i++]都是合法的数组元素。数组元素通常也称为下标变量。必须先定义数组, 才能使用下标变量。在C语言中只能逐个地使用下标变量, 而不能一次引用整个数组。
以上内容参考:百度百科—数组
C语言将数组元素大小排序方法:
以下使用的是冒泡排序法实线数组从小到大排序。
思想:每次相邻两个数比较,若升序,则将大的数放到后面,一次循环过后,就会将最大的数放在最后。
10、2、3、4、5、6、9、8、7、1是输入的待排序的数列,经过第一次排序,将最大的,10放在最后,第二次排序,将剩下的2、3、4、5、6、9、8、7、1进行冒泡,将当前最大的9放在倒数第二的位置,以此类推。
以下是具体代码:
#include <stdio.h>
int main(){
int nums[10] = {10, 2, 3, 4, 5, 6, 9, 8, 7, 1}
int i, j, temp, isSorted
//优化算法:最多进行 n-1 轮比较
for(i=0i<10-1i++){
isSorted = 1 //假设剩下的元素已经排序好了
for(j=0j<10-1-ij++){
if(nums[j] >nums[j+1]){
temp = nums[j]
nums[j] = nums[j+1]
nums[j+1] = temp
isSorted = 0 //一旦需要交换数组元素,就说明剩下的元素没有排序好
}
}
if(isSorted) break//如果没有发生交换,说明剩下的元素已经排序好了
}
for(i=0i<10i++){
printf("%d ", nums[i])
}
printf("\n")
return 0
}
扩展资料:
其他将数组从小到大排序的算法
以下使用的是选择排序法实现数组从小到大排序。
思想:从第一个数开始,每次和后面剩余的数进行比较,若升序,则如果后边的数比当前数字小,进行交换,和后面的所有的数比较、交换后,就会将当前的最小值放在当前的位置
输入的序列为10、2、3、4、5、6、9、8、7、1进行一次排序后将最小的数放在了第一位(a[0]与它后面的所有数进行比较,若a[0]比后面的数大,进行交换),以此类推。
以下是具体代码:
#include <stdio.h>
int main(void){
int a[1001]
int n,i,j,t
scanf("%d",&n)//n为要排序的数的个数
//输入需要排序的数
for(i=0i<n++i)
scanf("%d",a+i)
//接下来进行排序
for(i=0i<n-1++i)//因为每次需要和a[i]后面的数进行比较,所以到a[n-2](倒数第2个元素)就行
{
for(j=i+1j<n++j)//j从i后一个开始,a[i]与a[j]进行比较
{
if(a[i]>a[j])//a[i]为当前值,若是比后面的a[j]大,进行交换
{
t=a[i]
a[i]=a[j]
a[j]=t
}
}//每排序一次,就会将a[i](包括a[i])之后的最小值放在a[i]的位置
for(j=0j<n++j)
printf("%-5d",a[j])
printf("\n\n")
}
return 0
}