首页 > 其他分享 >嵌入式课程day10-C语言数组

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

时间:2024-11-08 16:44:41浏览次数:3  
标签:int mid 嵌入式 -- 数组名 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;
}

标签:int,mid,嵌入式,--,数组名,day10,数组,C语言,数据
From: https://blog.csdn.net/m0_56934903/article/details/143624962

相关文章

  • VS Code/Code-Runner编译C语言遇到undefined reference to XXX的一种解决办法
    背景用VSCode编译一个C语言编写的项目文件,这个项目除main文件外还有些被引用的C文件,如果不做相关配置的话,运行会报错:即编译时找不到被引用的这些文件,从而报错。解决办法我是使用code-runner这个插件跑的,所以这里只写关于用这种方式运行代码的解决办法。首先查看.vscode/配......
  • 二叉树 (王道数据结构 C语言版)
    2004.11.04计算一颗给定二叉树的所有双分支节点个数编写把一个树的所有左右子树进行交换的函数求先序遍历中第k个结点的值(1<=k<=二叉树中的结点个数)#include<bits/stdc++.h>#defineintlonglong#defineendl'\n'usingnamespacestd;typedefstructBitnode{......
  • 用C语言实现汉诺塔问题(第四天:函数递归)【每天进步一点点-小白学习笔记】
    0 前言        最近比较忙,到现在才有时间更新博客,这两天刚好学到了函数递归,这是个很有趣的知识,为什么说有趣呢?因为递归这个东西吧,很多人都对它又爱又恨。爱在递归不仅可以轻松简化代码,增加可读性,还能将一些很难解决的算法问题轻松解决,但它又大大加大了程序复杂度,既......
  • 2个月搞定计算机二级C语言——真题(10)解析qg
    合集-3个月搞定计算机二级C语言(6)1.2个月搞定计算机二级C语言——真题(5)解析10-292.2个月搞定计算机二级C语言——真题(6)解析10-303.2个月搞定计算机二级C语言——真题(7)解析11-034.2个月搞定计算机二级C语言——真题(8)解析11-035.2个月搞定计算机二级C语言——真题(9)解析11-06:Flow......
  • c语言入门学习这一篇就够了-知识点总结(三万字二级必看)
    C语言   C语言是中高级语言的代表之一,它是所有现代编程语言的基石,包括C++、Java、C#、Python、JavaScript、Swift等。C语言是学习其他编程语言的基础,因为它提供了对系统底层的精确控制,这使得它在开发操作系统、驱动程序、嵌入式系统、高性能计算等领域中有着不可替代的......
  • (C语言)内存函数
    目录1)memcpy 1)memcpy的模拟实现2)memmove2)memmove的模拟实现3)memset4)memcmp1)memcpymemcpy是内存拷贝函数,其不同于strncpy在于其能拷贝任意数组;形式:void*memcpy(void*destinatoin,char*source,size_t num);destination是目标空间地址,source是源空间地址;num是拷贝......
  • 符合ISO26262的零部件级的软件测试解决方案:目前功能安全零部件测试的困难|软件单元、
    引言在功能安全的开发、测试过程中概念阶段的活动一般都是由主机厂负责,而从系统开发到单元实现则是由供应商负责,对于供应商所做的一系列测试通常称为零部件级测试。根据ISO26262功能安全标准的划分,功能安全在零部件阶段的测试包括:软件单元测试、软件集成测试、硬件集成测......
  • 重温c语言之,7天开整,就是随便的写写,第八天
    一:函数1、递归题目:求n的阶乘(不考虑溢出)上代码1#include<stdio.h>2intfactorial(intn){3if(n>1){4returnn*(factorial(n-1));5}6else7{8return1;9}10}11#include<stdio.h>12in......
  • C语言入门第二天常量
    一:常量1:整形常量a:八进制开头是0开头例如06434b:十六进制开头是0x开头例如0xd1cc:代码展示其中%d表示十进制,%o表示八进制,%x表示十六进制。2:浮点类型a:浮点常量又被称为实数,一般含有小数部分。b:float类型小数点的精度为6位c:想printf输出为浮点类型用%f;d:代码展示......
  • 2个月搞定计算机二级C语言——真题(10)解析
    1.前言本篇我们讲解2个月搞定计算机二级C语言——真题102.程序填空题2.1题目要求2.2提供的代码#include<stdio.h>#pragmawarning(disable:4996)doublefun(doublex[],intn){ inti,k=0; doubleavg=0.0,sum=0.0; for(i=0;i<n;i++) avg......