
为加强印象,代码纯手敲,若有错误,评论提出
一维整型数组
1.定义方式
数据类型 数组名 [元素个数]
示例: int a[5 ];
注意:元素个数必须为常量、常量表达式
2.数组元素的访问
数组名 [元素下标]
注意:1.元素下标:0—元素个数-1
2.元素下标可以为变量
3.数组元素的初始化
初始化 != 赋值
1)全部初始化
例:
int a[5] = {1,2,3,4,5};
2)局部初始化
例:
int a[5] = {1,2,3};
注意:第3、4位的值被初始化位0
没有被初始化的元素,默认初始化位0
3)默认初始化
int a[] = {1,2,3,4};
注意:由大括号里的初值决定元素个数
4)数组的存储
1. 空间大小
数组所占空间大小 == 每个元素所占空间大小 * 元素个数
2.获得数组元素个数的方法:
int len = sizeof(a) / sizeof(a[0])
3.数组存储的特性:
1) 连续性:数组存放元素空间连续
2)有序性:数组存放元素的顺序有序,a[0] a[1] a[2] a[3] a[4]
3)单一性:数组元素类型一致
4.应用
1)数组从终端接收数据
#include <stdio.h>
int main(void)
{
int i = 0;
int a[6] = {0};
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; i++)
{
scanf("%d",&a[i]);
print("a[%d] = %d\\n",i,a[i]);
}
return 0;
}
2)找出数组中的最大值、最小值
#include <stdio.h>
int main(void)
{
int i = 0;
int n= 0;
int min = 0;
int max = 0;
int a[5] = {0};
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len ; i++)
{
scanf("%d", &a[i]);
printf("a[%d] = %d",i,a[i]);
}
min = a[0];
for(i = 1; i < len; i++)
{
if(a[i] < min)
{
min = a[i];
}
}
printf("最小值:%d",min);
max = a[0];
for(i = 1; i < len ; i++)
{
if(i = 0; i < len; i++)
{
if(a[i] > max)
{
max = a[i];
}
}
}
printf("最大值:%d",max);
return 0;
}
3)找出最大值、最小值的下标
#include <stdio.h>
int main(void)
{
int i = 0;
int minN = 0;
int maxN = 0;
int a[5] = {0};
int len = sizeof(a) / sizeof(a[0])
for(i = 0; i <len ;i++)
{
scanf("%d",&a[i]);
printf("a[%d] = %d",i,a[i]);
}
minN = 0;
for(i = 0; i < len; i++)
{
if(a[minN] < a[i])
{
minN = i;
}
}
printf("最小值下标:%d\\n",i);
maxN = 0;
for(i = 0; i < len; i++)
{
if(a[maxN] > a[i])
{
maxN = i;
}
}
printf("最大值下标:%d\\n",i);
return 0;
}
4)数组的倒置(逆序)
a[0] a[1] a[2] a[3] a[4]
若有5个数:1, 2, 3, 4, 5
a[0] <-> a[4]
a[1] <-> a[3]
需要交换2次
若有6 个数需要交换2次
7 个数需要交换3次
故交换次数为:元素个数 / 2
#include <stdio.h>
int main(void)
{
int i = 0;
int tmp = 0;
int a[6] = {0};
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; i++)
{
scanf("%d",&a[i]);
}
for(i = 0; i < len / 2; i++)
{
tmp = a[i];
a[i] = a[len – 1 – i];
a[len – 1 – i] = tmp;
}
for(i = 0; i < len; i++)
{
printf("a[%d] = %d",i,a[i]);
}
return 0;
}
5)数组的冒泡排序
先把a[0] 的值,依次与其他位置的值比较,若比其他位置的值大,则与其交换位置
要找(len – 1)次大的值!

#include <stdio.h>
int main(void)
{
int i = 0;
int n = 0;
int tmp = 0;
int a[5] = {0};
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len; i++)
{
scanf("%d",&a[i]);
}
for(n = 0; n < len – 1; n++)
{
for(i = 0; i < len – 1 – n; i++)
{
if(a[i] > a[i + 1])
{
tmp = a[i];
a[i] = a[i+1];
a[i+1] = tmp;
}
}
}
for(i = 0; i < len ; i++)
{
printf("a[%d] = %d\\n",i,a[i]);
}
return 0;
}
6)数组的选择排序
把a[0]位置的值,依次和后面位置的值比较,找出最小的值替换到a[0]的位置,并固定在这;
要找(len -1) 次小的值
#inculde <stdio.h>
int main(void)
{
int i = 0;
int n = 0;
int tmp = 0;
int minN = 0;
int a[5] = {0};
int len = sizeof(a) / sizeof(a[0]);
for(i = 0; i < len – 1; i++)
{
scanf("%d",&a[i]);
}
for(n = 0; n < len – 1; n++)
{
minN = n;
for(i = 1 + n; i < len; i++)
{
if(a[minN] > a[i])
{
minN = i;
}
if(minN != i)
{
tmp = a[i];
a[i] = a[minN];
a[minN] = tmp;
}
}
}
for(i = 0; i < len; i++)
{
printf("%d ",a[i]);
}
return 0;
}
网硕互联帮助中心




评论前必须登录!
注册