1c++语言学前必看第一课.docx

上传人:b****8 文档编号:9274010 上传时间:2023-02-03 格式:DOCX 页数:23 大小:68.45KB
下载 相关 举报
1c++语言学前必看第一课.docx_第1页
第1页 / 共23页
1c++语言学前必看第一课.docx_第2页
第2页 / 共23页
1c++语言学前必看第一课.docx_第3页
第3页 / 共23页
1c++语言学前必看第一课.docx_第4页
第4页 / 共23页
1c++语言学前必看第一课.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

1c++语言学前必看第一课.docx

《1c++语言学前必看第一课.docx》由会员分享,可在线阅读,更多相关《1c++语言学前必看第一课.docx(23页珍藏版)》请在冰豆网上搜索。

1c++语言学前必看第一课.docx

1c++语言学前必看第一课

C语言

C语言是一门通用计算机编程语言,应用广泛。

C语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

尽管C语言提供了许多低级处理的功能,但仍然保持着良好跨平台的特性,以一个标准规格写出的C语言程序可在许多电脑平台上进行编译,甚至包含一些嵌入式处理器(单片机或称MCU)以及超级电脑等作业平台。

二十世纪八十年代,为了避免各开发厂商用的C语言语法产生差异,由美国国家标准局为C语言订定了一套完整的国际标准语法,称为ANSIC,作为C语言最初的标准。

[1] 

发展历史

C语言之所以命名为C,是因为C语言源自KenThompson发明的B语言,而B语言则源自BCPL语言。

1967年,剑桥大学的MartinRichards对CPL语言进行了简化,于是产生了BCPL(BasicCombinedProgrammingLanguage)语言。

c语言宣传图

20世纪60年代,美国AT&T公司贝尔实验室(AT&TBellLaboratory)的研究员KenThompson闲来无事,手痒难耐,想玩一个他自己编的,模拟在太阳系航行的电子游戏——SpaceTravel。

他背着老板,找到了台空闲的机器——PDP-7。

但这台机器没有操作系统,而游戏必须使用操作系统的一些功能,于是他着手为PDP-7开发操作系统。

后来,这个操作系统被命名为——UNIX。

1970年,美国贝尔实验室的KenThompson,以BCPL语言为基础,设计出很简单且很接近硬件的B语言(取BCPL的首字母)。

并且他用B语言写了第一个UNIX操作系统。

1971年,同样酷爱SpaceTravel的DennisM.Ritchie为了能早点儿玩上游戏,加入了Thompson的开发项目,合作开发UNIX。

他的主要工作是改造B语言,使其更成熟。

[2] 

1972年,美国贝尔实验室的D.M.Ritchie在B语言的基础上最终设计出了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是C语言。

1973年初,C语言的主体完成。

Thompson和Ritchie迫不及待地开始用它完全重写了UNIX。

此时,编程的乐趣使他们已经完全忘记了那个"SpaceTravel",一门心思地投入到了UNIX和C语言的开发中。

随着UNIX的发展,C语言自身也在不断地完善。

直到今天,各种版本的UNIX内核和周边工具仍然使用C语言作为最主要的开发语言,其中还有不少继承Thompson和Ritchie之手的代码。

[2] 

在开发中,他们还考虑把UNIX移植到其他类型的计算机上使用。

C语言强大的移植性(Portability)在此显现。

机器语言和汇编语言都不具有移植性,为x86开发的程序,不可能在Alpha,SPARC和ARM等机器上运行。

而C语言程序则可以使用在任意架构的处理器上,只要那种架构的处理器具有对应的C语言编译器和库,然后将C源代码编译、连接成目标二进制文件之后即可运行。

[2] 

1977年,DennisM.Ritchie发表了不依赖于具体机器系统的C语言编译文本《可移植的C语言编译程序》。

[3] 

C语言继续发展,在1982年,很多有识之士和美国国家标准协会为了使这个语言健康地发展下去,决定成立C标准委员会,建立C语言的标准。

委员会由硬件厂商,编译器及其他软件工具生产商,软件设计师,顾问,学术界人士,C语言作者和应用程序员组成。

1989年,ANSI发布了第一个完整的C语言标准——ANSIX3.159—1989,简称“C89”,不过人们也习惯称其为“ANSIC”。

