当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 嵌入式学习——掌握基础技术很重要

嵌入式学习——掌握基础技术很重要 时间:2022-05-26      来源:华清远见
所有的技术原理和本质都在基础技术上,只有基础技术才能让你上升到更高层次,在技术的世界里,量变无法导致质变,掌握基础技术及原理可以让自己推导答案和趋势。

 

C语言学习目标

 

掌握C语言的语法规则,数组,循环,函数,指针等。

 

要学会一些算法,比如冒泡排序,快速排序,递归等。

 

在学习的过程中理解什么是面向过程,为将来学习c艹,Java等面向对象语言做准备。

 

如何学习C语言

 

掌握基础知识,为将来进一步学习打下良好的基础

 

上机实践,通过大量的例题学习怎么设计算法,培养解题思路

 

养成良好的编程习惯,注释一定要写,不然一周后自己写的代码都不认识了

 

这三行代码作用

 

#include<stdio.h>//头文件

 

int main()//主函数,main函数程序的入口必有而且只能有一个

 

 

for (int i = 0; i < 10; i++) 

 

 

printf("%d\n", i);//这个输出函数不是C语言自带的,而是包含在库函数<stdio.h>里面

 

 

return 0;//将结果返回到函数调用处

 

 

怎么解决学习C语言过程中遇到的问题 

 

问题分析:对上级分配的工作要进行认真的分析,研究所给出的条件,分析最后应该达到的目标,找出解决问题的规律,选择解题的方法。 

 

设计算法:例如要解一个方程式,就要选择用什么方法求解,并且把求解的每一步清晰的写出来。

 

编写程序:根据得到的算法,用c语言编写出源代码,在写代码的过程中尽可能的添加注释。

 

编译源程序:对源程序进行编辑、编译和连接,得到可执行程序,如果编译不通过,根据报错提醒,解决报错。

 

运行程序、分析结果:能得到程序不一定意味着程序就是正确的,要对结果进行分析,看它是否合理。 

 

编写程序文档:许多程序是提供给别人使用的,提供给用户使用的程序,必须有说明书。内容包括:程序名称、功能、运行环境、程序的装入和启动、需要输入的数据,以及其他注意事项。 

 

c语言代码结构 

 

一个程序由一个或者多个源程序文件组成,一个规模较小的程序,往往只包括一个源程序文件,一个源程序文件包括3部分: 

 

1、预处理指令,由预处理得到的结果与程序其他部分一起,组成一个完整的、可以用来编译的最后的源程序,然后由编译程序对该源程序正式进行编译,才能得到目标程序。

 

2、全局声明,即在函数之外进行数据声明。 

 

3、函数定义,自己定义的函数

 

函数是c程序的主要组成部分 

 

1、程序的几乎全部工作都是由各个函数分别完成的,函数是c程序的基本单位,在设计良好的程序中,每个函数都用来实现一个或几个特点的功能. 

 

一个函数包括两部分

 

1、函数首部,即函数的第一行,包括函数名、函数类型、函数属性、函数参数、参数类型。 

 

2、函数体,包括声明部分和执行部分。

 

函数总是从main函数开始的

 

1、不管main函数在整个程序中的位置如何,main函数可以放在程序的开头,也可以放在程序的结尾,或在一些函数之前,或一些函数之后。

 

程序中对计算机的操作是由函数中的c语句完成的 

 

1、如赋值,输入输出数据的操作都是由相应的c语句实现。

 

在每个数据声明和语句的最后必须有一个分号

 

1、分号是c语句的必要组成部分。

 

C语言本身不提供输入输出语句 

 

1、输入和输出的操作是由库函数scanf和printf函数来完成。 

 

程序应当包含注释

 

1、一个好的、有使用价值的源程序都应当加上必要的注释,增加程序的可读性。

 

常量:在程序运行过程中,其值不能被改变的量称为常量。 

 

分为以下几类:

 

1、整型常量

 

2、实型常量

 

3、字符常量(分为普通字符和转义字符) 

 

4、字符串常量

 

5、符号常量 

 

变量:变量代表一个有名字的,具有特定属性的一个存储单元。 

 

常变量:c99允许使用常变量,常变量具有变量的基本属性只是不允许修改。 

 

#include<stdio.h>//头文件 

 

#define PI 3.14//属于常变量声明了PI的值是3.14,PI的值就不能改变 

 

int main()//主函数 

 

 

int number = 5;//number是个变量,5是个常量 

 

