C语言基础教程(2)必备知识
必备知识
C语言的关键字:
C语言程序的格式:
数据类型
数据类型--数据的分类,对编程而言,首要考虑问题是数据的输入和存储。
数据类型关键字
A:基本数据类型:
整数类型
- 整型int --4字节 一字节byte = 8 位bit
- 短整型short int -2
- 长整型long int -8
浮点数类型
- 单精度浮点数float:存储范围小 -4
- 双精度浮点数double:存储范围大 -8
- Float 和 Double 都不能保证将小数完全准确保存。
字符char:c语言中是没有字符串string (区别于JAVA、C#中有string且C#中 char为2字节)
B:复合类型:就是把基本类型拼凑在一起
结构体
枚举 --- 实用
共用体—基本淘汰
变量
变量的本质是内存中一段存储空间。
Int I; i=5; I 是变量,程序向系统申请了一个内存单元,在程序运行中,i的值可以改变,但程序结束后,其所占的空间不是释放,而是被系统收回权限。
- Cpu,内存条,vc++6.0,操作系统之间的关系。
- 变量为什么必须初始(即赋值)
软件运行与内存关系(垃圾数据-9868598658)
- 软件在运行前需要向操作系统申请存储空间,在内存空间足够空闲时,操作系统将分配一段内存空间并将该外存中软件拷贝一份存入该内存空间中,并启动该软件运行。
- 在软件运行期间,该软件所占内存空间不再分配给其他软件。
- 当该软件运行完毕后,操作系统将回收该内存空间(注意:操作系统并不清空该内存空间遗留下来的数据),以便再次分配给其他软件使用。《操作系统》一门课中系统分配表中会讲到,用1标记表示内在是被占用的,用0标记表示是空闲的。
综上所述,一个软件所分配到的空间中极可能存在着以前其他软件使用过后的残留数据,这些数据被称之为垃圾数据,所以通常情况下我们为一个变量,为一个数组,分配好存储空间之前都要对该内存空间初始化。
如何定义变量
数据类型 变量名称 = 赋予的值;
等价于
数据类型 变量名;
变量名 = 要赋予的值;
举例子:
int i = 3; 等价于 int i; i = 3;
Int i,j;等价于 int i;int j;
Int i,j=3 等价于 int i; int j;j=3;
Int I =3, j = 5;等价于 int i; int j; I = 3;j = 5;
进制 –逢几进一
我们规定八进制前面加0(零),十六进制前面加0x。
常量在c中是如何表示的
当个字符使用单引号括起来,多个字符串使用双引号括起来(指针、数组)。
在c中,默认是double类型的。在后面加F表示当做float来处理,否则会有警告提示 --丢失部分字节。
常量以什么样的二进制代码存储在计算机中?
编码:
整数是以补码的形式转换为二进制代码存储在计算机
浮点数是以ieee754标准转换为二进制代码存储
字符本质实际是与整数的存储方式相同,ASII码标准。
代码规范化
·可以参考林锐《高质量c/c++编程》
·代码的规范化非常的重要,是学习一门编程语言的基础,代码可以允许错误,但不能 不规范。
例如:
成对敲括号{} ()
加空格于 运算符和数字之间 I = 1 + 2;
加缩进 分清上下级地位。
换行--进行功能区域分隔 or { }括号单独成一行。
代码规范化的好处
1:整齐,别人和自己都容易看懂。
2:代码规范了,代码不容易出错。
3:一般的程序可以分为三块:
a:定义变量
b:对变量进行操作
c:输出值
什么是字节
·存储数据的单位,并且是硬件所能访问的最小单位。
内存中存储的最小单位是位bit(0或1),但是硬件控制的时候不能精确到位,只能精确到字节(8位),是通过地址总线来控制的,而精确到位是通过软件来控制的,叫做位运算符来精确到位的。
1字节 = 8 位 1K = 1024 字节
1M = 1024 K 1G =1024 M 1T = 1024 G
2G的内存条的总空间:2 *1024 * 1024 *1024 * 8 =4*1032
-
不同类型数据之间相互赋值的问题
-
不同数据类型之间最好不要相互转换。
如果需要明白这个知识点,那么需要明白补码。
什么是ASCII码
Ascll码规定了ch是以哪个值去保存,ascii码不是一个值,而是一种规定,规定了不同的字符是以哪个整数值去表示。其它规定还有GB 2312 UTF-8等。
以char定义变量的时候,只能使用单引号括起一个字符才是正确的。
在上图中注释的最后一样是重复定义了ch的值,是错误的,而下面的ch = ‘c’是指把c赋值给ch,是正确的。
上图中输出的值是98(将字符以整数%d的形式输出)
字符本质上与整数的存储方式相同【字符的存储】
基本的输入和输出函数的用法:
Printf()
将变量的内容输出到显示器上。
四种用法
输什么是输出控制符,什么是非输出控制符
输出控制符包含如下:
Printf为什么需要输出控制符
01组成的代码可以表示数据也可以表示指令。必须要有输出控制符告诉他怎么去解读。
如果01组成的代码表示的是数据的话,那么同样的01代码组合以不同的格式输出就会有不同的输出结果,所以必须要有输出控制符。
在上图中,int x =47,如果前面加0(零)048表示的是八进制,如果前面加0x(零x)0X47则表示的是十六进制,而在输出的时候,则是o(字母o)表示八进制,ox(字母o,x)表示十六进制。
非输出控制符:非输出控制符在输出的时候会原样输出。
Scanf()通过键盘将数据输入到变量中
有两种用法:
示例:
非输入控制符:在输入的时候也会原样输入。
但是强烈建议:在使用scanf的时候,不使用非输入控制符。
给多个变量赋值:
需要记住,非控制符需要原样输入。
如何使用scanf编写出高质量代码
运算符
算术运算符:
加(+),减(—)乘(*)除(/)取余(%)
关系运算符:
>, >=, <, <=, !=,
逻辑运算符:
!(非),&&(且),||(或)
赋值运算符:
=, +=,*=, /=
例如:a+=3是等价于a=a+3,a/=3等价于a=a/3
其优先级别是算术>关系>逻辑>赋值。
取余的结果的正负只和被除数有关。