C89在1990年被国际标准组织ISO(InternationalOrganizationforStandardization)一字不改地采纳,ISO官方给予的名称为:

ISO/IEC9899,所以ISO/IEC9899:

1990也通常被简称为“C90”。

1999年,在做了一些必要的修正和完善后,ISO发布了新的C语言标准,命名为ISO/IEC9899:

1999,简称“C99”。

[2] 在2011年12月8日,ISO又正式发布了新的标准,称为ISO/IEC9899:

2011,简称为“C11”。

编程开发

c语言编译器

GCC,GNU组织开发的开源免费的编译器

MinGW,Windows操作系统下的GCC

Clang,开源的BSD协议的基于LLVM的编译器

VisualC++:

:

cl.exe,MicrosoftVC++自带的编译器

c语言集成开发环境(IDE)

CodeBlocks,开源免费的C/C++IDE

CodeLite,开源、跨平台的C/C++集成开发环境

OrwellDev-C++,可移植的C/C++IDE

C-Free

LightTable

VisualStdio系列

c语言HelloWorld

下面是一个在标准输出设备(stdout)上,印出"Hello,world!

"字符串的简单程序。

类似的程序,通常作为初学编程语言时的第一个程序:

?

1

2

3

4

5

6

7

#include 

  

int main(void)

