5.C语言数组

一.数组的概念

二.一维数组的使用

cpp 复制代码
int main()
{
	int data[10] = {1,2,3,4,5,6,7,8,9,10};//完全初始化

	int data2[10] = { 1,2,3,4,5 };//不完全初始化,剩余的元素默认初始化为0
	//int data3[3] = { 1,2,3,4 };//err
	
	int data4[5] = { 1,2,3,4,5 };
	int data5[] = { 1,2,3,4,5 };//数组如果初始化了,也可以省略掉数组的小制定,编译器会根据数组的初始化内容
	//来确定数组的真实大小

	return 0;
}
cpp 复制代码
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };
	//            0 1 2 3 4 5 6 7 8 9
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("%d ", arr[i]);
	}

	//printf("%d\n", arr[6]);
	//printf("%d\n", arr[9]);

	return 0;
}
cpp 复制代码
//%p 是打印地址的

int main()
{
	int arr[10] = { 0 };
	int i = 0;
	for (i = 0; i < 10; i++)
	{
		printf("&arr[%d] = %p\n", i, &arr[i]);//& - 取地址操作符
	}
	return 0;
}

//
//一维数组在内存中是连续存放的
//随着数组下标的增长,地址是由小到大变化的
//
cpp 复制代码
int main()
{
	//int a = 10;
	////sizeof 计算的是变量或者类型的长度,单位是字节

	//printf("%d\n", sizeof(a));//4
	//printf("%d\n", sizeof(int));//4


	int arr[5] = { 0 };
	printf("%d\n", sizeof(arr));//40 - 计算的是数组的总大小,单位是字节
	printf("%d\n", sizeof(arr[0]));
	printf("%d\n", sizeof(arr) / sizeof(arr[0]) );

	return 0;
}
cpp 复制代码
int main()
{
	int arr[8] = { 0 };
	int i = 0;
	int sz = sizeof(arr) / sizeof(arr[0]);
	for (i = 0; i < sz; i++)
	{
		printf("&arr[%d] = %p\n", i, &arr[i]);//& - 取地址操作符
	}
	return 0;
}

三.二维数组

cpp 复制代码
int main()
{
	//int arr[3][5] = {1,2,3,4,5,6,7};//不完全初始化
	////依次初始化每一行,当不够的时候,剩余的元素初始化为0
	//int arr2[3][5] = { 0 };

	//int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};

	//int arr[3][5] = { {1,2},{3,4},{5} };

	//二维数组如果初始化,行是可以省略的,但是列不能省略
	int arr[][5] = {1,2,3,4,5,6,7};

	return 0;
}
cpp 复制代码
int main()
{
	int arr[3][5] = { 1,2,3,4,5, 2,3,4,5,6,3,4,5,6,7 };
	printf("%d\n", arr[1][3]);
	printf("%d\n", arr[2][4]);

	return 0;
}
cpp 复制代码
int main()
{
	int arr[3][5] = { 0 };
	//输入数据
	int i = 0;//控制行
	for (i = 0; i < 3; i++)
	{
		int j = 0;
      //控制的是列
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &arr[i][j]);
			printf("%d ", arr[i][j]);
		}
	}

	//输出数组的所有元素
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
		}
		printf("\n");
	}
	return 0;
}
cpp 复制代码
int main()
{
	int arr[3][5] = { 0 };
	//输入数据
	int i = 0;//控制行
	for (i = 0; i < 3; i++)
	{
		int j = 0;
      //控制的是列
		for (j = 0; j < 5; j++)
		{
			scanf("%d", &arr[i][j]);
			printf("%d ", arr[i][j]);
		}
	}

	//输出数组的所有元素
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
		}
		printf("\n");
	}
	return 0;
}
cpp 复制代码
int main()
{
	int arr[3][5] = { 0 };
	int i = 0;
	for (i = 0; i < 3; i++)
	{
		int j = 0;
		for (j = 0; j < 5; j++)
		{
			printf("&arr[%d][%d] = %p\n", i, j, &arr[i][j]);
		}
	}

	return 0;
}

四.C99中的变长数组

cpp 复制代码
#define M 10
int main()
{
	int arr[M];

	return 0;
}

五.题目

cpp 复制代码
#include <string.h>
#include <windows.h>
#include <stdlib.h>

