目录
1.什么是数组
数组是相同类型对象的集合,数组的访问是借助下标,下标是从0开始的;数组的命名和存储如下图,我们创建了包含5个int型变量的数组
注意:不能出现即存在int类型,又存在double类型 ;元素个数必须是常量~
2.数组的输入和输出
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for(i = 0; i < 5; i++)
{
scanf("%d", &arr[i]);
}///一维数组的输入
for (i = 0; i < 5; i++)
{
printf("%d ", arr[i]);
}//输出
return 0;
}
2.1数组的元素个数
3.打印数组地址
内存单元的大小是一个字节;对内存的编号我们叫地址,对地址的存储采用的是16进制;
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int arr[5] = { 1,2,3,4,5 };
int i = 0;
for (i = 0; i < 5; i++)
{
printf("&arr[%d]=%p ",i, &arr[i]);//%p是取地址操作符
printf("\n");
}
return 0;
}
4.数组的初始化
分为不完全初始化和完全初始化,像int[5]={1,2,3,4,5}就是完全初始化
不完全初始化有
注意:在对数组访问时不能越界
5.二维数组的初始化和内存的排列
二维数组可以由小学学过的矩阵来引入
一维和二维的对比
二维及其以上的称为多维数组;
也同样分为完全和不完全
不完全初始化
注意
注意:可以省略行,但是不能省略列,还有二维数组在内存也是连续存放的
二维数组的输入和输出方式和一维的一样~这里就不多介绍
6.C99变长数组
C99变长数组允许我们使用变量规定数组的大小;这样就不会浪费空间
因为取决与我们设的变量的值,所以只有在程序运行时数组的长度才会被确定
变长数组不能初始化;VS编译器不支持C99变长数组
7.数组的应用
(一)打印100~200的素数
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<math.h>
int main()
{
int arr[200] = { 0 };
int i=0;
int j=0;
int count1 = 0;//统计素数的个数
int count2 = 0;//统计循环次数
for (i = 2; i < 200; i++)//1既不是素数也不是合数
{
arr[i] = 1;//将数组内的所有值都初始化为1
}
for (i = 2; i < 200; i++)
{
if (arr[i])
{
if (i > 100 && i < 200)
{
printf("%d ", i);
count1++;
}
}
for (j = i * i; j < 200; j += i)
{
arr[j] = 0;
count2++;
}
}
printf("\n素数的个数为:%d\n", count1);
printf("\n循环次数为:%d\n", count2);
return 0;
}
(二)二分查找(折半查找)
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main()
{
int left = 0;
int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
int key=0;
printf("请输入你要查找的数字1~10之间:");
scanf("%d", &key);
int right = sizeof(arr) / sizeof(arr[0])-1;
int mid = 0;//记录中间元素的下标
int find = 0;
while (left <= right)
{
mid = (left + right) / 2;
if (arr[mid] > key)
{
right = mid - 1;
}
else if (arr[mid] < key)
{
left = mid + 1;
}
else
{
find = 1;
break;
}
}
if (1 == find)
{
printf("找到了下标是%d\n", mid);
}
else
{
printf("找不到\n");
}
return 0;
}