我要成为嵌入式高手之1月22日第七天!!

发布时间:2024年01月23日

学习笔记

知识应用的层次

1、耐心很重要(一件事干10次)

2、进步呈螺旋式上升

---------------------------------------------------------------------------------------

代码对齐:单行对齐—命令模式下 按两下等号键

(ubantu)多行对齐—shift +v先选中,然后按一下等号键

? ? ? ? ? ? ? ? ? 范围对齐— 起始行 = 结束行

? ? ? ? ? ? ? ? ? 全局对齐— gg(回到开头)= G

----------------------------------------------------------------------------------------

一、数组

主要研究:1、一维数组

? ? ? ? ? ? ? ? ? 2、二维数组

? ? ? ? ? ? ? ? ? 1、整型

? ? ? ? ? ? ? ? ? 2、字符型

概念:

一组相同类型的数据的集合

本质:相同类型变量的集合,也是一种数据类型(由基本类型构造而来)

类型:大小、内存

????????① int a[10]

????????int[10] a --->?计算机表达的形式? // a所代表的类型是 int[10]

? ? ? ? ? ? ? ????????// a数组名 也叫作 标识符

? ? ? ? ? ? ? ????????// a --- 把名字去掉,剩下的就是名字对应的数据类型

????????② int a[10]; // 数组在内存空间上的特点

数组的给值:

? ? ? ? ? ? ? ? ? ?1)初始化:?{ }表示初始化----初始化器

????????????????????????int a[10] = {1,2,3,4,5,6,7,8,9,10}; // 全部初始化

? ? ? ? ? ? ? ? ? ? ? ? int a[10]?= {1,2,3,4,5} ; // 部分初始化(依次给值,其余为零)

? ? ? ? ? ? ? ? ? ? ? ? int a[10] = { } ; // 都初始化为0

????????????????????????int a[10] = {0} ; // 都初始化为0

? ? ? ? ? ? ? ? ? ? ? ? 数组不初始化 --- 数组中为垃圾值? ? ? ? ? ??

? ? ? ? ? ? ? ? ? ? ? 2)数组元素的访问:a[下标]; // 0开始的

? ? ? ? ? ? ? ? ? ? ? 3)赋值的方式---给数组中输入一些值(初始化、赋值、输入)

? ? ? ? ? ? ? ? ? ? ? ? ?数组赋值要一个一个值给到

数组下标:

? ? ? ? ? ? ? ? ? ?下标本质上是 偏移量(针对首元素所在的地址位置的偏移 --- 指针运算)

? ? ? ? ? ? ? ? ? ?a[?i ] // 下标运算 --- 本质实际是一个地址的运算

? ? ? ? ? ? ? ? ? ?a[ i ] <=> i [ a ] // 含义一样

? ? ? ? ? ? ? ? ? ?数组下标可以不写(长度可以省略)但是必须要有初始化的值

数组特点:

? ? ? ? ? ? ? ? 1)连续性:--- 一片空间连续

? ? ? ? ? ? ? ? 2)有序性:--- 元素依次存储

? ? ? ? ? ? ? ? 3)单一性:--- 单一类型的元素

数组的越界问题:

? ? ? ? ? ? ? ? 1、不是语法问题 --- 编译器不报错

? ? ? ? ? ? ? ? 2、程序员自己小心
?

1.1 一维整型数组

语法:

? ? ? ? 类型说明符 数组名 [常量表达式]

? ? ? ? (1)类型说明符

? ? ? ? ? ? ? ? 整型、浮点型、字符型? // 这三种叫基本数据类型

? ? ? ? (2)数组名

? ? ? ? ? ? ? ? 代表着数据集合(内存空间的名字)

? ? ? ? ? ? ? ? 数据类型角度

? ? ? ? ? ? ? ? a代表整个数组类型

? ? ? ? ? ? ? ? a代表数组首元素的地址

? ? ? ? (3)[ ]? // 表示此时定义的是一个数组

? ? ? ? (4)常量表达式:表示数组的程度 —— 变量的个数

????????eg:

????????int array[5]; // 定义了一个数组,这个数组中放了5个int型的变量

排序:

