数组是什么
用来存储数据 ---- 存储同种类型的多个数据
定义
类型:个数
格式:数据类型 数组名[总个数];
存储班级同学的成绩
数据:成绩
数据类型:float
总个数:40
数组名:自定义
float scores[40]; //40个float类型 只有一个名字 --- scores
练习:
存储 班级同学的年龄,这个班级只有8个人。 int ages[8];
存储 小写字母 char char[26];
数组下标:
下标:
为数组中的每一个空间进行编号,从0开始到总个数-1
float scores[40];
下标:0 1 2 3 ... 39
int ages[8];
下标:0 1 2 3 ... 7
注意:不要超标,需要区分总个数和下标
数组中空间的访问:
数组名[下标] --- 用数组
&数组名[下标] --- 元素空间地址
float scores[40];
float类型的空间:scores[0] scores[1] ... scores[39]
int ages[8];
int类型的空间:ages[0] ages[1] ages[2] ages[3] ... ages[7]
int ages[8];
//直接赋值,填入8个年龄
ages[0] = 20;
ages[1] = 30;
printf("%d %d",ages[0],ages[1]);
//空间的地址:
float scores[40];
float类型的空间:scores[0] scores[1] ... scores[39];
float类型的空间地址:&scores[0] &scores[1] ... &scores[39]
int ages[8];
int类型的空间:ages[0] ages[1] ... ages[7]
int类型的空间地址:&ages[0] &ages[1] ... &ages[7]
//输入赋值: //下标2-3中输入赋值
// ages[2] ages[3]
scanf("%d%d",&ages[2],&ages[3]); // 100 40
printf("%d %d",ages[2],ages[3]);
//定义一个数组,通过输入的形式将数据写入到空间里面后访问
#include<stdio.h>
int main()
{
int i;
int arr[5];
for(i=0;i<5;i++)
{
scanf("%d",&arr[i]);
}
for(i=0;i<5;i++)
{
printf("%d\n",arr[i]);
}
return 0;
}
数组的初始化:
定义数组的时候就给空间数据。
int a[3] = {20,40,60};
int a[3] = {20}; //{20,0,0}; --- 初始化的时候数据个数小于总个数,其他空间补0
int a[3] = {10,4,5,7,8}; //{10,4,5}
int a[] = {1,3,5,67};
注意下面写法:
省略个数的初始化 --- 初始化的时候可以省略个数
int a[] = {1,6,9,100,40}; //开多少空间? {}数据个数 -- 5个int型的空间
拓展数组的长度:
sizeof(a) / sizeof(a[0]) == 20 / 4 == 5 //(20是上面int a[]中四个值都是int类型共占20个字节)
什么情况下用初始化?什么情况下用定义?
一开始知道数组中的数值 --- 初始化
一开始不知道数组中的数值 --- 定义
数组: --- 构造下标
数组的初始化是在创建数组时为其分配内存并设置初始值的过程。
练习:
//1、定义一个数组,将26个字母存储进去,然后输出。
#include<stdio.h>
int main()
{
char ch[26];
char i;
for(i=0;i<26;i++)
{
ch[i]='a'+i;
}
for(i=0;i<26;i++)
{
printf("%c\r\n",ch[i]);
}
return 0;
}
//2、定义一个数组,通过输入形式输入5个整型的数值,然后计算这5个数据的和、最大值、最小值
//定义一个数组,输入5个整型数值进去,
//计算出5个值得和、求得最大值和最小值.c
#include<stdio.h>
int main()
{
int a[5];
int max = a[0];
int min = a[0];
int sum = 0;
int i;
printf("请输入存入数组中的五个值:");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
if(max<a[i])
{
max = a[i];
}
if(min>a[i])
{
min = a[i];
}
sum+=a[i];
}
printf("你输入的值中:\n和为:%d\n最大值为:%d\n最小值为:%d",sum,max,min);
return 0;
}
}//3、int a[]={100,5,78,45,52,199}; 将数组中的数据进行翻转,反转后为{199,52,45,78,5,100}
#include<stdio.h>
int main()
{
int a[]={100,5,78,45,52,199};
int i;
int b;
for(i=0;i<3;i++)
{
b = a[i];
a[i] = a[5-i];
a[5-i] = b;
}
for(i = 0; i < 6; i++)
{
printf("%d ", a[i]);
}
printf("\n");
return 0;
}
//输入一个十进制的值,用数组存储的方式将十进制转换为二进制存储进数组中并输出
#include <stdio.h>
int main()
{
int i = 0;
int d;
int a[32];
int j;
printf("请输入一个整数:");
scanf("%d", &d);
while (d > 0)
{
a[i] = d % 2; // 存储余数
d = d / 2; // 更新商
i++;
}
printf("你输入的整数转为二进制的值为:");
for( j = i-1; j >= 0; j--)
{
printf("%d", a[j]);
}
printf("\n");
return 0;
}
小总结:
一维数组
存储多个相同数据类型的数据
数组的定义:
元素类型 数组名[总个数];
数组下标:
从0开始 到 总个数-1
元素:
空间的名称: 数组名[下标]
空间的地址: &数组名[下标]
数组的初始化:
省略个数的初始化: 后面有几个数据开几个空间。
二维数组:
数组:多个同种类型的一维数组,用行和列来进行理解
二维数组定义:
数据类型 数组名[总行数][总列数];
二维数组的初始化
int a[2][3] = {{1,2,3},{100,4,78}};
int a[2][3] = {1,2,3,4,5,6};
int a[2][3] = {1,2,3,4}; //{1,2,3},{4,0,0}
只能缺少行数的初始化
int a[][3] = {1,2,3,4,5}; //{1,2,3,4,5,0}
比如:
存储3个班同学的成绩,每个班有五人
3行,五列
float scores[3][5];
行下标,列下标:
行下标:0 ~ 2
列下标:0 ~ 4
数据空间:
空间名称: 数组名[行下标][列下标];
空间地址: &数组名[行下标][列下标];
float scores[3][5];
//scores[0][0] scores[0][1] scores[0][2] scores[0][3]
//scores[1][0] scores[1][1] scores[1][2] scores[1][3]
//scores[2][0] scores[2][1] scores[2][2] scores[2][3]
int i;
int j;
for(i=0;i<3;i++)
{
//构造列
for(j=0;j<5;j++)
{
scanf("%f",&acores[i][j]);
}
}
for(i=0;i<3;i++)
{
//构造列
for(j=0;j<5;j++)
{
printf("%d",acores[i][j]);
}
ptintf("\n");
}
练习1:
定义一个二维数组,通过输入的形式对空间进行写值,并输出空间里面的值。
求每一行的和、最大值、最小值并输出
float scores[3][5];
float sum = 0;
float max;
for(i=0;i<3;i++)
{
// 构造列
for(j=0;j<5;j++)
{
scanf("%f",&scores[i][j]);
}
}
for(i=0;i<3;i++)
{
// 行的开始
sum = 0;
max = scores[i][0];
// 构造列
for(j=0;j<5;j++)
{
printf("%d ",scores[i][j]);
sum += scores[i][j];
if(max < scores[i][j])
{
max = scores[i][j];
}
}
// 行的结束
printf("第%d行的和:%f\n",i,sum);
printf("第%d行的最大值:%f",i,max);
printf("\n");
}