float number_2 = 1.234; 

 

double number_3 = 3.5678;//number_2和number_3属于实型变量,后面的值是常量 

 

char character = 'a';//character是字符变量,'a'是字符常量 

 

return 0; 

 

 

浮点类型 

 

1、单精度浮点类型:float

 

2、双精度浮点类型:double 

 

3、复数浮点型:float_comlex,double_comple,long long_comple  (编译系统为每一个float型变量分配4个字节,数值以规范化的二进制数指数形式存放在存储单元中)(double型为了扩大能表示的数值范围,用8个字节存储一个double型数据,可以得到15位有效数字) 

 

枚举类型:enum

 

字符和字符代码 

 

1、字母

 

2、数字 

 

3、专门符号 

 

4、空格符 

 

5、不能显示的字符 

 

字符变量 

 

1、字符变量是用类型符char定义字符变量 

 

整型变量    (注意:这里占多少个字节跟系统和编译器规定有关!可以在编译器上自己试试查看) 

 

1、基本型:类型说明符为int在内存中占2个字节或4个字节(vs2022中是4个字节) 

 

2、短整型:类型说明符为short int或short  (vs2022中是2个字节)

 

3、长整型:类型说明符为long int 一个long int型变量的值的范围是-2的31次方~2的31次方-1,即-2147483648~2147483647.,(vs2022中是4个字节) 

 

4、双长整型:long long int    (vs2022中是8个字节,这个是c99新增的类型) 

 

标识符:用来对变量、符号常量名、函数、数组、类型等命名的有效字符序列统称为标识符。 

 

c语言规定标识符只能由字母、数字和下划线3种字符组成,且第1个字符必须为字母或下划线。

 

C语言%求余

 

#include<stdio.h> 

 

int main() 

 

 

int num1, num2;

 

num1 = 4;

 

num2 = 3;//如果后一个数比前一个大,求余的值就还是前一个数 

 

printf("两数求余的值:%d\n", num1 % num2); 

 

 

C语言算术表达式和运算符的优先级与结合性 

 

1、在表达式求值时,先按运算符的优先级别顺序执行,例如先乘除后加减。如果在一个运算对象两侧的运算符的优先级别相同,则按照结合方向“自左至右”即先左后右执行。

 

c语言强制类型转换运算符 

 

1、一般形式:(类型名)(表达式) 

 

(double)a:将a转换成double类型

 

(int)(x+y):将x+y的值转换成int类型 

 

c语言常用运算符总结 

 

1、算术运算符:+   -   /   %   ++   -- 

 

2、关系运算符:>  <  ==  > = <  !=

 

3、逻辑运算符:! &&   || 

 

4、位运算符:<<  >> ~ | ^ & 

 

5、赋值运算符:= 

 

6、条件运算符:?: 

 

7、逗号运算符:  ,

 

8、指针运算符:* 

 

9、求字节运算符: sizeof 

 

10、强制类型转换运算符: (需要强制转换的类型)

 

11、成员运算符:.  -> 

 

12、下标运算符:[]

 

13、函数调用运算符:函数名() 

 

c语言关系运算符是什么 

 

在c语言中,比较符称为关系运算符,所谓关系运算就是比较运算,将两个数值进行比较,判断其比较的结果是否符合给的条件。 

 

#define _CRT_SECURE_NO_WARNINGS //忽略安全检测,不然使用scanf会报错 

 

#include<stdio.h> 

 

int main()

 

 

int num; 

 

scanf("%d", &num); 

 

if (num<5) 

 

{

 

printf("num小于5");

 

}

 

else 

 

 

printf("unm不小于5"); 

 

 

 

c语言逻辑运算符优先次序 

 

1、有3种逻辑运算符:与(AND),或(OR),非(NOT)。在basic和pascal等语言可以在程序中直接用and,or,not作为逻辑运算符。在c语言中不能在程序中直接使用,而是用其他符号代替。

 

2、!(非)  &&(与)  ||(或) 中“!”优先级最高。

 

3、逻辑运算符中的“&&”和“||”低于关系运算符,“!”高于算术运算符。 

 

4、&&和||是双目运算符,它要求有两个运算对象(操作数),!是一目运算符,只要求有一个运算对象。 

 

c语言逻辑表达式

 

逻辑表达式的值应该是一个逻辑量“真”或“假”。C语言编译系统在表示逻辑运算结果时,以数值1代表“真”,以0代表“假”,但在判断一个量是否为“真时”,以0代表“假”,以非0代表“真”。即将一个非零的数值认作“真”。 

 

