上一篇介绍了三道非常经典的考数据类型长度、数据范围和数据类型转换的笔试题。这一篇开始复习常量和变量,输入和输出。
说明:我们学过单片机的一般都是有C语言基础的了,网上关于C语言的资料有很多,大家如果对C语言不熟悉的话可以先去详细学一下,再以这篇博文作为复习资料学习。
这篇博文的目的是复习C语言,以30多个编程题作为复习要点,这30多个编程题基本涵盖了C语言所有的内容了,只要你掌握了这30多个编程题,那么你的C语言基本就没什么问题了。
注意:由于本专栏是嵌入式全栈开发专栏,为了我们能熟悉以后实际工作中的开发环境,我们写C语言全部在Linux中的vim编辑器中写,这么做事为了我们能够熟练掌握Linux系统的常用命令以及Linux上的vim编辑器的常用工作命令,以达到对口训练的目的!
vim编辑器的一些工作命令在上一篇博文中已经详细介绍过了,如果不了解可以先去看看。
我们正式开始:
常量
数据的表现形式有两种:常量 变量
常量 是一种在程序中保持固定类型和固定值的数据。编译系统从数据形式上可以区分(除枚举类型外)
比如宏常量:
常量的种类
常量分为:
a、整型常量
b、实型常量
c、字符常量
d、字符串常量
e、枚举常量(后面再讲)
有时候我们看代码我们会看到这样的一些标志:
常量标志
1、整型常量
十进制常量:18、-31,
long int型常量:123l、123L、123456l、123456L;(这个l或者L只是说明这个数是long类型的常量,写不写都没关系)
unsigned int型常量:123u、 123U(这个u或者U只是说明这个数是unsisgned类型的常量,写不写都没关系);
根据实际数据大小确定int型还是long型。
2、以数字"0"开始的整型常量是八进制数
比如022、-037。注意010(八进制)和10(十进制)大小不一样。因为八进制并不常用,所以此种表示法比较少见。
3、以"0x"或者"0X"开始的整型常量是十六进制
A~F和a~f用来表示十进制的10~15,十六进制的形式比较常用:0x12、-0x1F, -0x1f...
4、实型常量
十进制小数形式:123.45、456.78;
指数形式:1e-2、4.5e3(4.5乘以10的3次方);
float型常量 123.45f、 456.78F、1e-2f、4.5e3F;
long double型常量 123.45l、 456.78L;缺省为double
5、字符常量的表示方法
比如:'a'、'A'、'5'、'%'、'$';单引号内只能有一个字符,除非用"\"开头
注意:'5'和5的区别
字符在内存中是以ASCII码存储的,比如'a'它其实也是以数字的形式在内存中存储的,我们想要查它对应的这个数值,我们就可以去查找ASCII码表,可以看到'a'对应的数值是97,那它在内存中是以97的二进制数值存储的。
6、用'\'开头的字符为转义字符
例如,'\n',代表1个字符
7、字符串常量
字符串常量是一对双引号括起来的字符序列;
合法的字符串常量:"How do you do."、"CHINA"、"a"、"$123.45";
可以用printf直接输出一个字符串,如printf("How do you do.");
C规定:在每一个字符串常量的结尾加一个"字符串结束标志",以便系统据此判断字符串是否结束。C规定以字符'\0'作为字符串结束标志,用sizeof求字符串长度的时候不计算"\0",但是字符串数组大小要计算"\0" 。
如:如果有一个字符串常量"CHINA" ,实际上在内存中是:
|---|---|---|---|---|-----|
| C | H | I | N | A | \0 |
它占内存单元不是5个字符,而是6个字符,最后一个字符为'\0'。但在输出时不输出'\0'。
变量
变量 是在程序执行过程中可以改变。
const关键字(笔试重点)
上一次我们复习了一个非常重要的关键字sizeof,这次我们再复习一个关键字const。
const这个关键字是介于常量和变量之间的,很多人把它理解为是将变量定义为常量 ,但其实它是用来把变量定义为只读变量。
将变量num定义成了只读变量,那就不能再直接通过num这个变量名来修改对应内存的值,如果硬改就会报错
硬方法不行,那就来软办法:
我们可以通过地址(指针)来间接修改num对应内存的值。
我们先取出num的地址
然后修改并打印出来看看
这样我们就把它修改成1000了
后面我们复习指针的时候还会继续剖析这个const
输入和输出
1、格式输入函数
scanf(格式控制字符串, 地址表列);
scanf("%d %f", &a,&b);
注:&取a第一个字节的地址;%表示获取的意思
2、格式输出函数
printf(格式控制字符串, 输出项表列);
函数原型:int printf(const char *format, ...);
注:"..."表示可变参数。
注意:scanf 不能加"\n"!输出printf可以加"\0"
格式输出的占位符
%d或%i按十进制有符号整数输出,正数的符号省略
%u按十进制无符号整数输出
%o按八进制无符号整数输出(不输出前导0)
%x或X按十六进制无符号整数输出(不输出前导符0x)
%c按字符型数据输出
%s按字符串数据输出
%f按小数形式输出(6位小数)
%e或E按指数形式输出实数
%%输出%本身
%g或G选用%f或%e格式中输出宽度较短的一种格式,不输出无意义的0
%p以十六进制输出(输出带有0x)
以上这些常用的占位符要记忆!
以上就是这篇内容,如想了解更多,欢迎订阅本专栏!
如有问题可评论区或者私信留言,如果想要进交流群请私信!