1,数组的格式 :
存储类型 数据类型 数组名 [ 元素个数 ] = {元素1,元素2.‘ ’};
auto int a [4] ={1 ,2 , 3 } ;
意义:在栈区开辟一个大小为12字节的区域(数组大小=sizeof(数据类型)*元素个数)
格式分析:存储类型:数组中元素的存储位置,默认在栈区开辟空间(被auto修饰)
数据类型:数组中每一个元素的类型
数组名:当前该片连续空间的名称,见名知义
元素个数:当前数组中的元素总个数,注意该个数不能写变量。一般该元素个数用常量代替(宏常量居多)
eg:
#include
int main()
{
auto char str[5]={'a','b','c','d','e'};
printf("%cn",*(str+1));
printf("%pn",&str[0]);
printf("%cn",str[2]);
return 0;
}
2,数组元素名代表数组首元素的地址,元素的下标从0开始计算,即:str = &(str[0])
3, 当数组在{}之内定义时,意味着是一个局部数组,当不赋值时,其值为随机值
4, 当数组在{}之外定义时,意味着是一个全局数组,当不赋值时,其值为0
5,当数组满初始化时,元素会原样输出
6, 当数组部分初始化时,剩余未被赋值的元素默认补0
7,可以利用6的特性,实现清空一个数组:int arr[5] = {0};
8,对于整形数组而言:一般通过循环完成元素的赋值以及输出
9,冒泡排序:
#include
int main()
{
int i=0,j=0,k=0;
int a[]={33,5,1,3,22};
for(i=0;i<4;i++)//需要比较的数一共有5个,每一个数都要和后边的数做比较,所以需要比较四轮。
{
for(j=0;j<(4-i);j++)//当第一轮比较完确定第一个数值是最小的,即数组a[0],已经是最小的无需再比,下一次比 较时,只需要比较后边4个数,所以比较3次机即可。
{
if(a[j]
{
k=a[j];
a[j]=a[j+1];
a[j+1]=k;//转换a[i]和a[i+1]的值
}
}
}
for(int l=0;l<5;l++)//循环打印出排序后的数组顺序。
{
printf("%dn",a[l]);
}
return 0;
}
10,数组初始化:
不建议不初始化数组,因为未初始化的数组,内部空间的数据是杂乱的。
部分初始化:
格式::
数据类型 数组名[len]={元素初始值};
提示:元素的初始值个数小于len
注意:部分初始化数组的方式,初始化部分数据会被赋予{}内的初始值,未被初始化的部分
将会被赋值为0
省略长度初始化
格式:
数据类型 数组名[ ]={元素初始值};
提示:省略长度初始化就是在定以数组的时候不指定数组的长度,数组的长度由后面数组的
初始化元素个数决定
int num[]={1,2,3,4,5};
全部初始化
格式:
数据类型 数组名[len]={元素初始值};
提示:元素的初始值个数等于len
11,不同变量的初始值
int : 0
float 0.0
double 0.0
char 空
指针 NULL
字符串:
12,随机数和数组的使用
随机数 srand
time - get time in seconds
#include
time_t time(time_t *tloc);
time_t *tloc:指针,直接赋值为NULL(空)
time_t :接收获取到的秒数
time的功能是获取当前时间距离1970-1-1 00:00:00的秒数值
rand, srand - pseudo-random number generator
#include
int rand(void);
void srand(unsigned int seed);
unsigned int seed:种子值
The rand() function returns a pseudo-random integer in the range 0
to RAND_MAX(2147483647) inclusive
The srand() function sets its argument as the seed for a new
sequence of pseudo-random integers to be returned by rand().
随机数的产生:
1、通过time获取时间种子
2、通过srand设置时间种子
3、通过rand返回随机数
13,选择排序(交换下标)
#include
#include
#include
int main()
{
int i=0,j=0,tmp=0,min=0;
time_t times=0;
int num[10]={0};
times=time(NULL);
srand(times);
for(i=0;i<10;i++)
{
num[i]=rand()%100;
}
for(i=0;i<10;i++)
{
printf("num[%d]=%d ",i,num[i]);
}
printf("n");
for(i=0;i<10;i++)
{
min=i;
for(j=i+1;j<10-i;j++)
{
if(num[min]>num[j])
{
min=j;
}
}
if(min!=i)
{
tmp=num[min];
num[min]=num[i];
num[i]=tmp;
}
}
for(i=0;i<10;i++)
{
printf("num[%d]=%d ",i,num[i]);
}
printf("n");
return 0;
}
14,二维数组,
格式:
数据类型 数组名[row][column];
row:行数
column:列数
注意:在定以二维数组的时候行可以省略但是列不能省略
如:
int num[2][3];
行可以省,列不能省
方式一:不初始化
数据类型 数组名[row][column];
不对二维数组的成员进行赋值操作
方式二:部分初始化
数据类型 数组名[row][column]={数组元素};
数组元素的个数小于 row*column
方式三:省略行长度初始化
数据类型 数组名[ ][column]={数组元素};
行数等于数组元素的个数除以column
假如初始化中数组的元素个数为8个,列数为3
行位:8/3+1
未初始化的数为0
方式四:全部初始化
数据类型 数组名[row][column]={数组元素};
数组元素的个数等于 row*column
提示:列不能省