我要成为嵌入式高手之1月23日第八天!!
—————————————————————————————
学习笔记
1. 有目标
2. 有标准
1)思路
2)能转换成代码流程
3)代码能不能写出来
4)写出来之后,正确性
3. 有行动
4. 想法——现实:多练
--------------------------------------------------------
排序
哪个排序好?
评判标准:算法稳定性 和 效率
时间:时间复杂度---CPU执行代码(指令)的数量 = 消耗的时间(不是一种具体时间,而是一种趋势)O(n) // 大O计法
3. 插入排序
思想:(在有序的序列中)找一个合适的位置,插入
#include <stdio.h>
//思想:拿数放入合适的位置
int main()
{
int n,i,j,t;
printf("Input how many numbers? ");
scanf("%d",&n);
int a[n];
int b[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; ++i)//拿数
{
t = a[i];
j = i;//准备要放的位置
while (j > 0 && b[j-1] > t)//当j>0且前面的数大于t时
{
b[j] = b[j-1];//前面的值往后挪
--j;//再与更前面一个数进行比较
}
b[j] = t;//如果到第一个位置(0)或者该数比前一个数大,就插入在该位置
}
printf("new: ");
for (j = 0; j < n; ++j)//输出排序好的数
{
printf("b[%d] = %d ",j,b[j]);
}
putchar('\n');
return 0;
}
查找
二分查找(折半查找)
前提:数据必须有序
#include <stdio.h>
int main()
{
int i,j,n,t;
printf("Input how many numbers? ");
scanf("%d",&n);
int a[n];
int b[n];
for (i = 0; i < n; ++i)
{
scanf("%d",&a[i]);
printf("a[%d] = %d ",i,a[i]);
}
putchar('\n');
for (i = 0; i < n; ++i)
{
t = a[i];
j = i;
while (j > 0 && b[j-1] > t)
{
b[j] = b[j-1];
--j;
}
b[j] = t;
}
for (j = 0; j < n; ++j)
{
printf("b[%d] = %d ",j,b[j]);
}
putchar('\n');
int k ,mid;
int begin = 0;
int end = n-1;
printf("Input numbers to find: ");
scanf("%d",&k);
while (begin <= end)
{
mid = (begin + end) /2;
if(b[mid] > k)
{
end = mid - 1;
}else if (b[mid] < k)
{
begin = mid + 1;
}else
{
break;
}
}
if (begin <= end)
{
printf("k = b[%d] = 5\n",mid);
}else
{
printf("NULL\n");
}
return 0;
}
一维字符型数组:
字符数据:
unsigned char s[10] ;
unsigned char s[10] = {'h','e','l','l','o'}; // 数组角度看
" hello " // 字符串常量,本质是存储的时候,是按照字符数组的形式存储
-------> unsigned char s[10] = {'h','e','l','l','o','\0'}; // 数组角度看
'\0' 对字符串来说叫做结束标志,字符串要求必须以\0作为结束标志
最主要的作用:想处理字符串数据
注意:
1、字符串——更关注的是字符串整体,而不是单个字符
2、字符串的结束标志比较重要,表示字符串结束
3、处理字符串时,常常使用结束标志进行判断(while(s[i] != o)putchar(s[i]))
puts() :输出字符串
gets() :输入字符串
s2 = s1; // c语言中不能整体赋值
字符串拷贝:
strcpy ( 目标字符串,原字符串) 把原字符串拷贝到目标字符串
作业
1. 字符串拼接
流程图:
#include <stdio.h>
int main()
{
char s1[20] = "hello";
char s2[20] = "world";
int i;
int j = 0;
while (s2[j] != '\0')
++j;
// printf("j = %d",j);
for (i = 5; i < 6+j; ++i)
{
s1[i] = s2[i-5];
}
puts(s1);
return 0;
}
2、从终端输入一个n 将数组 int a[9] = {1, 2, 3, 4, 5, 6, 7, 8, 9} 完成如下变化,并打印,
操作方
n:1 9 1 2 3 4 5 6 7 8
n:2 8 9 1 2 3 4 5 6 7
n:3 7 8 9 1 2 3 4 5 6
流程图:
#include <stdio.h>
int main()
{
int a[9] = {1,2,3,4,5,6,7,8,9};
int n,t,j,i;
scanf("%d",&n);
printf("n:%d ",n);
for (j = 0; j < n; ++j)
{
i = 8;
int t = a[i];
for (i = 8; i > 0; --i)
{
a[i] = a[i-1];
}
a[0] = t;
}
for (i = 0; i < 9; ++i)
{
printf("%d ",a[i]);
}
putchar('\n');
return 0;
}