一、C语言发展史
1.什么是机器语言
机器语言是低级语言
,是机器指令的集合。计算机使用由二进制数组成的一串指令来控制计算机的操作,二进制数是由数字0和1组成。
机器语言的特点是:计算机可以直接识别和解读,不需要进行任何形式的翻译。
2.什么是汇编语言
由于机器语言的二进制代码使用起来太费劲,于是在机器语言的基础上发展出了汇编语言,汇编语言是面向机器的程序设计语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。
汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。
3.什么是高级语言
由于汇编语言依赖于硬件体系,并且该语言中的助记符号数量比较多,所以运用起来仍然不够方便,为了使得程序语言能更加贴近人类的自然语言,同时又不依赖于计算机硬件,于是产生了高级语言。其语法形式类似于英文,因为
远离对硬件的直接操作,而且易于理解和使用。其中影响较大的、普遍使用的高级语言有Fortran、ALGOL、Basic、COBOL、PROLOG、C、C++、VC、VB、Delphi、Java等。
C语言程序通过编译转换成机器指令。
从程序语言的发展过程可以看到,以前的操作系统等系统软件主要是用汇编语言编写的。但由于汇编语言依赖于计算机硬件,程序的可读性和可移植性都不是很好,为了提高可读性和可移植性,人们开始寻找一种语言,这种语言应该既具有高级语言的特性,又不失低级语言的优点。于是,C语言产生了。
4.C语言的特点
C语言是由UNIX的研制者
Dennis Ritchic(丹尼斯·里奇)和
Ken Thompson(肯·汤普逊)于1970年在BCPL语言(简称B语言)的基础上发展和完善起来的。20世纪70年代初期, 从AT&T Bell实验室的程序员丹尼斯·里奇第一次把B语言改为C语言。
C语言是一种
面向过程
的语言,同时具有高级语言和汇编语言的优点。C语言被广泛应用于不同的操作系统,如UNIX、MS-DOS、Microsoft Windows及Linux等。
![](https://img-blog.csdnimg.cn/04209004b20f4093b80673885e5e1a55.jpeg)
![](https://img-blog.csdnimg.cn/785e986cd0b44029b6c407c8e4e0671e.jpeg)
5.算法的基本概念
概述:
通常,一个程序包含算法,数据结构、程序设计方法及语言工具和环境这几个方面,
其中算法是核心,算法就是解决某一问题的方法和步骤
。通俗的说,算法就是解决‘’做什么”和“如何做”的问题。
(1)算法与程序设计与数据结构密切相关,是解决一个问题完整的步骤描述,是解决问题的策略、规则和方法。
(2) 正如著名计算机科学家Nkiklaus Wirth(尼克劳斯·沃斯)提出的公式:
数据结构+算法=程序。
算法的特性:算法是为了解决某一特定类型的问题而设计的一个实现过程,它具有以下特性:
(1)有穷性:是指一个算法必须在执行有限的步骤后结束,并且每一步都在有限时间内完成,不能无限的执行下去。
(类比线段)
!例如要编写一个由大到小累加的程序,这时要注意一定要设置一个整数的最上限,若没有这个最上限,程序将无限制的运行下去,也就是常说的死循环。
(2)确定性
算法的每一个补助都应当有确切的定义,对于每一个过程都不能有二义性。
(3)可行性
算法中的每一步都应当有效的运行,也就是说算法是可执行的,并要求最终能得到正确的结果。
(4)有输入
一个算法可以有一个或多个输入,也可以没有输入,输入就是在执行算法时有必要从外界获取的,如算法所需的初始量等一些信息。
(5)有输出
一个算法有一个或多个输出,输出就是算法最终所求的结果。如果一个程序运行下来没有任何结果,那么这个程序本身也就失去了意义。
衡量算法的优劣:
(1)正确性:所写的算法能满足具体问题的要求。
(2)可读性:算法被写好之后,该算法能别理解的难易程度。
(3)健壮性 :是指当输入的数据非法时,算法也会做出相应的判断,而不会因为输入的错误造成瘫痪。
(4)时间复杂度与空间复杂度:时间复杂度就是算法运行所需要的时间,空间复杂度是指算法运
行所需的存储空间的多少。
二、C语言基础
1.关键字
在C语言程序中,关键字是指被赋予特定意义的一些单词,
不可以把这些单词作为标识符来使用
,C语言一共有32个关键字,具体如下:
关键字(Keywords)
是由 C 语言规定的具有特定意义的字符串,通常也称为保留字。根据用途,可分为四类:
第一类:变量数据类型关键字:14 个
char: 单字节整型数或字符型数据
short:短整型数
int:基本整型数
long:长整型数
float:单精度浮点型数
double:双精度浮点型数
signed:有符号数
unsigned:无符号数数据
void:无数据类型、空数据类型
volatile:该变量在程序执行中可被隐含的改变
typedef:重新进行数据类型定义
struct:结构类型数据
enum:枚举类型数据
union:联合类型数据
第二类:9 条基本语句用到的关键字:12 个
if: 构成选择语句
else: 构成选择语句
switch: 构成选择语句
case: 构成选择语句
break: 跳出最内层循环
default: 构成选择语句
for: 构成循环语句
do:构成循环语句
while:构成循环语句
continue:转向下一次循环
goto:无条件转移语句
return:函数返回
第三类:存储类型关键字:5 个
const: 在程序执行过程中不可更改的常量值
extern: 在其它程序模块中说明了的全局变量
static: 静态变量
register: 使用 CPU 内部寄存器的变量
auto: 用以说明局部变量,缺省值为此类型变量
第四类:运算符关键字:1 个
sizeof: 运算符,计算表达式或数据类型占用的,内存的字节数
扩展资料:C语言的三套标准
C语言的三套标准:C89、C99和C11_c89 c99_shaobo Huang的博客-CSDN博客
2.标识符
标识符可以简单的理解为一个名字,用来标识变量名、常量名、函数名以及数组名等。
在C语言中标识符可以设定成容易理解的名字,但要遵循一定的规则,具体规则如下:
(1)所有C语言标识符必须以字母或下划线开头,而不能以数字或者符号开头。
(2)在设定标识符时,除了开头外,其他位置都可以由字母、下划线或数字组成。
(3)英文字母的大小写代表不同的标识符,也就是说,在C语言中是区分大小写字母的
(4)标识符不能是关键字。关键字是进行定义一种类型使用的特殊字符,不能使用关键字作为标识符。
(5)标识符的命名最好具有相关的含义。(见名知意)
(6)***ANSI规定,标识符可以为任意长度,但是外部名必须至少能由前6个字符唯一的区分,并且不区分大小写。这是因为某些编译程序(IBM PC的 MS C)仅能识别前6个字符。
!!!常见错误
(1)标识符大小写书写错误,在写标识符的时候要注意字母大小写的区分。(2)标点符号中英文状态忘记切换 ,在书写代码时应该采用英文半角输入法输入。
3.常量
概述:C语言的常量,就是其值在程序运行过程中不可以改变的数值。例如(身份证号码)
常量的分类:
(1)数值型常量,包括字符型常量和实型常量。
(2)字符型常量。
(3)符号常量。
3.1 整型常量
整型常量就是指直接使用的整型常数,例如:0,-100,200等,都是整型常数。
整型常量可以是长整型、短整型、符号整型和无符号整型,这几种整数类型就像容积大小不同的烧杯,虽然用法一样,但在不同场景就用不同容量的烧杯。
数据类型
|
长度
| 取值范围 |
unsigned short
|
16 位
|
0~65535
|
[signed] short
|
16 位
|
-32768~32767
|
unsigned int
|
32 位
|
0~4294967295
|
[signed] int
|
32 位
|
-2147483648~2147483647
|
[signed] long
|
64 位
|
-9223372036854775808~9223372036854775807
|
在编写整型常量时,可以在常量的后面加上符号L或者U进行修饰,L表示该常量是长整型,U表示该常量为无符号整型,例如:
LongNum= 1000L; /*L表示长整型*/
UnsignLongNum=500U; /*U表示无符号整型*/
注:U或L可以使用大写,也可使用小写。
概述:字符型常量与之前的常量有所不同,即要对其字符型常量使用指定的定界符进行限制。字符型常量分为两种,一种是字符常量,另一种是字符串常量。
3.2 字符常量
使用一对英文单引号括起来的一个字符,就是字符常量。例如:'A'、'#'、'b'、'l' 等。
注意:(1)字符常量中只能包括一个字符,不是字符串。例如'A'是正确的,'AB'是错误的。
(2)字符常量是区分大小写的。
(3)这对单引号是定界符,不属于字符常量的一部分。
(4)给char类型赋值的时候不能使用三个单引号,这样写编译器会不知道从什么地方开始,什么地方结束。例如:
char Cchar='A'' /*错误使用三个单引号为字符型赋值*/
3.3 字符串常量
字符串常量是
用一组英文双引号括起来
的若干字符序列,例如:''ABC''、''abc''、''1314''、''您好''等都是正确的字符串常量。
注意:(1)如果在字符串中一个字符都没有,将其称作空字符串,此时字符串的长度为0,例如:""""。
(2)C语言中存储字符串常量时,系统会在字符串的末尾自动加一个‘’\0‘’作为字符串的结束标志。例如:ABC\0。
字符常量和字符串常量的区别:
(1)定界符的使用不同:字符串使用单引号。字符串常量使用双引号。
(2)长度不同。字符常量只能有一个字符,那么字符常量的长度为1。字符串常量的长度也可以是0,但是需要注意的是,即使字符串常量的字符数量只有1个,长度却不是1。如字符串常量H,其长度为2,因为系统自动增加了字符串的结束标志\0。
(3)存储的方式不同,在字符常量中存储的是字符的ASCII码值,如''A''等于65,''a''为97,而在字符串常量中,不仅要存储有效的字符,还有存储结尾处的结束标志‘\0’。
3.4 计算机中的数据表示
1.八进制整数
使用的数据表达形式是八进制,需要在常数前加上0进行修饰,八进制所包含的数字是0~7之间。
OctalNumber1=0520; /*在常数前面加上一个0代表八进制*/
2.十六进制整数
常量前面使用0x作为前缀(注意:0x中的是数字0,不是字母O),表示该常量是用十进制表示的。十六进制中包含数字0~9,字母A~F或a~f。
HexNumber1=0x460;
HexNumber2=0x3ba4; /*加上前缀0x表示常量为十六进制*/
3.十进制整数
十进制是不需要在常量前面添加前缀的。十进制中所包含的数字为0~9。
Algorisnumber1=569;
Algorisnumber2=285;
3.4.1原码、反码和补码
(1)整型数据都是以二进制的形式存放在计算机的内存之中,其数值是以补码的形式进行表示的。
(2)正数的补码=正数的原码=正数的反码
(3)负数的补码是将该数绝对值的二进制形式按位取反再加1。
举例:11 在内存中的表示
↓
0
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
-11在内存中的表示(求补码)
(1)求其绝对值
↓
0
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
(2)取反↓
1
|
1
|
1
|
1
|
0
|
1
|
0
|
0
|
(3)再加1↓
1
|
1
|
1
|
1
|
0
|
1
|
0
|
1
|
(对于有符号整数,其在内存中存放的最左边的一位表示符号位,若0表示该数为正,1表示该数为负)
4.变量
变量是指在程序运行时其值可以改变的量。变量的功能就是存储数据。
5.数据类型
6.三种基本结构
1966年,计算机科学家Bohm和Jacopini为了提高算法的质量,经过研究提出了3种基本结构,即
顺序结构、选择结构和循环结构,因为任何一个算法都可由这3种基本结构构成。这3种基本结构之间可以并列,可以相互包含,但是不允许交叉,不允许从一个结构直接转到另一个结构的内部。
(1)顺序结构
顺序结构是简单的线性结构,在顺序结构的程序中,每个操作是按照它们出现的
先→后顺序执行的。
结构特点:在执行完一个操作后,接着执行下一个操作,这个结构中只有
一个入口和
一个出口。
(2)选择结构
选择结构也称之为分支结构,在选择结构中必须包含一个判断框
有两种结构特点:
1.判断给定的条件P是否成立,成立则执行A语句,否则执行B语句。
2.判断给定的条件P是否成立,成立则执行A语句,
否则什么也不做
。
(3)循环结构
在循环结构中,反复的执行一系列操作,直到条件不成立时才终止循环,按照判断条件出现的位置,可将循环结构分为当型循环结构和直到型循环结构。
当型循环是先判断条件P是否成立,如果成立,后执行A语句;执行完A语句后,再判断条件P是否成立,如果成立,接着再执行A语句;如此反复,直到条件P不成立为止,此时不执行A语句,跳出循环。
直到型循环是先执行A语句,然后判断条件P是否成立,如果条件P成立则再执行A语句,然后判断条件P是否成立,如果成立,接着再执行A语句;如此反复,直到条件P不成立,此时不执行A语句,跳出循环。
三、学习心得
学习C语言的过程是一个循序渐进的过程,经过多种途径去了解所编写代码的意义,是非常重要的。很多人在学习C语言的过程中会遇到很多问题,咨询了很多老师,得到的答案是:只有参与到其中用多种方法去解决问题,善于总结,勤于思考,认真实践,再加以时日。才能提高能力。回顾这一阶段的学习,学到比较好用的方法有画图分析,代码验证、替换其中的某一数值进行测试等,只有每日精进,才能体会到学习编程的乐趣。