#C 语言# 8.数组

萝らか妹 提交于 2020-03-01 07:38:21

数组引入


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和6(最后的,可有可无)
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.二维数组的遍历
在这里插入图片描述

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!