当前位置: 首页 > article >正文

嵌入式课程day10-C语言数组

目录

七、数组

7.1数组是什么?

7.2数组的使用

7.3定义数组

7.4数组初始化

7.5冒泡排序

7.6二分法查找


七、数组

7.1数组是什么?

存储多个同种类型的数据  ,方便数据处理

7.2数组的使用

先定义再使用

7.3定义数组

存储多少数据   数据的数据类型  数组名

元素:数组中数据可以统称为元素。        

  >> 元素类型 数组名[元素个数];

数组下标:定义完数组后就自动有了。从0开始  ~  元素个数 - 1  , 不要超标

7.4数组初始化

定义数组就给空间数据

int a[5] = {1,6,8,19,20};

int b[5] = {1,2};        // 初始化的时候没有赋值空间默认补0  {1,2,0,0,0}

 int c[5] ={1,2,4,5,67,8,9,9,10};   // {1,2,4,5,67}

// 省略个数的初始化 -- 只有在初始化可以省略个数,定义的时候不可以省略 

int a[] = {1,3};   // 2个int型空间

int a[];      // 1个空间都没有

int a[] = {}; // 1个空间都没有

int a[] = {0}; // 1个int 

练习1:int a[] = {1,2,3,4,5,6,7,8,9,10};

// 计算偶数项(下标偶数)的和和奇数项(下标奇数)的和

//将数组颠倒过来

#include<stdio.h>
int main() {
	int a[] = { 1,2,3,4,5,6,7,8,9,10 };
	int i;
	int sum1 = 0, sum2 = 0;
	for ( i = 0; i < 10; i += 2){
		sum1 += a[i];
		sum2 += a[i+1];	
	}
	printf("奇数项和%d\n", sum1);
	printf("偶数项和%d\n", sum2);
	int b;
	for (i = 0; i < 10/2; i++)
	{
		b = a[i]; 
		a[i] = a[9 - i];
		a[9 - i] = b;
	}
	for (i = 0; i < 10; i++)
		printf("%d ", a[i]);
}

7.5冒泡排序

冒泡排序-- - 数组里面的数据是乱序的。
冒泡排序规则:
一轮排序确定一个数据的位置。
n个数需要比较 n - 1轮

每一轮里面 相邻的(下标相邻) 两个数据进行比较
每一轮里面比较次数:  数据个数 - 当前是第几轮。

冒牌排序思路:
1、准备数组 -- 有乱序数据
2、数组里面的数据个数
3、冒泡排序逻辑

0 ~< n - 1  	  -- - i   循环
{
// 第i轮的排序

0 ~< 数据个数 - 1 - i  -- j 比较次数
    {
    // 相邻的两个数据-数组中的数据  -- 根据 规则确定要不要交换位置
    // 数组名[j]--前  和 数组名[j+1] --- 后

    // 从小到大  什么时候交换数组名[j] 和 数组名[j+1]位置
    // 数组名[j] > 数组名[j+1] ---交换 数组名[j] 和 数组名[j+1]里面的数值

    // 从大到小  什么时候交换数组名[j] 和 数组名[j+1]位置
    // 数组名[j] < 数组名[j+1] --- 交换 数组名[j] 和 数组名[j+1]里面的数值
    }
}

完成代码:

int a[] = { 10,40,67,8,29,3,100,6,7,89 };
int b = sizeof(a) / sizeof(a[0]);
int i, j, z, count;
for (i = 0; i < b - 1; i++)
{
	for (j = 0; j < b - i - 1; j++)
	{
		if (a[j] > a[j + 1])
		{
			count = a[j];
			a[j] = a[j + 1];
			a[j + 1] = count;
		}
	}
}
for (i = 0; i < b; i++)
{
	printf("%d ", a[i]);
}

7.6二分法查找

二分查找:必须是有序的数组 ,在有序的数组中查找某一个数据存不存在。
存在就输出 下标, 不存在就输出不存在。

int a;
scanf("%d", &a);

int arr[] = { 2,9,20,46,78,90,130,205,306 };

二分查找思路:
准备一个有序的数组 -- 从小到大
查找的数据 -- 目标数据

计算数组数据个数

// 准备下标
left = 0;
right = 数据个数 - 1

while (1)
{
	// 设置查不到的终止条件
	if (right < left)
	{
		printf("找不到");
		break;
	}

	mid = (left + right) / 2;

	数组名[mid] > 目标数据
	{
		right = mid - 1;
	}

		数组名[mid] < 目标数据
	{
		left = mid + 1;
	}


		数组名[mid] == 目标数据
	{
		输出 mid
		结束查找
	}

}

代码:

#include <stdio.h>
#include <string.h>
int main() {
	int arr[] = { 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19 };
	int findnum;
	scanf("%d", &findnum);
	int left = 0, right = 20 - 1;
	while (1) {
		if (right < left) {
			printf("找不到");
			break;
		}
		int mid = (left + right) / 2;
		if (arr[mid] > findnum)
			right = mid - 1;
		if (arr[mid] < findnum)
			left = mid + 1;
		if (arr[mid] == findnum) {
			printf("找到了他在a[%d]", mid);
			break;
		}
	}
	return 0;
}


http://www.kler.cn/a/388611.html

相关文章:

  • C++ 数组与结构 编程练习
  • CommandLineParser 使用
  • 以色列支付龙头遭DDoS攻击,各地超市加油站等POS机瘫痪
  • IEC60870-5-104 协议源码架构详细分析
  • 一文详解java的数据类型
  • 小面馆叫号取餐流程 佳易王面馆米线店点餐叫号管理系统操作教程
  • 使用react+copy-to-clipboard封装双击复制组件
  • vue3 传值的几种方式
  • 机器学习(五)——支持向量机SVM(支持向量、间隔、正则化参数C、误差容忍度ε、核函数、软间隔、SVR、回归分类源码)
  • FPGA 第5讲 点亮你的LED灯
  • Windows下AMD显卡配置pyTorch记录
  • 云计算基础知识
  • Spring Boot架构下的工程认证计算机课程管理
  • 7.4、实验四:RIPv2 认证和触发式更新
  • 适用于 Windows 11/10 电脑 的 13 个最佳文件恢复软件
  • window下安装rust 及 vscode配置
  • 《一本书讲透 Elasticsearch》京东评论采集+存储+可视化全 AI 实现
  • 《数据结构》--二叉树【上】
  • ubuntu下安装 git 及部署cosyvoice(2)
  • 【开源社区】ELK 磁盘异常占用解决及优化实践
  • 如何平滑切换Containerd数据目录
  • android 适应CA证书
  • spring-security(两种权限控制方式)
  • Qt 界面无边框 拖拽移动 问题处理:setMouseTracking(true)无法跟踪鼠标事件
  • <项目代码>YOLOv8 玉米地杂草识别<目标检测>
  • unity3d————四元数,欧拉角的互相转换的初步了解