{

    printf("Hello, world!

");

    return 0;

}

语言标准

c语言K&RC

起初,C语言没有官方标准。

1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了C语言。

布莱恩·柯林汉(BrianKernighan)和丹尼斯·里奇(DennisRitchie)出版了一本书,名叫《TheCProgrammingLanguage》。

这本书被C语言开发者们称为K&R,很多年来被当作C语言的非正式的标准说明。

人们称这个版本的C语言为K&RC。

[3] 

K&RC主要介绍了以下特色:

结构体(struct)类型

长整数(longint)类型

无符号整数(unsignedint)类型

把运算符=+和=-改为+=和-=。

因为=+和=-会使得编译器不知道使用者要处理i=-10还是i=-10,使得处理上产生混淆。

即使在后来ANSIC标准被提出的许多年后,K&RC仍然是许多编译器的最准要求,许多老旧的编译器仍然运行K&RC的标准。

c语言ANSIC/C89标准

1970到80年代,C语言被广泛应用,从大型主机到小型微机,也衍生了C语言的很多不同版本。

1983年,美国国家标准协会(ANSI)成立了一个委员会X3J11,来制定C语言标准。

[4] 

1989年,美国国家标准协会(ANSI)通过了C语言标准,被称为ANSIX3.159-1989"ProgrammingLanguageC"。

因为这个标准是1989年通过的,所以一般简称C89标准。

有些人也简称ANSIC,因为这个标准是美国国家标准协会(ANSI)发布的。

1990年,国际标准化组织(ISO)和国际电工委员会(IEC)把C89标准定为C语言的国际标准,命名为ISO/IEC9899:

1990-Programminglanguages--C[5] 。

因为此标准是在1990年发布的,所以有些人把简称作C90标准。

不过大多数人依然称之为C89标准,因为此标准与ANSIC89标准完全等同。

1994年,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C89标准修订版,名叫ISO/IEC9899:

1990/Cor1:

1994[6] ,有些人简称为C94标准。

1995年,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C89标准修订版,名叫ISO/IEC9899:

1990/Amd1:

1995-CIntegrity[7] ,有些人简称为C95标准。

c语言C99标准

1999年1月,国际标准化组织(ISO)和国际电工委员会(IEC)发布了C语言的新标准,名叫ISO/IEC9899:

1999-Programminglanguages--C[8] ,简称C99标准。

这是C语言的第二个官方标准。

在C99中包括的特性有:

∙增加了对编译器的限制,比如源程序每行要求至少支持到4095字节,变量名函数名的要求支持到63字节(extern要求支持到31)。

∙增强了预处理功能。

例如:

o宏支持取可变参数#defineMacro(...)__VA_ARGS__

o使用宏的时候,允许省略参数,被省略的参数会被扩展成空串。

o支持//开头的单行注释(这个特性实际上在C89的很多编译器上已经被支持了)

∙增加了新关键字restrict,inline,_Complex,_Imaginary,_Bool

o支持longlong,longdouble_Complex,float_Complex等类型

∙支持不定长的数组,即数组长度可以在运行时决定,比如利用变量作为数组长度。

声明时使用inta[var]的形式。

不过考虑到效率和实现,不定长数组不能用在全局,或struct与union里。

∙变量声明不必放在语句块的开头,for语句提倡写成for(inti=0;i<100;++i)的形式,即i只在for语句块内部有效。

∙允许采用(type_name){xx,xx,xx}类似于C++的构造函数的形式构造匿名的结构体。

∙复合字面量:

初始化结构的时候允许对特定的元素赋值,形式为:

structtest{inta[3],b;}foo[]={[0].a={1},[1].a=2};

∙structtest{inta,b,c,d;}foo={.a=1,.c=3,4,.b=5};//3,4是对.c,.d赋值的

∙格式化字符串中,利用\u支持unicode的字符。

∙支持16进制的浮点数的描述。

∙printfscanf的格式化串增加了对longlongint类型的支持。

∙浮点数的内部数据描述支持了新标准,可以使用#pragma编译器指令指定。

∙除了已有的__line____file__以外,增加了__func__得到当前的函数名。

∙允许编译器化简非常数的表达式。

∙修改了/%处理负数时的定义,这样可以给出明确的结果,例如在C89中-22/7=-3,-22%7=-1,也可以-22/7=-4,-22%7=6。

而C99中明确为-22/7=-3,-22%7=-1,只有一种结果。

∙取消了函数返回类型默认为int的规定。

∙允许struct定义的最后一个数组不指定其长度,写做[](flexiblearraymember)。

∙constconstinti将被当作constinti处理。

∙增加和修改了一些标准头文件,比如定义bool的,定义一些标准长度的int的,定义复数的,定义宽字符的,类似于泛型的数学函数,浮点数相关的

增加了va_copy用于复制...的参数。

里增加了structtmx,对structtm做了扩展。

∙输入输出对宽字符以及长整数等做了相应的支持。

GCC和其它一些商业编译器支持C99的大部分特性。

c语言C11标准

2011年12月8日,国际标准化组织(ISO)和国际电工委员会(IEC)再次发布了C语言的新标准,名叫ISO/IEC9899:

2011-Informationtechnology--Programminglanguages--C[9] ,简称C11标准,原名C1X。

这是C语言的第三个官方标准,也是C语言的最新标准。

新的标准提高了对C++的兼容性,并增加了一些新的特性。

这些新特性包括:

o对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及头文件。

o_Noreturn函数标记,类似于gcc的__attribute__((noreturn))。

o_Generic关键字。

o多线程(Multithreading)支持,包括:

▪_Thread_local存储类型标识符,头文件,里面包含了线程的创建和管理函数。

▪_Atomic类型修饰符和头文件。

o增强的Unicode的支持。

基于CUnicode技术报告ISO/IECTR19769:

2004,增强了对Unicode的支持。

包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件.

o删除了gets()函数,使用一个新的更安全的函数gets_s()替代。

o增加了边界检查函数接口,定义了新的安全的函数,例如fopen_s(),strcat_s()等等。

o增加了更多浮点处理宏。

o匿名结构体/联合体支持。

这个在gcc早已存在,C11将其引入标准。

o静态断言(staticassertions),_Static_assert(),在解释#if和#error之后被处理。

o新的fopen()模式,(“…x”)。

类似POSIX中的O_CREAT|O_EXCL,在文件锁中比较常用。

o新增quick_exit()函数作为第三种终止程序的方式。

当exit()失败时可以做最少的清理工作。

语言特点

基本特性

C++语言代码

1、高级语言:

它是把高级语言的基本结构和语句与低级语言的实用性结合起来的工作单元。

[10] 

2、结构式语言:

结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。

这种结构化方式可使程序层次清晰,便于使用、维护以及调试。

C语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

[10] 

4、代码级别的跨平台:

由于标准的存在,使得几乎同样的C代码可用于多种操作系统,如Windows、DOS、UNIX等等;也适用于多种机型。

C语言对编写需要进行硬件操作的场合,优于其它高级语言。

[10] 

5、使用指针:

可以直接进行靠近硬件的操作,但是C的指针操作不做保护,也给它带来了很多不安全的因素。

C++在这方面做了改进,在保留了指针操作的同时又增强了安全性,受到了一些用户的支持,但是,由于这些改进增加语言的复杂度,也为另一部分所诟病。

Java则吸取了C++的教训,取消了指针操作,也取消了C++改进中一些备受争议的地方,在安全性和适合性方面均取得良好的效果,但其本身解释在虚拟机中运行,运行效率低于C++/C。

一般而言,C,C++,java被视为同一系的语言,它们长期占据着程序使用榜的前三名。

[11] 

c语言特有特点

C语言是一个有结构化程序设计、具有变量作用域(variablescope)以及递归功能的过程式语言。

C语言传递参数均是以值传递(passbyvalue),另外也可以传递指针(apointerpassedbyvalue)。

不同的变量类型可以用结构体(struct)组合在一起。

只有32个保留字(reservedkeywords),使变量、函数命名有更多弹性。

部份的变量类型可以转换,例如整型和字符型变量。

通过指针(pointer),C语言可以容易的对存储器进行低级控制。

预编译处理(preprocessor)让C语言的编译更具有弹性。

c语言优缺点

优点

1、简洁紧凑、灵活方便

C语言一共只有32个关键字,9种控制语句,程序书写形式自由,区分大小写。

把高级语言的基本结构和语句与低级语言的实用性结合起来。

C语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。

[12] 

C语言的HelloWorld程序

2、运算符丰富

C语言的运算符包含的范围很广泛,共有34种运算符。

C语言把括号、赋值、强制类型转换等都作为运算符处理。

从而使C语言的运算类型极其丰富,表达式类型多样化。

灵活使用各种运算符可以实现在其它高级语言中难以实现的运算。

[12] 

3、数据类型丰富

C语言的数据类型有:

整型、实型、字符型、数组类型、指针类型、结构体类型、共用体类型等。

能用来实现各种复杂的数据结构的运算。

并引入了指针概念,使程序效率更高。

[13] 

4、表达方式灵活实用

C语言提供多种运算符和表达式值的方法,对问题的表达可通过多种途径获得,其程序设计更主动、灵活。

它语法限制不太严格,程序设计自由度大,如对整型量与字符型数据及逻辑型数据可以通用等。

[14] 

5、允许直接访问物理地址,对硬件进行操作

由于C语言允许直接访问物理地址,可以直接对硬件进行操作,因此它既具有高级语言的功能,又具有低级语言的许多功能,能够像汇编语言一样对位(bit)、字节和地址进行操作,而这三者是计算机最基本的工作单元,可用来写系统软件。

6、生成目标代码质量高,程序执行效率高

C语言描述问题比汇编语言迅速,工作量小、可读性好,易于调试、修改和移植,而代码质量与汇编语言相当。

C语言一般只比汇编程序生成的目标代码效率低10%~20%。

[14] 

7、可移植性好

C语言在不同机器上的C编译程序,86%的代码是公共的,所以C语言的编译程序便于移植。

在一个环境上用C语言编写的程序,不改动或稍加改动,就可移植到另一个完全不同的环境中运行。

[14] 

8、表达力强

C语言有丰富的数据结构和运算符。

包含了各种数据结构,如整型、数组类型、指针类型和联合类型等,用来实现各种数据结构的运算。

C语言的运算符有34种,范围很宽,灵活使用各种运算符可以实现难度极大的运算。

C语言能直接访问硬件的物理地址,能进行位(bit)操作。

兼有高级语言和低级语言的许多优点。

它既可用来编写系统软件,又可用来开发应用软件,已成为一种通用程序设计语言。

另外C语言具有强大的图形功能,支持多种显示器和驱动器。

且计算功能、逻辑判断功能强大。

[14] 

  

缺点

1、C语言的缺点主要表现在数据的封装性上,这一点使得C在数据的安全性上有很大缺陷,这也是C和C++的一大区别。

2、C语言的语法限制不太严格,对变量的类型约束不严格,影响程序的安全性,对数组下标越界不作检查等。

从应用的角度,C语言比其他高级语言较难掌握。

也就是说,对用C语言的人,要求对程序设计更熟练一些。

[15] 

c语言C11新特性

1、对齐处理(Alignment)的标准化(包括_Alignas标志符,alignof运算符,aligned_alloc函数以及头文件)。

2、_Noreturn函数标记,类似于gcc的__attribute__(noreturn)。

3、_Generic关键字。

4、多线程(Multithreading)支持,包括:

_Thread_local存储类型标识符,;头文件,里面包含了线程的创建和管理函数。

5、增强的Unicode的支持,基于CUnicode技术报告ISO/IECTR19769:

2004,增强了对Unicode的支持。

包括为UTF-16/UTF-32编码增加了char16_t和char32_t数据类型,提供了包含unicode字符串转换函数的头文件.

6、删除了gets()函数,使用一个新的更安全的函数gets_s()替代。

7、增加了边界检查函数接口,定义了新的安全的函数,例如fopen_s(),strcat_s()等等。

8、增加了更多浮点处理宏。

9、匿名结构体/联合体支持,这个在gcc早已存在,C11将其引入标准。

10、静态断言(Staticassertions),_Static_assert(),在解释#if和#error之后被处理。

11、新的fopen()模式,(“…x”),类似POSIX中的O_CREAT|O_EXCL,在文件锁中比较常用。

12、新增quick_exit()函数作为第三种终止程序的方式。

当exit()失败时可以做最少的清理工作。

13、_Atomic类型修饰符和头文件。

c语言语言组成

c语言基本构成

数据类型

C的数据类型包括:

整型、字符型、实型或浮点型(单精度和双精度)、枚举类型、数组类型、结构体类型、共用体类型、指针类型和空类型。

[16] 

常量与变量

常量其值不可改变,符号常量名通常用大写。

变量是以某标识符为名字,其值可以改变的量。

标识符是以字母或下划线开头的一串由字母、数字或下划线构成的序列,请注意第一个字符必须为字母或下划线,否则为不合法的变量名。

变量在编译时为其分配相应存储单元。

数组

如果一个变量名后面跟着一个有数字的中括号,这个声明就是数组声明。

字符串也是一种数组。

它们以ASCII的NULL作为数组的结束。

要特别注意的是,方括内的索引值是从0算起的。

[17] 

指针

如果一个变量声明时在前面使用*号,表明这是个指针型变量。

换句话说,该变量存储一个地址,而*(此处特指单目运算符*,下同。

C语言中另有双目运算符*)则是取内容操作符,意思是取这个内存地址里存储的内容。

指针是C语言区别于其他同时代高级语言的主要特征之一。

[18] 

指针不仅可以是变量的地址,还可以是数组、数组元素、函数的地址。

通过指针作为形式参数可以在函数的调用过程得到一个以上的返回值,不同于return(z)这样的仅能得到一个返回值。

指针是一把双刃剑,许多操作可以通过指针自然的表达,但是不正确的或者过分的使用指针又会给程序带来大量潜在的错误。

[17] 

字符串

C语言的字符串其实就是以'\0'字符结尾的char型数组,使用字符型并不需要引用库,但是使用字符串就需要C标准库里面的一些用于对字符串进行操作的函数。

它们不同于字符数组。

使用这些函数需要引用头文件

[19] 

文件输入/输出

在C语言中,输入和输出是经由标准库中的一组函数来实现的。

在ANSIC中,这些函数被定义在

头文件;中。

标准输入/输出

有三个标准输入/输出是标准I/O库预先定义的:

stdin标准输入

stdout标准输出

stderr输入输出错误[16] 

运算

C语言的运算非常灵活,功能十分丰富,运算种类远多于其它程序设计语言。

在表达式方面较其它程序语言更为简洁,如自加、自减、逗号运算和三目运算使表达式更为简单,但初学者往往会觉的这种表达式难读,关键原因就是对运算符和运算顺序理解不透不全。

当多种不同运算组成一个运算表达式,即一个运算式中出现多种运算符时,运算的优先顺序和结合规则显得十分重要。

在学习中,对此合理进行分类,找出它们与数学中所学到运算之间的不同点之后,记住这些运算也就不困难了,有些运算符在理解后更会牢记心中,将来用起来得心应手,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 学习计划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1