数组引入
1.记录很多数
定义数组——类型 名字[长度];
int number[100];
输入数字——
scanf(“%d”, &number[i]);
\\scanf输入
number[cnt] = x;
\\赋值输入【cnt指的是在数组中的任意位置】
遍历数组——
for (i=0;i<cnt;i++){
if( number[i]>average){
printf("%d",number[i])
}\\使用数组中的元素
}
数组的定义
1.定义数组——<类型> 变量名称[元素数量];
int grades[100];
double weight[20];
• 元素数量必须是整数*【必须要提前确定的——在C99以前】*
• 如何理解——容器
- 其中所有的元素具有相同的数据类型;
- ⼀旦创建,不能改变⼤⼩***【数组含有多少数字】***
- (数组中的元素在内存中是连续**依次排列***的)
- 可以出现在赋值的左边或右边:
• a[2] = a[1]+6;
• *在赋值左边的叫做左值
2.数组的单元——数组类型的一个变量
下标或者索引——[]中的数字,下标是从0开始计数的
最大的下标是数组个数减1!!
[0,最大下标 - 1]
grades[0]
grades[99]
编译器是不会检查数组下标是否越界——导致的错误提示:segmentation fault
3.能不能创建一个长度为0的数组?
int a[0];
可以有但是没用途
数组的应用——统计个数
#include <stdio.h>
main()
{
int count [10];
int x;
int i;
for(i=0;i<10;i++){
count[i]=0;
}\\初始化count数组
scanf("%d",&x);
while(x!=-1){
if(x>=0 && x<=9){
count[x] ++;\\数组参与运算
}
scanf("%d",&x);
}\\连续不断的计数
for (i=0;i<10;i++){
printf("%d:%d\n",i,count[i]);
}\\遍历数组输出
return 0;
}
优化——提早定义10
const int number = 10;
遍历数组
一般使用for循环——循环变量i从0到小于数组的长度【少用小于等于】
• 常⻅错误:
• 循环结束条件是<=数组⻓度,或;
• 离开循环后,继续⽤i的值来做数组元素的下标!
数组的运算
1.数组集成初始化(定义的时候顺便初始化)
类型 名称[ ] = {单元,单元,……};
- 直接用⼤括号给出数组的所有元素的初始值,不需要给出数组的大小,编译器替你数数;
- 如果给了数组单元的个数,那么初始化赋值的个数要小于数组单元个数;
2.数组集成初始化的定位赋值【Only for C99】
3.数组大小
sizeof函数给出数组占据内容的大小字节
sizeof(number[0]);
sizeof(number);
sizeof(number)/sizeof(number[0];\\单个数字的字节长度
4.数组整体不能赋值
把所有元素交给另一个数组必须采用遍历数组
数组的搜寻
👉定义一个新的搜寻函数——输入一个数字,输出对应的一个下标,如果没有就-1输出
int search (int key,int a[],int length);
\\key是要找的数字,a[]是数组,length是确定数组的长度【来控制查找的次数】
int search(int key,int a[],int length)
{
int ret=-1;
int i;
for(i=0; i<length;i++){
if(a[i]==key){
ret=i;
break;
}
}
return ret;
}
注意——数组作为函数的参数时:
• 不能在[]中给出数组的⼤⼩
• 不能再利⽤sizeof来计算数组的元素个数!
在做函数参数的时候必须是要用另外一个参数传入数组的大小
例题——求素数表的优化
从:从2到x-1全部历遍整除
到剥去偶数部分
到2到平方根
到用已知的素数来整除【问题是要做一个已经有的素数表】
二维数组
1.定义
int a[x][y];
相当于定义矩阵——x行y列的矩阵
a[i,j]和二维数组不一样——,是运算,所以等价于a[j]
2.二维数组的初始化
int a[][5] = {
{0,1,2,3,4},
{2,3,4,5,6,7,3,5,6),
};
要求——
• 列数是必须给出的,⾏数可以由编译器来数
• 每⾏⼀个{},逗号分隔
• 最后的逗号可以存在,有古⽼的传统
• 如果省略,表⽰补零
• 也可以⽤定位(*C99 ONLY)
3.二维数组的遍历
来源:CSDN
作者:celeste0730
链接:https://blog.csdn.net/celeste0730/article/details/104570955