------- ios培训、android培训、java培训、期待与您交流! ----------
一. 数组的基本概念
1. 数组:用来保存多个相同数据类型的数据的集合
定义变量: 数据类型 变量名称
定义数组: 数据类型 数组名称[元素个数]
二. 数组的多种初始化方式
数组只有定义了才能进行初始化,只有初始化才能使用
数组遍历:取出数组中的每一个元素看一下
代码演示:
#include <stdio>
int main(int argc ,const char *argv[]{
// 定义一个数组
int scores [0];={1,9,9,0,7,9,11};
// 计算数组所占用的字节数,也就是数组元素个数
int count = sizeof(nums)/sizeof(int);
// 遍历数组:
for(int i=0;i<count;i++){
printf("scores [%d]=%d",i,nums[i]);
}
return 0;
}
1. 1使用常量作为元素个数
1.2使用变量作为元素个数(C99不支持使用变量作为元素个数,但是LLVM支持)
使用变量作为元素个数的好处:你可以在程序运行到这一行的时候再决定要创建有多少元素的数组
2. 定义数组的同时进行初始化
2.1指定元素个数,同时全部进行初始化
int nums[5] = {1,2,3,4,5}
2.2 不指定元素个数,全部进行初始化
int nums[] = {1,2,3,4,5}
2.3 指定元素个数,部分初始化:从下标为0的元素开始初始化,没有显式初始化的元素系统自动将其初始化为0
int nums[5] = {1,2}
2.4 指定元素个数,为指定的元素初始化
int nums[5] = {[1] = 1,[2]=5}
注意:定义数组同时进行初始化的时候,不可以使用变量作为元素个数
三. 数组的存储细节
数组名称本身就是一个地址
1.数组的地址就是第一个元素的地址
2.数组是一块连续的存储空间
3.下标小的元素地址在小地址上,下标大的元素在大地址上

注意:
数组下标越界导致的问题:
约错对象,访问你不该访问的元素,出现莫名的错误
越界超出很大范围,程序崩溃
注意:
1.基本数据类型作为函数参数传递是值传递;
2. 数组作为函数参数类型传递是地址传递,如果在函数中改变数组的某个值,实参的值也会改变。
3. 当数组作为函数参数传递的时候,会被自动转换为指针类型。所以在函数中不能获取形参数组的长度,只能由主调函数传入
四.二维数组的基本概念
二维数组:元素为一维数组的数组;
格式:数据类型 数组名称[一维数组个数][一维数组元素个数]
五.定义二维数组
char scores[3][2]
遍历二维数组:
代码演示:
#include <stdio>
int main(int argc ,const char *argv[]{
//定义一个二维数组
char scores[3][2]
//外层循环控制行(一维数组的个数)
for(int i=0;i<3;i++){
//内层循环控制列(一维数组元素个数)
for(int j=0;j<2,j++){
printf("scores[%d][%d]=%c\n",i,j,scores[i][j]);
}
}
return 0;
}
二维数组的多种初始化方式:
1. 先定义二维数组,然后初始化(定义二维数组的时候必须指定一维数组的元素个数)
2. 定义二维数组同时初始化
2.1 指定一维数组个数,对全部元素进行初始化
int scores[3][2]={{1,2},{3,4},{5,6}};
2.2不指定一维数组个数,对全部元素进行初始化
int scores[][2]={{1,2},{3,4},{5,6}};
2.3 指定一维数组的元素个数,用一个大括号进行初始化
int scores[3][2]={1,2,3,4,5,6};
int scores[][2]={1,2,3,4,5,};
Ps:定义的同时进行初始化,没有显式初始化的元素会被自动初始化为0
六. 练习
1.录入一个班级成绩,然后计算平均分,班级中有多少人需要自己录入
#include <stdio.h>
int main(int argc ,const char *argv[]{
// 定义学生人数变量,提示用户输入班级学生的人数
int count;
printf("请输入班级学生人数\n");
// 接收用户的录入
scanf("%d",&count);
//定义一个数组保存学生成绩
int scores[count];
//接收用户录入的每一个学生的成绩
for(int i=0;i<count;i++){
printf("请录入第%d个学生成绩:\n",i+1);
scanf("%d",&scores[i]);
}
//计算学生总成绩
int sum = 0;
for(int i=0;i<count;i++){
sum+=scores[i];
}
//计算平均值
double average = (double)sum/count;
//输出学生平均成绩
printf("学生平均成绩为:%.2lf\n",average);
return 0;
}
2. 冒泡排序规则:大的下沉,小的上浮
#include <stdio.h>
int main(int argc ,const char *argv[]{
升序排列数组元素
int nums[]={1,9,9,0,7,9,11};
//计算数组长度
int length = sizeof(nums)/sizeof(int);
//使用冒泡排序
//外层循环控制趟数
for(int i=0;i<length-1;i++){
//内层循环控制每一趟比较多少次
for(int j=0;j<length-1-i);j++{
//元素两两比较,如果前面元素大,则与后面的元素交换位置
if(nums[j]>nums[j+1]){
int temp;
temp = nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
遍历数组,打印排序后的结果
for(int i=0;i<length;i++){
printf("%d ",nums[i]);
}
return 0;
}