c语言逻辑变量

 

这是c99所增加的一种数据类型。可以将关系运算和逻辑运算的结果存到一个逻辑型变量中,以便于分析和运算。定义逻辑变量用类型符Bool。(vs2022没有这个) 

 

c语言条件运算符(三目运算符) 

 

一般形式 

 

表达式1:? 表达式2:: 表达式3 

 

条件运算符由两个符号(?和:)组成,必须一起使用。要求有3个操作对象,称为三目运算符。 

 

三目运算符可以这样理解,先计算出表达式1的值,表达式1后面的问号表示“该往哪里”,有两条路,如果表达是1的值为真(非0),自然直接到表达式2,如为假(0值),就绕过表达式2,到表达式3. 

 

条件表达式由三个运算对象和条件运算符组成 

 

c语言使用条件运算符注意事项 

 

1、条件运算符优先于赋值运算符 

 

2、表达式“2”和表达式“3”不仅可以是数值表达式,还可以是赋值表达式或函数表达式。 

 

3、条件表达式相当于一个不带关键字if的if语句,用它处理简单选择结构可以使程序简洁。 

 

4、三目运算符是C语言中唯一一个三目运算符。 

 

c语言printf用法 

 

1、一般格式 

 

printf(格式控制,输出表列) 

 

格式控制是用双引号括起来的一个字符串,称“转换控制字符串”,简称“格式字符串”, 

 

包含:(格式声明:由%和格式字符组成,如%d、%f。)(普通字符:既需要在输出时原样输出的字符。) 

 

输出表列是程序需要输出的一些数据,可以是常量、变量或表达式。 

 

c语言printf注意事项:输出是以计算机为主体而言的,从计算机向输出设备输出数据称为输出,C语言本身不包含输出语句,如果不加头文件,代码就会报错。 

 

c语言scanf函数 

 

一般形式 

 

scanf(格式控制,地址表列)

 

格式控制和printf函数一样,地址表列是由若干个地址组成的表列,可以是变量的地址,或字符串的首地址。 

 

(格式声明只包含一部分:以%开始,以一个格式字符结束,中间可以插入附加的字符。) 

 

使用c语言scanf函数的注意事项: 

 

1、scanf函数中的格式控制后面应当是变量地址,而不是变量名。 

 

2、如果在格式控制字符串中除了格式声明以外还有其他字符,则在输入数据时在对应的位置上应输入这些字符相同的字符。 

 

3、在用%c格式声明输入字符时,空格字符和转义字符中的字符都作为有效字符输入。

 

4、在输入数值数据时,如输入空格、回车、tab键或遇到非法字符时会认为你的输入结束。 

 

C语言putchar函数 

 

想从计算机向显示器输出一个字符,可以调用系统函数库中的putchar函数。 

 

一般形式

 

putchar(c)

 

putchar是put character(给字符)的缩写,其作用是输出字符变量c的值,显然它是一个字符。getchar函数的值就是从输入设备得到的字符。getchar函数只能接受一个字符。如果想输入多个字符就要用多个getchar函数。 

 

c语言if语句的一般形式 

 

一般形式 

 

f(表达式)语句1 

 

[else语句2] 

 

if语句中的表达式可以是关系表达式、逻辑表达式,甚至还可以是数值表达式。 

 

语句1和语句2可以是一个简单的语句,也可以是一个复合语句,还可以是其他的if嵌套。 

 

c语言if语句最常见的3种形式

 

1、没有else子句部分

 

if(表达式)语句1 

 

2、有else子句部分 

 

if(表达式)

 

语句1

 

else

 

语句2 

 

3、在else部分又嵌套多层的if语句 

 

if(表达式1)语句1 

 

else if(表达式2)语句2 

 

else if (表达式3)语句3 

 

...... 

 

语句1、语句2.....语句m等是if语句中的“内嵌语句”,它们是if语句中的一部分。 

 

if语句注意事项:整个if语句可以写在多行上,也可以写在一行上。if语句无论写在几行上,都是一个整体,属于同一语句。内嵌语句也可以是一个if语句。在if语句中要对给定的条件进行检查,判断所给定的条件是否成立。 

 

c语言switch多分支语句 

 

如果分支较多,嵌套的if语句层数多,程序繁长而且可读性降低,因为c语言提供switch语句直接处理多分支选择。 

 

