快和我一起来认识数组吧~

本文详细介绍了数组在C语言中的概念、输入输出方法、元素个数、初始化、二维数组、内存排列、C99变长数组以及数组在素数查找和二分查找中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1.什么是数组

2.数组的输入和输出

 2.1数组的元素个数

 3.打印数组地址

 4.数组的初始化

注意:在对数组访问时不能越界

 5.二维数组的初始化和内存的排列

6.C99变长数组

7.数组的应用


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;
}

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值