标签:
------- ios培训、 android培训、java培训、期待与您交流! ----------
一.数组的基本概念
1.数组:用来保存多个相同数据类型的数据的集合
定义变量: 数据类型 变量名称
定义数组: 数据类型 数组名称[元素个数]
二.数组的多种初始化方式
1.数组只有定义了才能进行初始化,只有初始化才能使用
数组遍历:取出数组中的每一个元素看一下
代码演示:
1 #include <stdio.h>
2
3 int main(int argc ,const char *argv[]{
4
5 // 定义一个数组
6
7 int scores [0];={1,9,9,0,7,9,11};
8
9 // 计算数组所占用的字节数,也就是数组元素个数
10
11 int count = sizeof(nums)/sizeof(int);
12
13 // 遍历数组:
14
15 for(int i=0;i<count;i++){
16
17 printf("scores [%d]=%d",i,nums[i]);
18
19 }
20
21 return 0;
22
23 }
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.下标小的元素地址在小地址上,下标大的元素在大地址上
int chars[3] = {‘a‘,‘b‘,‘c‘};
下标越界:
数组下标越界导致的问题:
约错对象,访问你不该访问的元素,出现莫名的错误
越界超出很大范围,程序崩溃
总结:
1.基本数据类型作为函数参数传递是值传递;
2.数组作为函数参数类型传递是地址传递,如果在函数中改变数组的某个值,实参的值也会改变。
3.当数组作为函数参数传递的时候,会被自动转换为指针类型。所以在函数中不能获取形参数组的长度,只能由主调函数传入
四.二维数组的基本概念
二维数组:元素为一维数组的数组;
格式:数据类型 数组名称[一维数组个数][一维数组元素个数]
五.定义二维数组
char scores[3][2]
遍历二维数组:
代码演示:
1 #include <stdio.h>
2
3 int main(int argc ,const char *argv[]{
4
5 //定义一个二维数组
6
7 char scores[3][2]
8
9 //外层循环控制行(一维数组的个数)
10
11 for(int i=0;i<3;i++){
12
13 //内层循环控制列(一维数组元素个数)
14
15 for(int j=0;j<2,j++){
16
17 printf("scores[%d][%d]=%c\n",i,j,scores[i][j]);
18
19 }
20
21 }
22
23 return 0;
24
25 }
二维数组的多种初始化方式:
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;
}
标签:
原文地址:http://www.cnblogs.com/ly0709/p/5040760.html