一般形式 

 

switch(表达式) 

 

 

case 常量1:语句1 

 

case 常量2:语句2 

 

..... 

 

case 常量n:语句n 

 

default:语句n+1

 

 

例:#define _CRT_SECURE_NO_WARNINGS //忽略安全检测,不然使用scanf会报错 

 

#include<stdio.h>//头文件 

 

int main()//主函数

 

{

 

char grade;//定义成绩级别字符变量 

 

printf("输入成绩级别:");//提示语句 

 

scanf("%c", &grade);//键盘输入

 

printf("成绩段:");//提示语句 

 

switch (grade)//switch 多分支 

 

 

case'A':printf("85-100\n"); break;//输出A的成绩分布

 

case'B':printf("70-84\n"); break;//输出B的成绩分布 

 

case'c':printf("60-69\n"); break;//输出C的成绩分布 

 

case'D':printf("不及格小于60\n");//输出D的成绩分布

 

default:printf("输入成绩等级有误\n");//输出成绩级别有误 

 

 

return 0;//函数返回值为0

 

 

switch多分支注意事项:

 

1、switch后面括号内的“表达式”,其值的类型应为整数类型,包括字符型。

 

2、switch下面的花括号内是一个复合语句。

 

3、可以没有default标号,此时如果没有与switch表达式相匹配的case常量,则不执行任何语句,流程转到switch语句的下一个语句。

 

4、各个case标号出现的次序不影响执行结果,case标号只起标记作用。

 

5、每一个case常量必须互不相同。

 

6、在case子句中虽然包含了一个以上执行语句,但可以不必用花括号括起来,会自动顺序执行本case标号后面所以的语句。 

 

C语言while语句 

 

一般形式:while(表达式)语句

 

注意事项:

 

1、其中的语句就是循环体,可以是一个简单的语句,也可以是符复合语句。执行循环体的次数是由循环条件控制的,这个循环条件就是上面一般形式中的“表达式”,也称为循环条件表达式。

 

2、while循环可以简单的记为,只要当循环条件表达式为真(即给定的条件成立),就执行循环体语句。

 

3、while循环特点是:先判断条件表达式,后执行循环体语句。

 

例:#include<stdio.h>//头文件

 

int main()//主函数 

 

{

 

int num;

 

num = 15; 

 

while (num > 10)//循环条件 

 

{

 

num--; 

 

printf("%d\n", num);

 

}//循环体 

 

 

c语言do while介绍

除了while语句以外,c语言还提供了do...while语句来实现循环。

一般形式:

do 

语句

while  (表达式)

例:#include<stdio.h>//头文件 

int  main()//主函数 

int num;//定义整型变量 

num = 15;//给num赋值15 

do//关键词do

{

num--; 

printf("%d\n", num); 

} while (num > 10);//先运行第8行和第9行的代码然后再判断num是否大于10如果符合条件的话会继续执行第8行和第9行的代码(dowhile语句一定要有一个分号结束) 

}

c语言for语句介绍 

除了可以用while语句和do.....while语句实现循环外,c语言还提供for语句实现循环 

指针(一般用%x十六进制输出) 

直接访问:通过变量名直接访问地址

间接访问:把变量的地址放到另一个变量中,使用时先找到后者的地址,从中取出前者的地址

指针变量:存放地址的变量

struct是自定义结构体(sizeof是一个计算结构类型所占内存字节数的关键字)

strcpy是字符串拷贝 

常用内存管理函数有分配内存空间函数malloc 、calloc释放内存空间函数free

动态内存分配函数

void*malloc(unsigned size)

功能:在内存的动态存贮区(堆)中分配一块长度为size的连续空间。 

返回值:指针,存放被 分配内存的起始地址。若未申请地址,则返回null(0)。 

void*:指向任何类型的数据,在使用时,要进行强制类型转换。 

例如:(int*)malloc(sizeof(int)) 

(struct student*)malloc(sizeof(struct student)) 

sizeof是一个运算符作用是计算需要分配的空间的字节数 

void free(void*ptr) 

功能:释放由malloc()申请的动态内存空间,ptr存放该空间的首地址。

返回值:无。

p=(struct student*)malloc(sizof(struct student));

...... 

free(p); 

实践才能把知识变成技能,坚持才有沉淀。 

上一篇:linux基础和C语言学习总结

下一篇:嵌入式学习经验贴看这一篇就够了!

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2021 北京华清远见科技发展有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部