知识应用的层次
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)类型说明符
? ? ? ? ? ? ? ? 整型、浮点型、字符型? // 这三种叫基本数据类型
? ? ? ? (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');
}