? ? ? ? 学习的标准:熟练到形成肌肉记忆、算法过程要清楚、代码为啥那么写

? ? ? ? 按一定的顺序排列(升序、降序)

????????1、选择排序:

? ? ? ? ? ? ? ? 思想:为合适的位置选择一个合适的数

? ? ? ? 流程图

#include <stdio.h>

//思想:为合适的位置选择一个合适的数
int main()
{
    int n,i,j,t;
    int a[] = {};
    printf("Input how many numbers? ");
    scanf("%d",&n);

    for (i = 0; i < n; ++i)//输入n个数的数组
    {
        scanf("%d",&a[i]);
    }

    printf("low: ");
    for (i = 0; i < n; ++i)//打印原来顺序的数组
    {
        printf("a[%d] = %d ",i,a[i]);
    }
    putchar('\n');

    for (i = 0; i < n-1; ++i)//选位置,只需要选n-1个位置即可,最后一个位置只能是那个数
    {
        for (j = i+1; j<n; ++j)//选数,从第i个数起遍历找数,找最小的就是升序,找最大的就是降序
        {
            if (a[j] < a[i])
            {
                t = a[i];
                a[i] = a[j];
                a[j] = t;//进行交换,将小的数放在小的位置
            }
        }
    }//排序完成
    
    printf("new: ");
    for (i = 0; i < n; ++i)//输出排序好的数
    {
        printf("a[%d] = %d ",i,a[i]);
    }
    putchar('\n');

    return 0;
}

? ? ? ? 2、冒泡排序:

????????思想:相邻两个元素两两比较,小的放前,大的放后

流程图

#include <stdio.h>

// 思想:相邻两个元素两两比较,小的放前,大的放后
int main()
{
    int n,i,j,t;
    int a[] = {};
    printf("Input how many numbers? ");
    scanf("%d",&n);

    for (i = 0; i < n; ++i)//输入n个数的数组
    {
        scanf("%d",&a[i]);
    }
    
    printf("low: ");
    for (i = 0; i < n; ++i)//打印原来顺序的数组
    {
        printf("a[%d] = %d, ",i,a[i]);
    }
    putchar('\n');
//比一趟就能确定最后面一个数,只需要比n-1趟就能确定所有数
    for (j = 1; j < n; ++j) // 1~n-1,比了n-1趟,j代表趟数
    {
        for (i = 0; i < n-j; ++i) //内部过程受到外面第几趟的影响
        {
            if (a[i] > a[i+1])//判断相邻两个数的大小,小的放前,大的放后
            {
                t = a[i];
                a[i] = a[i+1];
                a[i+1] = t;// 对数进行交换
            }
        }
    }

    printf("new: ");
    for (i = 0; i < n; ++i)//输出排序好的数
    {
        printf("a[%d] = %d, ",i,a[i]);
    }
    putchar('\n');

    return 0;
}

? ? ? ? ? ? ? ?

作业

1.选择,冒泡排序 ---消化吸收,画流程图

? ? ? ? 如上

2.已知数组a[10]和b[10]中元素的值递增有序, 将两个数组合并为一个数组(有序)并完成打印。

????????

#include <stdio.h>

int main(void)
{
    int i,j,t;

    int a[10]={1,3,5,7,9,11,13,15,17,19};
    int b[10]={2,4,6,8,10,12,14,16,18,20};
    int c[20]={};

    for (i = 0; i < 10; ++i)
    {
        c[i]=a[i];
    }

    for (j = 0; j < 10; ++j)
    {
        c[i]=b[j];
        i++;
    }

    printf("low: ");
    for (i = 0; i < 20;++i)
    {
        printf("%d ",c[i]);
    }
    putchar('\n');

    for (j = 1; j < 20; ++j)
    {
        for (i = 0; i < 20-j; ++i)
        {
            if (c[i] > c[i+1])
            {
                t = c[i];
                c[i] = c[i+1];
                c[i+1] = t;
            }
        }
    }

    printf("new: ");
    for (i = 0; i < 20; ++i)
    {
        printf("%d ",c[i]);
    }
    putchar('\n');
}

文章来源:https://blog.csdn.net/weixin_71850179/article/details/135740094
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。