今天主要学习数组,本来还要学习指针的,但是数组占用的时间长了,指针没时间学了。
现在总结一下今天学习的内容,加深自己的记忆。
数组(可以存储多个具有同种类型的数据)
一维数组
1.1 一维数组定义:
数据类型 数组名[元素个数]
例如:
1.存储班级的成绩,班里有20个人
float scores[20];(成绩有小数,用float)
2.存储班级同学的年龄,班级里有5个人
int ages[5];(年龄用整型int)
3.存储26个小写字符
char word[26];(字符用用字符型char)
1.2 数组的下标
数组中会为每一个元素进行编号,且编号从0开始,一次增长1,定义完数组就会自然产生。
比如:
int b[5]——下标就会从0开始到4结束(0~元素个数-1)
1.3 元素空间名称
b[5]:
b[0] b[1] b[2] b[3] b[4]
1.4、数组+循环对元素空间进行读写操作
#include<stdio.h>
int main(void)
{
int b[5];
int i;
for(i=0;i<=4;i++)
{
scanf("%d",&b[i]);
}
return 0;
}
巩固练习:
求和计算平均分
#include<stdio.h>
int main(void)
{
float scores[5];
int i; // 下标是整数
float sum = 0;
for(i=0;i<=4;i++)
{
scanf("%f",&scores[i]);
}
// 求和
for(i=0;i<=4;i++)
{
sum = sum + scores[i];
}
// 求平均分
printf("%.2f",sum / 5);
return 0;
}
1.5 初始化
定义的时候就给予值,几个元素几个值:
int b[5]={2,6,34,65,78};
如果填写的值少于定义值,机械运行的时候会自动补0;
int b[5]={3,6};——{3,6,0,0,0}
如果填写的值大于定义值,超出的个数会被舍弃掉
int b[5] = {5,9,9,0,1,2,3}; (只会取到(5,9,9,0,1))
1.6 字符型
字符数组
char names[10] = {'a','b','c','d','e','f','g','h','i','j'};
字符数组或者字符串
char names[5] = {'a','b','\0','\0','\0'};
或者 简写为char names[5] = {'a','b'}
又或者简写为char names[5] = "ab";
如果程序里面有函数不能%c输出,一个汉字unicode编号占2个字节。
--- %s --- 字符串专用的格式控制符(可用于汉字的输出,可以输出全部字符串)
%s 输出只要给字符串的首个字符的地址即可。
%s输出的时候给地址,从那个地址开始读取一个知道遇到\0结束
#include<stdio.h>
int main(void)
{
char names[30] = {'\0'}; // 定义一个数组并且将数组中的内容清0
printf("输入你的名字:");
scanf("%s",&names[0]);
printf("你的名字是:%s",&names[0]);
return 0;
}
Tips:
1、数组只能在初始化的时候整体赋值。
错误写法:
int b[5]; // 数据总个数
b[5] = {1,2,3,4,5}; // 错误 使用的时候[ ]里面是下标。
2、数组名是数组首元素的地址。
错误写法:
int c[5];
c = {1,2,3,4,5}; // 错误 不对 c是数组名,它是首元素的地址
int a = 30;
//printf("%d\n",a); // 查看空间里面的数据
printf("%p\n",&a); // 获取内存分配给a的地址
二维数组
数组里面存储的元素是同种类型的。
二维数组存储多个同种类型的一维数组
tips:
int a[5] = {1,2,3,4,5}; // a是一个数组,里面存放了5个int a的类型 int [5]
int c[3] = {4,5,6}; // c是一个数组,里面存放了3个int c的类型 int [3]
不能将a和c放入到一个二维数组中,类型不一样。
2.1 定义格式:
数据类型 数组名[行数][列数];
int ages[5][6];
2.2 使用场景:
分组,1组里面又有多个数据的时候
float sccore1[5] = {67,89,100,34,56};
float scores2[5] = {90,89,34,5,6};
例如:
int a[2][3];
a[0]: a[0][0] a[0][1] a[0][2]
a[1]: a[1][0] a[1][1] a[1][2]
可以套用循环嵌套
#include<stdio.h>
int main(void)
{
// 使用循环嵌套写
int i,j;
int a[2][3];
// 先构造行循环 0 ~ 1; i // 行 j // 列
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
// i j
a[i][j] = i * 10 + j;
}
}
for(i=0;i<2;i++)
{
// 一行开始
for(j=0;j<3;j++)
{
printf(" %d\t",a[i][j]);
}
// 一行结束了
printf("\n");
}
return 0;
}
巩固训练:
//定义一个数组2行3列,输入数据,计算每一行的和
#include<stdio.h>
//定义一个数组2行3列,输入数据,计算每一行的和
int main(void)
{
int a[2][3];
int i,j;
int sum;
for(i=0;i<2;i++)
{
for(j=0;j<3;j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=0;i<2;i++)
{
sum = 0;
for(j=0;j<3;j++)
{
printf("%d ",a[i][j]);
sum = sum + a[i][j];
}
printf("和是:%d",sum);
printf("\n");
}
return 0;
}