2.5.1一维数组
数据类型 数组名[数组大小];
注意:数组大小必须是整数常量,不可以是变量。
几种常见数据类型的一维数组定义举例:
int a[10];
double db[2333];
char str[100000];
bool HashTable[100000];
这样就可以吧int a[10]理解定义了十个int型数据,且以下面的格式访问:
数组名称[下标]
还需要知道,在定义了长度为size 的一维数组后,只能访问下标 0~size-1的元素。
一维数组初始化。一维数组的初始化,需要给出用逗号隔开的从第一个元素开始的若干个元素的初值,并用大括号括住。后面未被赋初值的元素将会由不同编译器内部实现的不同而被赋以不同的初值(可能是很大的随机数)而一般情况默认初始值为0
实例如下:
#include<stdio.h>
int main(){
int a[10] = {5,3,2,6,8,4};
for(int i = 0;i < 10;i++){
printf("a[%d] = %d\n",i,a[i]);
}
return 0;
}
a[0]=5
a[1]=3
a[2]=2
a[3]=6
a[4]=8
a[5]=4
a[6]=0
a[7]=0
a[8]=0
a[9]=0
上面的程序对数组a的前六个元素进行了赋初值,而后没有赋值的部分默认赋值的部分默认为0.
但是如果数组一开始没有赋初值,数组中的每个元素都可能会是一个随机数,并不一定默认为0.
因此如果想要整个数组都赋初值0,只需要把第一个元素赋为0,或者只用一个大括号来表示。
当然更推荐2.5.4小节介绍的memset函数
int a[10] = {0};
int a[10] = {};
数组中每个元素都可以被赋值,被运算明明可以被当做普通变量进行相同的操作。
如果根据一些条件,可以不断让后一位的结果由前一位或前若干位计算得来,你们就把这种做法称为递推
递推可分为顺推和逆推两种
顺推举例如下:
#include<stdio.h>
int main(){
int a[10];
scanf("%d",&a[0]);
for(int i = 1;i<10;i++){
a[i]=a[i-1]*2;
}
for(int i = 0;i<10;i++){
printf("a[%d] = %d\n",i,a[i]);
}
return 0;
}
2.5.2 冒泡排序
先来学习如何交换两个数
#include<stdio.h>
int main(){
int a[10]={3,1,4,5,2};
for(int i =1;i<+4;i++){
for(int j = 0;j<5-i;j++){
if (a[j]>a[j+1]){
int temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
for(int i = 0;i<5;i++){
printf("%d",a[i]);
}
return 0;
}
规律:当第i趟时,从a[0]到啊[n-i-1]都需要与下一个数比较