数组篇
- 一:什么是数组?
- 二:如何定义数组?
- 三:如何访问数组
- 四:如何计算一个数组的大小
- 五:数组和函数
- 六:数组和函数之成绩判断例
- 七:思维导图总结
一:什么是数组?
1:数组是数据的集合。
2:数组的数据是同类型的,1-100都是整数,不能是1.1, 1.2,1.3
3:数组的地址是连续的
二:如何定义数组?
int array[10]; //1.没有初始化的数组,仅仅申请了10个整形数的内存空间,最好要初始化: int array[10] = {0};
int array[10] = {1,2,3,4,5,6,7,8,9,10}; //2.有初始化的数组,完整初始化,该数组申请了十个整型数的内存空间,并赋值十个数 1 2 3 4 5 6 7 8 9 10
int array[10] = {1,2,3}; //3.有初始化的数组,不完整初始化,该数组申请了10个整型数的内存空间,但只赋值三个数1 2 3,放在数组的前三个位置
三:如何访问数组
#include<stdio.h>
int main(){
int array[3] = {1,2,3};
printf("数组的第二个元素是:%d",array[2]);
return 0;
}
1.运行结果:数组的第二个元素是:3
2.数组是通过下标来引用当中的某个元素
3.为什么是3而不是2?是因为外国人喜欢从0开始计算,毕竟这玩意是外国人发明的
- 注意:数组的中括号只有在定义一个数组的时候才表示数组的大小,其余任何情况,都表示用下标来访问数组
四:如何计算一个数组的大小
#include<stdio.h>
int main(){
int a[3];//一个整数型占用空间4个字节,三个占用空间12个字节
char b[3];//一个字符型占用空间1个字节,三个占用空间3个字节
printf("a数组的大小是:%ld\n",sizeof(a));
printf("b数组的大小是:%ld\n",sizeof(b));
printf("一个整型数的空间是:%ld\n",sizeof(int));
printf("一个字符型数的空间是:%ld\n",sizeof(char));
return 0;
}
问:两个数组有什么相同,有什么不同?
相同:元素个数都是3
不同:1.数组的类型不同 2.数组的大小不同
问:如何计算数组中元素的个数?
1)根据数组的总大小 / 一个类型的大小
2)a数组的元素个数为:sizeof(a) / sizeof(a[0]) 或者 sizeof(a) / sizeof(int)
3)b数组的元素个数为:sizeof(b) / sizeof(b[0]) 或者 sizeof(b) / sizeof(char)
五:数组和函数
1.看代码
#include<stdio.h>
void arrayPrint(int datas[5] , int cnt)
{
int i;
printf("调用函数中数组的大小:%ld\n",sizeof(datas));
printf("调用函数中一个int数据的大小是:%ld\n",sizeof(int));
printf("调用函数中数组的元素个数是:%ld\n",sizeof(datas) / sizeof(datas[0]));
for(i=0;i<cnt;i++){
printf("%d ",datas[i]);
putchar('\n');//purchar 输出一个字符 , getchar 获取一个字符的输入
}
}
int main()
{
int array[5] = {11,22,33,44,55};
printf("主函数数组的大小是:%ld\n",sizeof(array));
printf("主函数数组的元素是:%ld\n",sizeof(array) / sizeof(array[0]));
arrayPrint(array,sizeof(array) / sizeof(array[0]));
return 0;
}
2.看运行结果
3.问:为啥主函数数组传参给调用函数得到的数组大小和数组元素不一样?
void arrayPrintf(int datas[5],int cnt)
1)形式参数中,虽然写了一个数组的样子,中括号中数组的大小是无效的!!!
2)这里不管中括号中写多少,都不能代表形参数组有多大,所以可以不用写,直接写 int datas[]
3)这里的中括号的作用仅仅用来表示,该参数是一个(地址!!!)
- 注意:1. 主函数传过来的第一个参数是数组的首地址,第二个参数是数组的大小
- 2. 数组名 = 地址 = 数组的首地址,所以主函数的把数组 &array[0] 传过来也可以!!!
4.还有
这里输出数组不用担心是地址需要 * 键取内容,不冲突,所以可以用数组的下标法直接遍历。
六:数组和函数之成绩判断例
#include<stdio.h>
#include<stdlib.h>
//提示用户输入10个成绩,找最高分,找最低分,算出平均分
void initScores(int datas[],int size)
{
int i;
for(i=0;i<size;i++){
printf("请输入第%d个分数:\n",i+1);
scanf("%d",&datas[i]);
if(datas[i] > 100 || datas[i] < 0){
printf("请输入0-100的分数成绩!\n");
exit(-1);
}
}
}
void printScores(int datas[],int size)
{
int i;
for(i=0;i<size;i++){
printf("你输入的第%d个成绩是:%d\n",i+1,datas[i]);
}
}
int getMax(int datas[],int size)
{
int i;
int max;
max = datas[0];
for(i=0;i<size;i++){
if(max < datas[i]){
max = datas[i];
}
}
return max;
}
int getMin(int datas[],int size)
{
int i;
int min;
min = datas[0];
for(i=0;i<size;i++){
if(min > datas[i]){
min = datas[i];
}
}
return min;
}
float getAverage(int datas[],int size)
{
int i;
float average;
int total = 0;
for(i=0;i<size;i++){
total += datas[i];//total = total + datas[i];
}
average = (float)total / size;
return average;
}
void printRet(int max,int min,float average)
{
printf("最高分是:%d 最低分是:%d 平均分是:%f\n",max,min,average);
}
int main()
{
int scores[10];
int len;
int max;
int min;
float average;
len = sizeof(scores) / sizeof(scores[0]);
initScores(scores,len);
printScores(scores,len);
max = getMax(scores,len);
min = getMin(scores,len);
average = getAverage(scores,len);
printRet(max,min,average);
return 0;
}
七:思维导图总结