int main()
{
	char arr1[] = "welcome to world!!!!!!";
	//[welcome to world!!!!!!\0]
	// 0                   
	char arr2[] = "####################";
	int left = 0;
	int right = strlen(arr1)-1;

	while (left<=right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//睡眠1000毫秒
		system("cls");//system函数是库函数,执行系统指令,cls是清理控制台屏幕信息
		left++;
		right--;
	}
	printf("%s\n", arr2);

	return 0;
}

strlen:算的是我们对应的数组\0之前的元素(不含\0),sizeof(arr1)/sizeof(arr10):算的是数组的长度

cpp 复制代码
int main()
{
	char arr1[] = "welcome to world!!!!!!";
	//[welcome to world!!!!!!\0]
	// 0                   
	char arr2[] = "####################";
	int left = 0;
	//int right = strlen(arr1) - 1;
	int sz = sizeof(arr1) / sizeof(arr1[0]);//
	int right = sz - 2;

	while (left <= right)
	{
		arr2[left] = arr1[left];
		arr2[right] = arr1[right];
		printf("%s\n", arr2);
		Sleep(1000);//睡眠1000毫秒
		system("cls");//system函数是库函数,执行系统指令,cls是清理控制台屏幕信息
		left++;
		right--;
	}
	printf("%s\n", arr2);

	return 0;
}
cpp 复制代码
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序的数组
	//在数组中查找k - 7
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);
	int i = 0;
	for (i = 0; i < sz; i++)
	{
		if (arr[i] == k)
		{
			printf("找到了, 下标是%d\n", i);
			break;
		}
	}
	if (i == sz)
	{
		printf("找不到\n");
	}

	return 0;
}

但是遍历的效率太低了

二分查找可以看下面的链接(算法对新手较难):

https://blog.csdn.net/weixin_60668256/article/details/154618498?fromshare=blogdetail&sharetype=blogdetail&sharerId=154618498&sharerefer=PC&sharesource=weixin_60668256&sharefrom=from_link

cpp 复制代码
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序的数组
	//在数组中查找k - 7
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);
	
	int left = 0;
	int right = sz - 1;

	while (left<=right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] == k)
		{
			printf("找到了,下标是:%d\n", mid);
			break;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}
	//
	if (left > right)
	{
		printf("找不到\n");
	}

	return 0;
}

方式二.

cpp 复制代码
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9,10 };//升序的数组
	//在数组中查找k - 7
	int k = 0;
	scanf("%d", &k);
	int sz = sizeof(arr) / sizeof(arr[0]);

	int left = 0;
	int right = sz - 1;
	int flag = 0;
	while (left <= right)
	{
		int mid = (left + right) / 2;
		if (arr[mid] == k)
		{
			printf("找到了,下标是:%d\n", mid);
			flag = 1;
			break;
		}
		else if (arr[mid] < k)
		{
			left = mid + 1;
		}
		else
		{
			right = mid - 1;
		}
	}
	if (flag == 0)
		printf("找不到了\n");

	return 0;
}
相关推荐
估值探索者2 小时前
【Python量化选股流水线 #04】选股器好不好用?「昨日候选→今日表现」回看验收
开发语言·python·股票数据·股票数据api接口
爱喝热水的呀哈喽3 小时前
HEJIAN RESEARCH
开发语言·matlab
白露与泡影3 小时前
后端 Java 面试核心八股汇总|高频面试题 + 解析,覆盖基础到进阶
java·开发语言·面试
xifangge20254 小时前
基于 JavaScript 实现 CNC 数控切削参数与螺纹公差纯前端核算引擎
开发语言·前端·javascript
“AI国潮设计-小江”4 小时前
【AIGC实战】Python+SDXL批量生成「潮汕英歌舞冰淇淋蛋糕&红桃粿咖啡」IP,固定角色形象批量出甜品商业效果图
开发语言·人工智能·python·prompt·aigc
鱼很腾apoc4 小时前
【MySQL】第4期 用户管理与 C 语言连接编程详解
linux·服务器·c语言·mysql·connector/c
\光辉岁月/4 小时前
3.包装类
java·开发语言·包装类
衍玊4 小时前
多路转接原理与应用
c++
FRing035 小时前
JavaScript入门到精通二十四(正则表达式、元字符、修饰符)
开发语言·前端·javascript·正则表达式
西索斯coding5 小时前
Grok 4.7 调用一直 401 怎么办?不是 Key 过期,是 Authorization 头格式问题——排查全流程 + 修复示例
服务器·开发语言·ai·php