1.數組
數組定義形式: int score[100];
數組下標: 從0開始,score[0],score[1]...score[99];
a[n], a[0].....a[n-1]
數據類型 標示符[常量表達式]
1. 數組中的每個元素的類型相同
2. 數組的長度必須爲常量(長度指的是數組元素個數)
3. 數組名必須符合標示符定義
4. 數組下標從0開始
5. 數組名是一個地址常量,不是變量
6. 數組中的每個元素是變量
數組在內存中佔用的大小 = 數據類型長度 * 數組元素個數
數組訪問不能越界操作!
1.1數組初始化
//完全初始化
//
int main(int argc, const char *argv[])
{
int a[5]={1,2,3,4,5};
for (int i=0; i<5; i++) {
printf("a[%d]==%d\n", i, a[i]);
}
return 0;
}
//不完全初始化
int main(int argc, const char *argv[])
{
int a[5]={3,6};
for (int i=0; i< 5; i++) {
printf("a[%d]==%d\n",i, a[i]);
}
return 0;
}
//初始化爲0
int main(int argc, const char *argv[])
{
//int a[5]={};
int a[5]={0};
for (int i=0; i<5; i++) {
printf("a[%d]==%d\n", i,a[i]);
}
return 0;
}
1.2數組簡單操作
//數組遍歷
int main(int argc, const char * argv[])
{
int a[10];
int i;
for (i=0; i<10; i++) {
a[i]=i;
}
for (i=0; i<10; i++) {
printf("a[%d]==%d\n", i,a[i]);
}
return 0;
}
// 倒序操作數組
int main(int argc, const char *argv[])
{
int a[5];
for (int i = 4; i >=0; i--) {
scanf("%d",&a[i]);
}
for (int i=0; i<5; i++) {
printf("a[%d]==%d\n", i, a[i]);
}
return 0;
}
eg.求學生的平均成績
int main(int argc, const char *argv[])
{
int total=0;
float average;
int a[10];
for (int i=0; i<10; i++) {
scanf("%d",&a[i]);
total+=a[i];
}
average = (float)(total/10);
printf("average == %.2f\n", average);
return 0;
}
eg.輸入10個數據, 查找該數據中的最大數,並將其輸出到屏幕上
int main(int argc, const char *argv[])
{
int a[10];
int max;
//輸入數組
for (int i=0; i<10; i++) {
scanf("%d", &a[i]);
}
max = a[0];
//循環比較大小
for (int i=1; i<10; i++) {
if (a[i]>max) {
max = a[i];
}
}
printf("The max value is : %d \n", max);
return 0;
}
eg.字符數組
//字符數組
// char str[100];
// 每個元素佔用1個字節的空間
//
int main(int argc, const char *argv[])
{
// 1
char str[100];
scanf("%s",str);
printf("%s\n", str);
// 2
char str[5]={'a','b','c','d','e'};
for (int i=0 ; i<5; i++) {
printf("%c",str[i]);
}
putchar('\n');
return 0;
}
eg.字符數組操作
//字符串
int main(int argc, const char *argv[])
{
char str[100]="qianfengjiaoyu";
printf("%s\n", str);
}
/*int main(int argc, const char *argv[])
{
char str[12]="hello world!";
//str[12]='\0';
//printf("%s",str);
for (int i=0; i<12; i++) {
printf("%c",str[i]);
}
return 0;
}*/
2.二維數組
eg.初始化&遍歷
//二維數組初始化
//初始化方式 1
int main(int argc, const char *argv[])
{
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
int i, j;
//遍歷數組
for (i=0; i<3; i++) {
for (j=0; j<4; j++) {
printf("%d ", a[i][j]);
}
}
return 0;
}
//初始化方式 2
int main(int argc,const char *argv[])
{
int a[3][4]={{1,2,3,4},
{5,6,7,8},
{9,10,11,12}};
for (int i=0; i<3; i++) {
for (int j=0; j<4; j++) {
printf("%d ",a[i][j]);
}
printf("\n");
}
printf("\n");
return 0;
}
eg.打印楊輝三角(二維數組)
//1
//1 1
//1 2 1
//1 3 3 1
//1 4 6 4 1
//....
/*
2=1+1
3=1+2
3=2+1
4=1+3
6=3+3
4=3+1
....
*/
int main(int argc,const char *argv[])
{
int a[10][10];
int i, j;
for (i=0; i<10; i++) {
//內層循環打印具體每一個數字
for (j=0; j<=i; j++) {
//初始化三角圖形左右兩邊 1
if (j==0 || i==j) {
a[i][j]=1;
}
else
{
a[i][j]=a[i-1][j-1]+a[i-1][j];
}
printf("%d ",a[i][j]);
}
printf("\n");
}
return 0;
}
3.數組應用(排序算法)
3.1冒泡排序
//冒泡排序: 相鄰兩數比較,大數往後移動,小數往前移動;
//4 5 7 8 9
// 9 7 8 5 4
//第一次排序,交換4次
// 7 9 8 5 4
// 7 8 9 5 4
// 7 8 5 9 4
// 7 8 5 4 9
//第二次排序,交換3次
// 7 8 5 4
// 7 5 8 4
// 7 5 4 8 9
//第三次排序,交換2次
// 5 7 4 8 9
// 5 4 7 8 9
//第四次排序
// 4 5 7 8 9
#define LEN 10
int main(int argc, const char * argv[])
{
int a[LEN];
int i, j;
int temp;
//遍歷輸入
for (i=0; i<LEN; i++) {
scanf("%d",&a[i]);
}
for (i = 0; i<LEN-1; i++) {
for (j=0; j<LEN-1-i; j++) {
//交換位置
if (a[j]>a[j+1]) {
temp = a[j];
a[j] = a[j+1];
a[j+1]=temp;
}
}
}
//遍歷輸出
for (i=0; i<LEN; i++) {
printf("%d ",a[i]);
}
putchar('\n');
return 0;
}
3.2選擇排序
//選擇排序
//9 7 8 5 4
//
//第一次排序
//4 7 8 5 9
//第二次排序
//4 5 8 7 9
//第三次排序
//4 5 7 8 9
//第四次排序
//4 5 7 8 9
int main(int argc, const char *argv[])
{
//int a[5]={9, 7, 8, 5, 4};
int a[LEN];
int i,j;
int k,temp;
for (i=0; i<LEN; i++) {
scanf("%d", &a[i]);
}
for (i=0; i<LEN-1; i++) {
k=i;
for (j=i+1; j<LEN; j++) {
if (a[k]>a[j]) {
k=j;
}
}
if (k!=i) {
temp = a[k];
a[k] = a[i];
a[i] = temp;
}
}
for (i = 0; i<LEN; i++) {
printf("%d ",a[i]);
}
putchar('\n');
return 0;
}