1
声明使用本课件至少 128M内存,并使用 office
2000以上版本或使用自带播放工具 pptview。
使用本课件请配合选用人民邮电出版社出版的,c/c++程序设计 教程,。
如有任何意见和建议请发电子邮件件到
guoxiaogang5381@sina.com或
fengwork.student@sina.com
2
一、机器语言、汇编语言和高级语言二,C语言的历史与特点三、从 C语言到 C++语言的进化四、计算机结构的五个主要单元五,C/C++程序的实现六,C/C++源程序的基本形式
3
一、机器语言、汇编语言和高级语言计算机系统包括硬件与软件两部分。
软件是维护计算机硬件系统进行多用途计算的各种程序的总和。
硬件是计算机系统的躯干,软件是计算机系统的灵魂。
计算机语言是驾驭软件开发的一套语法规则,这套语法规则的具体实现又是通过称之为编译器的软件来完成的。
因此硬件、软件与计算机语言的历史是交叉耦合地进化的过程。
4
计算机程序设计语言可以归为如下三类:
a.机器语言,硬件系统可识别的的原始语言 ;开发软件难度大、周期长 ;程序员记忆的困难。
b.汇编语言,直接处理所有硬件 ;是各种语言中最快又最有效的语言 ;容易理解、记忆。
c.高级语言,屏蔽低级语言硬件细节的语言,一个模块对应汇编语言中一系列整体运行的指令。
5
FORTRAN FORTRAN 77 FORTRAN90
BASIC ANSI-BASIC QBASIC VISUAL-BASIC
DELPHI
PASCAL
ALGOL ALGOL68
SIMULA67
SMALLTALK
C++
JAVA
C#
BCPL B C
图 各种语言的发展演化进程
6
二,C语言的历史与特点
C语言是从 BCPL( Basic Combined Programming
Language)语言和 B语言演化而来 ;集汇编语言处理硬件细节和高级语言模块化高效编程长处于一身 ;
它介于低级的汇编语言与高级的 FORTRAN语言之间 ;
C语言既有面向系统如汇编语言一样直接访问硬件的快捷功能,又同时具备高级语言面向用户、容易记忆、清晰灵活的优点,可称之为高级的汇编语言。
7
三、从 C语言到 C++语言的进化首先 C++是一个更好的 C语言,是 C的一个超集,C++
保留了 C语言的优点同时也吸收其它面向对象编程语言的长处。 Stroustroup博士早期 (80年代初 )通过一个名为 cfront
的转换程序将 C++源程序处理成 C源程序,这保证转换后的代码能在任意支持 C的编译系统中运行。
C++语言的主要特点表现在:
一,是全面兼容 C语言 ;
二,是支持面向对象的编程方法 ;
C++是典型的混合编程语言,
8
C语言不简单 (C语法是简单的 ),C++语言本质上也不更多复杂。
但 C++语言包容了许多面向对象的语法和概念,提高了该语言处理复杂问题的抽象层次;面向对象编程提供了进行驾驭大型软件开发的有力手段,对于程序的重用和可维护性提供了新的理论支持。
最关键的是解决问题,语言仅是一种手段。
C++语言至关重要的是它并不将面向对象编程的语法手段强制程序员使用,C/C++程序员可以将 C++视为一个 C语言的改良版本,充分利用 C++语言子集的卓越性能进行游刃有余的编程,进行面向问题的软件开发。积累了一定具体的经验之后再适当步入面向对象的动态世界。
9
四、计算机结构的五个主要单元软件的开发必须与计算机的体系结构打交道,与程序设计相关的计算机结构是下面的五个主要单元:
1,输入单元:
输入单元是计算机接受信息的部分并且与计算机完成信息的交互。它从各种输入设备读取中断信息,同时把这些信息放置在其它处理信息的单元中。
有两种常用的输入信息的设备,一个是键盘,另一个是鼠标。标准输入 stdin常指设备键盘。
10
2,输出单元,
输出单元是计算机输出信息的部分。
它将计算机处理的信息或数据送入各种输出设备中,从而这些信息能够有效的阅读。
有两种常用的输出信息的设备,它们是屏幕显示器与打印机。
标准输出 stdout指显示器,标准打印 stdprn指打印机。
11
3,中央处理单元,
中央处理单元是计算机的核心硬件部分 CPU,CPU本身由算术逻辑部件、控制逻辑部件和一组工作寄存器构成。
算术逻辑部件 ALU用来进行算术逻辑运算,控制逻辑部分负责对全机的管理,包括从存储器取出指令,对总线及输入输出设备的数据转送控制等。
寄存器是 CPU中的存储单元,用来存放算术逻辑部件处理的中间结果,包括对存储器的寻址等。存储器是下面的内存单元。
12
4,内存单元,
内存单元由称之为内存条的硬件作为物理载体,是计算机中存取速度快的存储信息的部分。
程序的数据与代码指令动态地保存在内存中,内存的记忆性能是瞬态稳定的,关机则意味着内存信息的彻底消失,
内存信息必须永久性地保存到外存上。
5,外存单元,
外存单元是计算机用来长期保存数据信息的存储部分,
与计算机软件相关的信息在关机状态都必须有效地存放在外存中。
常见外存设备是软盘、硬盘、闪盘和光碟。
13
五,C/C++程序的实现
C/C++程序的实现是通过软件开发工具进行的,目前流行的软件开发工具以 Visual C++6.0 和
C++Build 5.0为代表。本书程序利用 VisualC++6.0
进行开发,其本身是优秀的可视化编程开发工具。
Visual C++6.0开发的程序只能是 32位应用程序,即内存地址的寻址方式为 32寻址。
所有语言源程序的实现都必须经历下面四个步骤:
1.编辑 2.翻译 3.连接 4.运行
14
1.编辑,
编辑是根据计算机语言的语法规则将算法与相应的数据输入到计算机中形成含原始代码的文本文件的过程。
这一文本文件或源文件对于 C编程方式以扩展名即,c的文件保存,C++编程方式以扩展名即,cpp的磁盘文件保存。
通常 C++源程序的文件为两部分:接口文件(也称为头文件)和实现文件 (或源文件 ),C++头文件的标准扩展名为,h,C++实现文件的标准扩展名为,cpp,系统最终将头文件插入到实现文件中即源文件,cpp中。
文本是指由字母、数字、符号等组成的明白可读的字符信息,文本编译器可以用来建立、输入或修改文本。
15
2.翻译,
高级语言的翻译程序有两种方式:一种是编译型的程序,另一种是解释型的程序。
低级的汇编语言翻译程序对应一个汇编程序,汇编程序直接将汇编语言转换成机器语言,然后加工处理成目标代码,转换的中间环节最少。
编译型的翻译方式为先把高级语言翻译成机器语言然后再将汇编语言翻译成机器语言。如 FORTRAN,C 和 C++是编译型的程序。
解释型的翻译方式是直接把高级语言在机器上运行,一边解释一边执行,如 BASIC 和 JAVA是解释型的程序。
16
编译型方式的优点是运行效率快、执行时间短 ; 解释型的长处是占用内存少。
3,连接过程,
连接过程是由连接程序进行的。连接程序用来把编译阶段分别编译产生的目标文件、系统原先提供的库文件或其它中间列表信息文件或二进制资源文件等连接在一起,形成一个整体运行的扩展名为,exe的执行程序。
连接过程可以进一步发现在编译阶段未能捕获的错误,
如某个函数模块的遗漏,标识符的重复定义等。库文件有静态连接库和动态连接库,扩展名各自为,lib 和,dll。
17
4,加载运行,
加载运行就是将执行程序从外存如硬盘或光碟中的机器指令转送到内存储器,以便机器执行;程序在执行之前必须先装入内存,对于大的程序操作系统根据系统的内存资源可能只将高频使用的部分代码装入内存。
预处理编译过程常称为编译时,连接过程称为连接时,
加载运行过程称为运行时。
常用编译器一词笼统地指编译、连接和运行三个过程,
因为集成开发环境对这三个过程可以通过一个命令一次连续的执行。
18
六,C/C++源程序的基本形式程序设计语言有各自编写的形式。汇编语言具有指令加左操作数和右操作数的形式,表现了该语言与机器语言的直接贴近。
C/C++源程序书写格式非常灵活,一条语句可以分散在不同的行上也可以将许多语句压缩在单行上。
19
[例 ]程序的分散表示。程序输出:
Nothing is hard in the world
#include <stdio.h>
void main (void /* 圆括号中的 void明确表示无入口参数 */)
{ /*printf("/*世上无难事 *///\t");*/
printf ("Nothing is hard " "in the world\n"); }
//end
"Nothing is hard " "in the world\n"合并为 "Nothing
is hard in the world\n",程序输出双引号内的字符串,
printf 是输出库函数。
按回车键?在源程序产生看不见的字符,简称换行符或硬回车,,\n”是换行符的转义序列,表示在屏幕上产生一个回车换行动作。
20
[例 ]程序的压缩表示。
#include <stdio.h>
void main ( void )
{ /*printf("世上无难事 \t");*/
printf ("Nothing is hard in the world\n"); }
//end
去掉斜杠星号 /*------*/对,可以得到一个改进的程序。
程序依然输出结果:
Nothing is hard in the world
21
[例 ]程序改动一些注释。输出:
/*世上无难事 */// Nothing is hard in the world
#include <stdio.h>
void main ( )
{ printf ( "/*世上无难事 *///\t");
// "\t"是水平制表的转义序列,表示水平跳过 8个空格
printf ("Nothing is hard in the world\n");
}
从上面三个例子可以看出 C/C++程序外在格式的灵活性,有展开的可读性强的形式,也有浓缩的节省纸张的形式,可用回车键、空格键和删除键在扩伸与压缩之间变换。
22
一个空格可以扩展为多个空格,多个空格可以浓缩为一个空格。
一条语句可分散在多行上,一行可以写多个语句,语句由分号结束。但空格或空行的增删不是任意的。
变量名函数名关键字如 if,int 等名称之间、带参的宏名与圆括号之间、续行符 \?之间、转义序列如 \n之间、运算符如 ++,+=之间不能插入空格。
字符串中的空格和换行符视为有效字符。作为名称或运算符之间分隔的空格是不能删除的。
例如,x+ ++y不同于 x++ +y
#define x3 不同于 #define x 3
除此之外的空格和空行一般是可以任意设置的。
23
C/C++的程序内在的格式由如下几个方面构成:
1,#include预处理指令引入的头文件
2,main()函数表示的 dos或 console模式下应程序的入口
3,花括号对,{ }”表示程序的结构层次范围
4,分号“;”结束的表达式语句或函数调用语句
5,多行注释 "/*------*/"或单行注释 "//-----"
24
由井字号,#”引入的指令为预处理指令,对应的预处理语句不以分号,;”结尾,,#include”称为文件包含预处理指令,通过该指令系统将其后程序段使用的名称进行了预先的说明。
#include <stdio.h>的作用是将 stdio.h文件在预处理阶段插入到程序,cpp中,作为程序源文件的一个有机部分。
,#include”指令是代码重用的有效手段。 stdio.h是标准输入输出头文件,其中包含了 printf,scanf函数的原型说明。
printf 函数和 scanf 函数是 C运行库函数。
25
当编译器编译某条 printf 语句时,编译器根据
#include<stdio.h>可以知道 printf 是一个函数名,这样在目标程序里为该例程建立一个入口,但编译器并不知道库函数在哪里。
连接程序会扫描库函数并在目标程序中插入对这些库函数的正确调用。
如果在相应的子目录中没有扫描到由函数名 printf 指示的库函数,则连接程序会提示一个错误。
26
main()是文本编程模式下的入口函数,Windows API
编程模式下的入口函数为 WinMain,main函数的前面 void
表示该函数没有返回值,圆括号,()”中的 void表示系统不从环境中读取输入值。
main函数或其它函数必须存在匹配的花括号对 " {} "。
匹配按就近原则进行,右花括号 "} "向前或向上或向右匹配距离最近的左花括号 " { "。
花括号对 "{...} "之间是若干条语句。配对的花括号与其间的语句一起可视为一条语句,称为程序块。
最外层的左花括号 " { "标志函数体的开始,相应的右花括号 "}"是该函数的结束,其后不再跟分号 ";"。
27
C/C++程序最重要的一个语法现象就是分号,;”,一个单独的分号,;”本身就是一个语句,语句是构成程序的基本单元。
大量的语句由表达式加上分号构成,称为表达式语句。
其它语句如选择语句、控制语句等大都与分号发生联系,分号是语句的必要成分又是语句与语句之间的分隔标志。编译器通过扫描分号对复杂的流程进行断句处理。
前面例子中的语句:
printf ( "Nothing is hard in the world\n" );
该语句由两部分组成,一是函数调用,另一个是分号
"; " 。称为函数调用语句,指示计算机执行相应的动作,
即将双引号括起来的字符串打印到屏幕上。
28
C++程序中注释有两种形式:
多行注释即斜杠星形式 "/*...*/"和 C++语言新引进的单行注释 "//..,"形式。
C++在预处理阶段就将注释所含盖的字符化为空白。
多行注释即斜杠星形式 "/*...*/"忽略始于 "/*"之后所有文本内容,直到发现 "*/"为止。 "/*"向后或向下匹配距离其最近的 "*/",其间的内容包括定界符 /*...*/本身被处理为空白。
"/*...*/"形式的注释不嵌套使用,注释字符 "/*---*/"和
"//"在字符串或注释内部没有任何特殊意义。
注释不应插在标识符或名称的中间,以避免一个名称被分隔为两个标识符。
a.
29
单行注释,//-----”形式忽略其后的内容直到本行结束,即包括双斜杠在内的其后的文本被处理为空白。 如下的注释为两个不同的单行注释:
//******
语句序列 ;
//*/
对语句序列不起作用即程序保留语句序列的执行功能。
如下的注释属于单独的多行注释:
/******
语句序列 ;
//*/
b.
30
通过增删上面的斜杠 /可以对其间选定的程序段起到去留的切换作用。
斜杠星形式 "/*------*/"斜杠与星号必须紧贴在一起才起作用,利用这一性质可以灵活控制程序段的去留。
注释是编译器不予保留的文本,是关于软件代码的细节说明。
注释不是必须的编程部分,对于程序的运行没有丝毫的关系。
31
声明使用本课件至少 128M内存,并使用 office
2000以上版本或使用自带播放工具 pptview。
使用本课件请配合选用人民邮电出版社出版的,c/c++程序设计 教程,。
如有任何意见和建议请发电子邮件件到
guoxiaogang5381@sina.com或
fengwork.student@sina.com
2
一、机器语言、汇编语言和高级语言二,C语言的历史与特点三、从 C语言到 C++语言的进化四、计算机结构的五个主要单元五,C/C++程序的实现六,C/C++源程序的基本形式
3
一、机器语言、汇编语言和高级语言计算机系统包括硬件与软件两部分。
软件是维护计算机硬件系统进行多用途计算的各种程序的总和。
硬件是计算机系统的躯干,软件是计算机系统的灵魂。
计算机语言是驾驭软件开发的一套语法规则,这套语法规则的具体实现又是通过称之为编译器的软件来完成的。
因此硬件、软件与计算机语言的历史是交叉耦合地进化的过程。
4
计算机程序设计语言可以归为如下三类:
a.机器语言,硬件系统可识别的的原始语言 ;开发软件难度大、周期长 ;程序员记忆的困难。
b.汇编语言,直接处理所有硬件 ;是各种语言中最快又最有效的语言 ;容易理解、记忆。
c.高级语言,屏蔽低级语言硬件细节的语言,一个模块对应汇编语言中一系列整体运行的指令。
5
FORTRAN FORTRAN 77 FORTRAN90
BASIC ANSI-BASIC QBASIC VISUAL-BASIC
DELPHI
PASCAL
ALGOL ALGOL68
SIMULA67
SMALLTALK
C++
JAVA
C#
BCPL B C
图 各种语言的发展演化进程
6
二,C语言的历史与特点
C语言是从 BCPL( Basic Combined Programming
Language)语言和 B语言演化而来 ;集汇编语言处理硬件细节和高级语言模块化高效编程长处于一身 ;
它介于低级的汇编语言与高级的 FORTRAN语言之间 ;
C语言既有面向系统如汇编语言一样直接访问硬件的快捷功能,又同时具备高级语言面向用户、容易记忆、清晰灵活的优点,可称之为高级的汇编语言。
7
三、从 C语言到 C++语言的进化首先 C++是一个更好的 C语言,是 C的一个超集,C++
保留了 C语言的优点同时也吸收其它面向对象编程语言的长处。 Stroustroup博士早期 (80年代初 )通过一个名为 cfront
的转换程序将 C++源程序处理成 C源程序,这保证转换后的代码能在任意支持 C的编译系统中运行。
C++语言的主要特点表现在:
一,是全面兼容 C语言 ;
二,是支持面向对象的编程方法 ;
C++是典型的混合编程语言,
8
C语言不简单 (C语法是简单的 ),C++语言本质上也不更多复杂。
但 C++语言包容了许多面向对象的语法和概念,提高了该语言处理复杂问题的抽象层次;面向对象编程提供了进行驾驭大型软件开发的有力手段,对于程序的重用和可维护性提供了新的理论支持。
最关键的是解决问题,语言仅是一种手段。
C++语言至关重要的是它并不将面向对象编程的语法手段强制程序员使用,C/C++程序员可以将 C++视为一个 C语言的改良版本,充分利用 C++语言子集的卓越性能进行游刃有余的编程,进行面向问题的软件开发。积累了一定具体的经验之后再适当步入面向对象的动态世界。
9
四、计算机结构的五个主要单元软件的开发必须与计算机的体系结构打交道,与程序设计相关的计算机结构是下面的五个主要单元:
1,输入单元:
输入单元是计算机接受信息的部分并且与计算机完成信息的交互。它从各种输入设备读取中断信息,同时把这些信息放置在其它处理信息的单元中。
有两种常用的输入信息的设备,一个是键盘,另一个是鼠标。标准输入 stdin常指设备键盘。
10
2,输出单元,
输出单元是计算机输出信息的部分。
它将计算机处理的信息或数据送入各种输出设备中,从而这些信息能够有效的阅读。
有两种常用的输出信息的设备,它们是屏幕显示器与打印机。
标准输出 stdout指显示器,标准打印 stdprn指打印机。
11
3,中央处理单元,
中央处理单元是计算机的核心硬件部分 CPU,CPU本身由算术逻辑部件、控制逻辑部件和一组工作寄存器构成。
算术逻辑部件 ALU用来进行算术逻辑运算,控制逻辑部分负责对全机的管理,包括从存储器取出指令,对总线及输入输出设备的数据转送控制等。
寄存器是 CPU中的存储单元,用来存放算术逻辑部件处理的中间结果,包括对存储器的寻址等。存储器是下面的内存单元。
12
4,内存单元,
内存单元由称之为内存条的硬件作为物理载体,是计算机中存取速度快的存储信息的部分。
程序的数据与代码指令动态地保存在内存中,内存的记忆性能是瞬态稳定的,关机则意味着内存信息的彻底消失,
内存信息必须永久性地保存到外存上。
5,外存单元,
外存单元是计算机用来长期保存数据信息的存储部分,
与计算机软件相关的信息在关机状态都必须有效地存放在外存中。
常见外存设备是软盘、硬盘、闪盘和光碟。
13
五,C/C++程序的实现
C/C++程序的实现是通过软件开发工具进行的,目前流行的软件开发工具以 Visual C++6.0 和
C++Build 5.0为代表。本书程序利用 VisualC++6.0
进行开发,其本身是优秀的可视化编程开发工具。
Visual C++6.0开发的程序只能是 32位应用程序,即内存地址的寻址方式为 32寻址。
所有语言源程序的实现都必须经历下面四个步骤:
1.编辑 2.翻译 3.连接 4.运行
14
1.编辑,
编辑是根据计算机语言的语法规则将算法与相应的数据输入到计算机中形成含原始代码的文本文件的过程。
这一文本文件或源文件对于 C编程方式以扩展名即,c的文件保存,C++编程方式以扩展名即,cpp的磁盘文件保存。
通常 C++源程序的文件为两部分:接口文件(也称为头文件)和实现文件 (或源文件 ),C++头文件的标准扩展名为,h,C++实现文件的标准扩展名为,cpp,系统最终将头文件插入到实现文件中即源文件,cpp中。
文本是指由字母、数字、符号等组成的明白可读的字符信息,文本编译器可以用来建立、输入或修改文本。
15
2.翻译,
高级语言的翻译程序有两种方式:一种是编译型的程序,另一种是解释型的程序。
低级的汇编语言翻译程序对应一个汇编程序,汇编程序直接将汇编语言转换成机器语言,然后加工处理成目标代码,转换的中间环节最少。
编译型的翻译方式为先把高级语言翻译成机器语言然后再将汇编语言翻译成机器语言。如 FORTRAN,C 和 C++是编译型的程序。
解释型的翻译方式是直接把高级语言在机器上运行,一边解释一边执行,如 BASIC 和 JAVA是解释型的程序。
16
编译型方式的优点是运行效率快、执行时间短 ; 解释型的长处是占用内存少。
3,连接过程,
连接过程是由连接程序进行的。连接程序用来把编译阶段分别编译产生的目标文件、系统原先提供的库文件或其它中间列表信息文件或二进制资源文件等连接在一起,形成一个整体运行的扩展名为,exe的执行程序。
连接过程可以进一步发现在编译阶段未能捕获的错误,
如某个函数模块的遗漏,标识符的重复定义等。库文件有静态连接库和动态连接库,扩展名各自为,lib 和,dll。
17
4,加载运行,
加载运行就是将执行程序从外存如硬盘或光碟中的机器指令转送到内存储器,以便机器执行;程序在执行之前必须先装入内存,对于大的程序操作系统根据系统的内存资源可能只将高频使用的部分代码装入内存。
预处理编译过程常称为编译时,连接过程称为连接时,
加载运行过程称为运行时。
常用编译器一词笼统地指编译、连接和运行三个过程,
因为集成开发环境对这三个过程可以通过一个命令一次连续的执行。
18
六,C/C++源程序的基本形式程序设计语言有各自编写的形式。汇编语言具有指令加左操作数和右操作数的形式,表现了该语言与机器语言的直接贴近。
C/C++源程序书写格式非常灵活,一条语句可以分散在不同的行上也可以将许多语句压缩在单行上。
19
[例 ]程序的分散表示。程序输出:
Nothing is hard in the world
#include <stdio.h>
void main (void /* 圆括号中的 void明确表示无入口参数 */)
{ /*printf("/*世上无难事 *///\t");*/
printf ("Nothing is hard " "in the world\n"); }
//end
"Nothing is hard " "in the world\n"合并为 "Nothing
is hard in the world\n",程序输出双引号内的字符串,
printf 是输出库函数。
按回车键?在源程序产生看不见的字符,简称换行符或硬回车,,\n”是换行符的转义序列,表示在屏幕上产生一个回车换行动作。
20
[例 ]程序的压缩表示。
#include <stdio.h>
void main ( void )
{ /*printf("世上无难事 \t");*/
printf ("Nothing is hard in the world\n"); }
//end
去掉斜杠星号 /*------*/对,可以得到一个改进的程序。
程序依然输出结果:
Nothing is hard in the world
21
[例 ]程序改动一些注释。输出:
/*世上无难事 */// Nothing is hard in the world
#include <stdio.h>
void main ( )
{ printf ( "/*世上无难事 *///\t");
// "\t"是水平制表的转义序列,表示水平跳过 8个空格
printf ("Nothing is hard in the world\n");
}
从上面三个例子可以看出 C/C++程序外在格式的灵活性,有展开的可读性强的形式,也有浓缩的节省纸张的形式,可用回车键、空格键和删除键在扩伸与压缩之间变换。
22
一个空格可以扩展为多个空格,多个空格可以浓缩为一个空格。
一条语句可分散在多行上,一行可以写多个语句,语句由分号结束。但空格或空行的增删不是任意的。
变量名函数名关键字如 if,int 等名称之间、带参的宏名与圆括号之间、续行符 \?之间、转义序列如 \n之间、运算符如 ++,+=之间不能插入空格。
字符串中的空格和换行符视为有效字符。作为名称或运算符之间分隔的空格是不能删除的。
例如,x+ ++y不同于 x++ +y
#define x3 不同于 #define x 3
除此之外的空格和空行一般是可以任意设置的。
23
C/C++的程序内在的格式由如下几个方面构成:
1,#include预处理指令引入的头文件
2,main()函数表示的 dos或 console模式下应程序的入口
3,花括号对,{ }”表示程序的结构层次范围
4,分号“;”结束的表达式语句或函数调用语句
5,多行注释 "/*------*/"或单行注释 "//-----"
24
由井字号,#”引入的指令为预处理指令,对应的预处理语句不以分号,;”结尾,,#include”称为文件包含预处理指令,通过该指令系统将其后程序段使用的名称进行了预先的说明。
#include <stdio.h>的作用是将 stdio.h文件在预处理阶段插入到程序,cpp中,作为程序源文件的一个有机部分。
,#include”指令是代码重用的有效手段。 stdio.h是标准输入输出头文件,其中包含了 printf,scanf函数的原型说明。
printf 函数和 scanf 函数是 C运行库函数。
25
当编译器编译某条 printf 语句时,编译器根据
#include<stdio.h>可以知道 printf 是一个函数名,这样在目标程序里为该例程建立一个入口,但编译器并不知道库函数在哪里。
连接程序会扫描库函数并在目标程序中插入对这些库函数的正确调用。
如果在相应的子目录中没有扫描到由函数名 printf 指示的库函数,则连接程序会提示一个错误。
26
main()是文本编程模式下的入口函数,Windows API
编程模式下的入口函数为 WinMain,main函数的前面 void
表示该函数没有返回值,圆括号,()”中的 void表示系统不从环境中读取输入值。
main函数或其它函数必须存在匹配的花括号对 " {} "。
匹配按就近原则进行,右花括号 "} "向前或向上或向右匹配距离最近的左花括号 " { "。
花括号对 "{...} "之间是若干条语句。配对的花括号与其间的语句一起可视为一条语句,称为程序块。
最外层的左花括号 " { "标志函数体的开始,相应的右花括号 "}"是该函数的结束,其后不再跟分号 ";"。
27
C/C++程序最重要的一个语法现象就是分号,;”,一个单独的分号,;”本身就是一个语句,语句是构成程序的基本单元。
大量的语句由表达式加上分号构成,称为表达式语句。
其它语句如选择语句、控制语句等大都与分号发生联系,分号是语句的必要成分又是语句与语句之间的分隔标志。编译器通过扫描分号对复杂的流程进行断句处理。
前面例子中的语句:
printf ( "Nothing is hard in the world\n" );
该语句由两部分组成,一是函数调用,另一个是分号
"; " 。称为函数调用语句,指示计算机执行相应的动作,
即将双引号括起来的字符串打印到屏幕上。
28
C++程序中注释有两种形式:
多行注释即斜杠星形式 "/*...*/"和 C++语言新引进的单行注释 "//..,"形式。
C++在预处理阶段就将注释所含盖的字符化为空白。
多行注释即斜杠星形式 "/*...*/"忽略始于 "/*"之后所有文本内容,直到发现 "*/"为止。 "/*"向后或向下匹配距离其最近的 "*/",其间的内容包括定界符 /*...*/本身被处理为空白。
"/*...*/"形式的注释不嵌套使用,注释字符 "/*---*/"和
"//"在字符串或注释内部没有任何特殊意义。
注释不应插在标识符或名称的中间,以避免一个名称被分隔为两个标识符。
a.
29
单行注释,//-----”形式忽略其后的内容直到本行结束,即包括双斜杠在内的其后的文本被处理为空白。 如下的注释为两个不同的单行注释:
//******
语句序列 ;
//*/
对语句序列不起作用即程序保留语句序列的执行功能。
如下的注释属于单独的多行注释:
/******
语句序列 ;
//*/
b.
30
通过增删上面的斜杠 /可以对其间选定的程序段起到去留的切换作用。
斜杠星形式 "/*------*/"斜杠与星号必须紧贴在一起才起作用,利用这一性质可以灵活控制程序段的去留。
注释是编译器不予保留的文本,是关于软件代码的细节说明。
注释不是必须的编程部分,对于程序的运行没有丝毫的关系。
31