数组
一维数组
定义
相同数据类型的有序连续存储。
- 示例
int arr[5] = {1, 2, 3, 5, 6};
各个元素的内存地址 连续
数组名为地址。是数组首元素的地址。arr = &arr[0];
printf("数组大小:%lu\n", sizeof(arr));
printf("数组元素大小:%lu\n", sizeof(arr[0]));
printf("数组元素个数:%lu\n", sizeof(arr)/sizeof(arr[0]));
数组的初始化
- 示例
// 1、数组大小和数组元素同时存在
int arr[5] = {1, 2, 3, 4, 5};
// 2、声明数组大小,但元素个数不够,则默认没有写出的元素自动初始化为0
int arr[10] = {1, 2, 3, 4}; // 剩余元素补0
// 3、声明数组大小,初始化为0
int arr[19] = {0};
// 4、不声明数组大小,则大小根据元素个数确定
int arr[] = {1, 2, 3, 4};
// 5、定义含有一个元素的数组
int arr[] = {0};
// 6、声明数组大小,后面依次赋值
int arr[3];
arr[0] = 1;
arr[1] = 2; //其余元素未被初始化,则默认值为随机数
数组元素逆序
- 代码实现
/*********************************************************
* > File Name: arr_reverse.c
* > Author: YQQ
* > Mail:
* > Created Time: 2021年04月24日 星期六 18时50分33秒
*
* > Program:数组元素逆序
**************************************************************/
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char * argv[])
{
int arr[] = {1, 2, 3, 4, 6, 8, 9, 10};
int i = 0; //数组元素首坐标
int len = sizeof(arr)/sizeof(arr[0]);
int j = len - 1; // 数组元素最后一个元素下标
int temp; //临时变量
puts("初始数组:");
for(i = 0; i < len; i++)
printf("%d ", arr[i]);
puts("");
i = 0;
while(i < j)
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
puts("逆序后的数组:");
for(i = 0; i < len; i++)
printf("%d ", arr[i]);
puts("");
return 0;
}
- 结果展示
冒泡排序
- 代码实现
/*********************************************************
* > File Name: bubble_sort.c
* > Author: YQQ
* > Mail:
* > Created Time: 2021年04月24日 星期六 19时13分34秒
* > Program:冒泡排序
**************************************************************/
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char * argv[])
{
int arr[] = {3, 6, 2, 23, 9, 10, 13, 8, 1, 5};
int len = sizeof(arr)/sizeof(arr[0]);
int i, j, temp;
puts("排序前:");
for(i = 0; i < len; i++)
printf("%d ", arr[i]);
puts("");
for(i = 0; i < len -1; i++)
{
for(j = 0; j < len -1 -i; j++)
{
if(arr[j] > arr[j+1])
{
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
puts("排序后:");
for(i = 0; i < len; i++)
printf("%d ", arr[i]);
puts("");
return 0;
}
- 结果展示
二维数组
- 定义语法
int arr[2][3] =
{
(2, 5, 8),
(7, 9, 10)
};
int arr1[2][4] = {{2, 4, 3, 5}, {1, 6, 8, 9}};
- 打印
for(i = 0; i < 2; i++) //行
{
for(j = 0; j < 4; j++)
{
printf("%d ", arr[i][j]);
}
puts("");
}
大小
数组大小:sizeof(arr);
一行大小:sizeof(arr[0]); // arr[0]–>行,二维数组的行就是一维数组
一个元素大小: sizeof(arr[0][0]);
行数: sizeof(arr)/sizeof(arr[0]); //(总大小/一行大小)
列数:sizeof(arr[0])/sizeof(arr[0][0]); //一行大小/一个元素大小
- 代码示例
/*********************************************************
* > File Name: test.c
* > Author: YQQ
* > Mail:
* > Created Time: 2021年04月24日 星期六 18时20分37秒
* > Program:
**************************************************************/
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char * argv[])
{
int arr[2][4] = {{1, 3, 6, 8}, {2, 4, 7, 9}};
printf("数组大小:%ld\n", sizeof(arr));
printf("数组一行大小:%ld\n", sizeof(arr[0]));
printf("数组一个元素大小:%ld\n", sizeof(arr[0][0]));
printf("数组行数:%ld\n", sizeof(arr)/sizeof(arr[0]));
printf("数组列数:%ld\n", sizeof(arr[0])/sizeof(arr[0][0]));
return 0;
}
- 结果展示
练习
求出5名学生3门功课的总成绩。(一个学生的总成绩,一门功课的总成绩)
- 代码实现
/*********************************************************
* > File Name: stu_grades.c
* > Author: YQQ
* > Mail:
* > Created Time: 2021年04月24日 星期六 19时56分35秒
* > Program:求每个学生的总成绩、每門功课的总成绩
**************************************************************/
#include<stdio.h>
#include<strings.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char * argv[])
{
int scores[5][3];
int i, j;
printf("请输入5名学生3門功课的成绩\n");
//获取5名学生,3門功课的成绩
for(i = 0; i < 5; i++)
{
for(j = 0; j < 3; j++)
{
scanf("%d", &scores[i][j]);
}
}
//求一个学生的总成绩
for(i = 0; i < 5; i++) //每个学生
{
int sum = 0;
//每个学生的成绩
for(j = 0; j < 3; j++)
{
sum += scores[i][j];
}
printf("第%d个学生的总成绩为:%d\n", i+1, sum);
}
//求一門功课的总成绩
for(i = 0; i < 3; i++) //每个学生的成绩
{
int sum = 0;
//每个学生
for(j = 0; j < 5; j++)
{
sum += scores[j][i];
}
printf("第%d个功课的总成绩为:%d\n", i+1, sum);
}
return 0;
}
- 结果展示