C基础班讲义v10Word下载.docx
《C基础班讲义v10Word下载.docx》由会员分享,可在线阅读,更多相关《C基础班讲义v10Word下载.docx(23页珍藏版)》请在冰豆网上搜索。
4.1字符串在计算机内部的存储方式19
4.2printf函数,putchar函数19
4.3scanf函数与getchar函数20
5运算符表达式和语句21
5.1基本运算符21
5.1.1=21
5.1.2+21
5.1.3–21
5.1.4*21
5.1.521
5.1.6%21
5.1.7+=21
5.1.8-=21
5.1.9*=22
5.1.10=22
5.1.11%=22
5.1.12++22
5.1.13--22
5.1.14逗号运算符22
5.1.15运算符优先级22
5.2复合语句23
5.3类型转化23
6条件分支语句23
6.1关系运算符23
6.1.1<
23
6.1.2<
=23
6.1.3>
6.1.4>
=24
6.1.5==24
6.1.6!
6.2关系运算符优先级24
6.3逻辑运算符24
6.3.1&
&
24
6.3.2||25
6.3.3!
25
6.4if26
6.5ifelse27
6.6ifelseif27
6.7switch与break,default27
6.8条件运算符?
27
6.9goto语句与标号27
7循环语句27
7.1while27
7.2continue27
7.3break28
7.4dowhile28
7.5for28
7.6循环嵌套28
8整数在计算机内部的存储方式28
8.1原码28
8.2反码29
8.3补码29
1第一个c语言的helloworld
1.1include头文件包含
头文件包含,写法#include<
文件名>
1.2main函数
这个就是C语言程序的入口,所有的C程序都是从main开始执行,一个C的源程序必须有一个main函数,也只能有一个main函数
1.3注释
//注释一行
/**/代表块注释,可以注释多行代码
1.4{}括号和代码块
代表一个代码单元
1.5声明
C语言规定,所有的变量和函数必须先声明,然后才能使用.
1.6C语言自定义名字的要求
可以使用大小写字母,下划线,数字,但第一个字母必须是字母或者下划线
字母区分大小写
变量名最好用英文,而且要有所含义,通过变量的名称就能猜测变量的意思。
1.7return语句
在C语言当中任何函数遇到return代表这个函数停止,当main函数遇到return,代表整个程序退出
return代表函数的返回值,如果返回类型是void,可以直接写return,而不需要返回任何值
2C语言的编译
2.1编译过程
2.2gcc编译选项
-o代表指定输出文件名
-E代表预编译
预编译处理include的本质就是简单的将include中的文件替换到c文件中
如果include包含的头文件在系统目录下,那么就用#include<
>
如果包含的文件在当前目录下,那么用#inlclude“”
-S代表汇编
-c代表编译
2.3printf执行原理
2.4CPU32位64位简介
一个字节是8个bit,一个字是两个字节,整型4个字节
8位寄存器
AL00000000256
16位寄存器
AXALAH
0000000000000000
1111111111111111
四个通用寄存器
AX
BX
CX
DX
32位寄存器
EAX0000000000000000000000000000000000000000000000111111*********1111111111111111111
EBX
ECX
EDX
64位寄存器
REAX
REBX
RECX
REDX
3C语言中的数据类型
3.1常量
常量就是在程序中不可变化的量,常量是不可被赋值的。
3.1.1#define
#define的本质就是简单的文本替换
通过#define定义的常量,在C语言里面一般叫宏定义
3.1.2const
const定义一个变量,但是这个变量的值只能在定义的时候赋予,之后就不可以修改。
对于const类型的变量,一定要在定义的时候给变量赋初值,不然定义之后就无法赋值了。
3.2字符串常量
在C语言当中“”引用的字符串都是字符串常量,常量一旦定义也是不可以被修改的。
3.3位,字节,字
3.3.1位
计算机内部都是二进制的,一个二进制的位,就叫做一个bit,就是一位
3.3.2二进制
逢二加1,在二进制表达数的时候是只有0和1,而没有2这个数的
二进制最大表示的数,就是2几次幂
对于8位的CPU来讲,最大表达的数是2的8次幂
3.3.3十进制
逢10加1,只有从0到9的数,没有10这个数,
3.3.4八进制
从0到7,逢8加1
在C语言中八进制是数字前面加0
3.3.5十六进制
0,1,2,3,4,5,6,7,8,9,a,b,c,d,e,f,10
逢16加1,
在C语言当中表达一个十六进制数的方式,数字前面加0x前缀
3.3.6字节
8个bit为代表一个字节
3.4sizeof关键字
sizeof与size_t类型
sizeof是计算数据在内存当中占多大空间的,单位字节
由于sizeof永远返回的是一个大于等于0的整数,所以如果用int来表示sizeof的返回值就不合适,size_t一般就是一个无符号的整数.
3.5十进制,二进制,八进制,十六进制
3.6int类型
3.6.1int常量,变量
一个int型数据占据4个字节的内存大小,在16位操作系统下,int是2个字节,在32和64位操作系统下,int是4个字节。
inta;
//代表在内存当中开辟一个4个字节大小的空间
a=10;
//代表4个字节的空间内容是常量10
小端对齐和大端对齐
高地址放高位,底地址放低位---小端对齐
高地址放低位,底地址放高位—大端对齐
对于大型unixCPU都是按照大端对齐方式处理int,
但对于x86构架CPU,还有ARM,是小端对齐的
3.6.2printf输出int值
inta=0x100;
//十六进制
printf(“%d”,a);
%d的意思是按照10进制打印一个整数
%x
%X,输出十六进制的时候是用大写的ABCDEF还是小写的abcdef,
3.6.3printf输出八进制和十六进制
%o
3.6.4short,long,longlong,unsignedint
在32位系统下:
short=2个字节
long和int一样,是4字节
longlong是8个字节
在64位操作系统下
int,4个字节
long在大多数64位系统下8个字节
unsignedint//无符号整数
unsignedlong//无符号的长整数
unsignedshort//无符号短整数
9l,9L,9ll,9LL,9u,9ull,9ULL
3.6.5整数溢出
当把一个大的整数赋值给小的整数,叫溢出。
intI=0x12345678
shorta=I;
当一个int赋值给short,会将高位抛弃,
3.7char类型
3.7.1char常量,变量
char是字符型,代表一个字节的内存
char在内存当中,有符号最大7f,
无符号,最大ff
unsignedchar
char的本质就是一个字节,一个BYTE
3.7.2printf输出char
%c
3.7.3不可打印char转义符
\a,警报
\b退格
\n换行
\r回车
\t制表符
\\斜杠
\’单引号
\”双引号
\?
问号
3.7.4char和unsignedchar
char取值范围为-128到127
unsignedchar为0-255
3.8浮点float,double,longdouble类型
3.8.1浮点常量,变量
floatf=2.5;
doublef1=3.1415926
3.8.2printf输出浮点数
%f,%Lf
3.9类型限定
3.9.1const
const限定一个变量的值不可以改变
3.9.2volatile
告诉编译器不要自作聪明的给我优化代码,把我的变量优化的寄存器里面计算,只要是volatile类型变量,每一步都需要从内存当中读取。
3.9.3register
register告诉编译器,这个变量只是用寄存器就好,提高效率,所以说register只是一个建议,而不是必须的结果。
4字符串格式化输出和输入
4.1字符串在计算机内部的存储方式
字符串是内存中一段连续的char空间,以’\0’结尾
字符串就是0结尾的连续char的内存
4.2printf函数,putchar函数
printf格式字符
字符
对应数据类型
含义
d
int
接受整数值并将它表示为有符号的十进制整数
hd
Shortint
短整数
hu
Unsignedshortint
无符号短整数
o
unsignedint
无符号8进制整数
u
无符号10进制整数
x/X
无符号16进制整数,x对应的是abcdef,X对应的是ABCDEF
f
float或double
单精度浮点数或双精度浮点数
e/E
double
科学计数法表示的数,此处"
e"
的大小写代表在输出时用的“e”的大小写
c
char
字符型。
可以把输入的数字按照ASCII码相应转换为对应的字符
s/S
char*/wchar_t*
字符串。
输出字符串中的字符直至字符串中的空字符(字符串以'
\0‘结尾,这个'
\0'
即空字符)
p
void*
以16进制形式输出指针
%
输出一个百分号
printf附加格式
l
附加在d,u,x,o前面,表示长整数
-
左对齐
m(代表一个整数)
数据最小宽度
将输出的前面补上0
直到占满指定列宽为止
不可以搭配使用
N(代表一个整数)
宽度至少为n位
不够以空格填充
printf是打印一个字符串
putchar是打印一个字符
4.3scanf函数与getchar函数
5运算符表达式和语句
5.1基本运算符
5.1.1=
数据对象:
泛指数据在内存的存储区域
左值:
表示可以被更改的数据对象
右值:
能赋给左值的量
5.1.2+
5.1.3–
5.1.4*
5.1.5/
5.1.6%
取模,取余数
5.1.7+=
inta=10;
a=a+5;
可以简写成a+=5;
5.1.8-=
a=a–5;
a-=5;
5.1.9*=
a=a*5;
a*=5;
5.1.10/=
5.1.11%=
5.1.12++
5.1.13--
5.1.14逗号运算符
intI=6+5,3+2
逗号表达式先求逗号左边的值,然后求右边的值,整个语句的值是逗号右边的值。
5.1.15运算符优先级
优先级
运算符
结合性
1
++(后缀),--(后缀),()(调用函数),{}(语句块),.,->
从左到右
2
++(前缀),--(前缀),+(前缀),-(前缀),!
(前缀),~(前缀),sizeof,*(取指针值),&
(取地址),(type)(类型转化)
从右到左
3
*,/,%
4
+,-
5
<
>
6
<
=>
=
7
==!
8
9
^
10
|
11
12
||
13
?
14
=,*=,%=,+=,-=,<
=,>
=,&
=,|=,^=
15
(逗号运算符)
5.2复合语句
{}代码块
5.3类型转化
doubled=10.2;
inta=d;
//隐式转换
inta1=3;
inta2=2;
doublemid=(double)a1/(double)a2;
//显示的强转
printf("
mid=%f\n"
mid);
6条件分支语句
6.1关系运算符
在C语言中0代表假,非0代表真,
在计算机程序判断是根据一个条件返回是真还是假来做不同的操作。
6.1.5==
一个=号在C语言里面是赋值的,不是比较的,但是很多初学者爱犯一个严重的错误,就是用=号来比较两个数是否相等
!
6.2关系运算符优先级
前四种相同,后两种相同,前四种高于后两种优先级
6.3逻辑运算符
逻辑与
6.3.2||
逻辑或
逻辑非
6.4if
6.5ifelse
两路分支if语句,只可能执行一路,不可能同时执行两路,也不可能两路都没有被执行
6.6ifelseif
ifelseif这种于语法可以实现多路的分支,但只有一路被执行。
else永远是和最近的一条if语句配对。
6.7switch与break,default
switch是为多重选择准备的,遇到break语句,switch就终端执行
一个求绝对值的例子
inti=-8;
intx=(i<
0)?
-i:
i;
号用法
当?
号前面括号内容为真的时候,执行?
号之后冒号之前的语句,否则执行冒号之后的语句
6.9goto语句与标号
尽量不要在程序当中使用goto语句,
7循环语句
7.1while
while(条件),如果条件为真,那么循环就执行,否则循环退出
7.2continue
continue意思是跳过下面语句,继续执行循环
7.3break
break中断循环,
7.4dowhile
do
语句
wile(条件);
对于dowhile来讲,至少能执行一次,
7.5for
可以指定循环次数的语句
7.6循环嵌套
8整数在计算机内部的存储方式
8.1原码
将最高位做为符号位(0代表正,1代表负),其余各位代表数值本身的绝对值
+7的原码是00000111
-7的原码是10000111
+0的原码是00000000
-0的原码是10000000
8.2反码
一个数如果值为正,那么反码和原码相同
一个数如果为负,那么符号位为1,其他各位与原码相反
+7的反码00000111
-7的反码11111000
-0的反码11111111
8.3补码
原码和反码都不利于计算机的运算,如:
原码表示的7和-7相加,还需要判断符号位。
正数:
原码,反码补码都相同
负数:
最高位为1,其余各位原码取反,最后对整个数+1
-7的补码:
10000111(原码)
111111000(反码)
11111001(补码)
+0的补码为00000000
-0的补码也是00000000
补码符号位不动,其他位求反,最后整个数+1,得到原码
用补码进行运算,减法可以通过加法实现
7-6=1
7的补码和-6的补码相加:
00000111+11111010=100000001
进位舍弃后,剩下的00000001就是1的补码
-7+6=-1
-7的补码和6的补码相加:
11111001+00000110=11111111
11111111是-1的补码