基于自然语言思想的递进c_c+教程4ppt

上传人:tia****nde 文档编号:70511760 上传时间:2019-01-17 格式:PPT 页数:149 大小:1.79MB
返回 下载 相关 举报
基于自然语言思想的递进c_c+教程4ppt_第1页
第1页 / 共149页
基于自然语言思想的递进c_c+教程4ppt_第2页
第2页 / 共149页
基于自然语言思想的递进c_c+教程4ppt_第3页
第3页 / 共149页
基于自然语言思想的递进c_c+教程4ppt_第4页
第4页 / 共149页
基于自然语言思想的递进c_c+教程4ppt_第5页
第5页 / 共149页
点击查看更多>>
资源描述

《基于自然语言思想的递进c_c+教程4ppt》由会员分享,可在线阅读,更多相关《基于自然语言思想的递进c_c+教程4ppt(149页珍藏版)》请在金锄头文库上搜索。

1、我们采用的教材,名词的空间域 名词的时间域,第6章名词的空间域、时间域和物理存储位置,名词的空间域和时间域不完全一致。有空间域的类型或量值,一定有时间域。 有时间域的类型或量值,不一定有空间域。,6.1 C/C+程序的逻辑结构,从可执行的意义看,程序从小到大可分为如下逻辑单位: 语句(statement)。 模块(block)。 嵌套模块。,6.1 C/C+程序的逻辑结构,从可执行的意义看,程序从小到大可分为如下逻辑单位: 文件(file)。 工程(project)。 工作区(workspace)。,图6. 1 C/C+程序逻辑结构,6.2名词性的类型和量值在各逻辑结构上的空间域,6.2.1模

2、块域,例6. 1 量值模块作用域的验证 #include int fun(int x) int a=20; /函数模块fun内定义的a printf(“na= %d, x= %d“, a, x); /printf(“nb= %d“, b); / error C2065: b : undeclared identifier return a+x; void main() int a=10; /main模块内定义的a int b; /main模块内定义的b printf(“a= %d“,a); /输出的是main函数内定义的a的值 b=fun(a); printf(“na= %d, b= %d“,

3、 a, b); /printf(“nx= %d“, x); /error C2065: x : undeclared identifier ,例6. 2 类型模块作用域的验证 #include Person fun(); void main() Person LiSi; / main模块内声明定义在另一个函数内类型Person的变量 LiSi=fun(); Person fun() struct Person /函数模块fun内定义的类型Person int id; char name10; ZS=1, “张三“; return ZS; ,6.2.2嵌套模块的层域,例6. 3 嵌套模块中的同名

4、类型或量值的空间域 #include void main() struct Person /main函数内(外层模块)定义的Person类型 int id; char name10; ; struct Date /main函数内(外层模块)定义的Date类型 int year; int month; int day; ;,Person ZS; /内嵌模块开始 struct Person / 内层模块定义的同名Person类型 int id; char name10; int Class; ; Person LiSi;/使用内层模块类型Person定义变量 Date Birthday; /Dat

5、e类型只在外层定义,内层可见 printf(“n %dn“, sizeof(LiSi); /输出内嵌Person /内嵌模块结束 printf(“n %dn“, sizeof(ZS);/输出外层Person的大小 /printf(“n %d“, sizeof(LiSi); /error C2065: LiSi : undeclared identifier ,6.2.3文件域,例6. 4 文件中定义的类型或量值的空间域 #include struct Person /定义在文件中的Person类型 int id; char name10; ; int i; /定义在文件中的int型变量i /*

6、前面定义了类型和变量*/,/*后面引用了类型和变量*/ void main() Person ZS=1,“张三“; /外层模块中引用Person类型 i=10; / 内层模块内应用变量i printf(“i= %d“,i); printf(“n%d %sn“, ZS.id, ZS.name); ,例6. 5 类型的先引用,后定义 #include int i; /*类型定义在后,而引用在先,会出现莫名其妙的错误*/,void main() Person ZS=1,“张三“; /引用了定义在后面的Person类型 i=10; printf(“i= %d“,i); printf(“n%d %sn“

7、, ZS.id, ZS.name); struct Person /定义在文件后面的Person类型 int id; char name10; ;,下面的示例程序演示了用extern声明定义在后的变量的情况。 例6. 6 变量的先声明,再应用,而后定义 #include #include struct Person /定义在先的Person类型 int id; char name10; ; void main() extern int i; /声明后面定义的变量 i =10; /定义在后面的变量的引用 extern Person ZS; /声明后面定义的变量,ZS.id=1; /定义在后面的变

8、量的引用 strcpy(ZS.name, “张三“); /定义在后面的变量的引用 printf(“ni= %d“, i); printf(“n%d %sn“, ZS.id, ZS.name); /* extern int j; /问题语句开始 j=200; printf(“nj=%d“, j); int j; / 问题语句结束 */ Person ZS; /定义在后的变量 int i; /定义在后的变量,6.2.4工程域,例6. 7工程内全局类型和量值空间域 首先,在VC中创建Win32 Console Application工程MyMFile(系统会自动添加文件扩展名.dsw) 然后创建C+

9、 Source File文件MyMFile0(系统会自动添加文件扩展名.cpp),文件内容如下: int MyMax(int x, int y) return xy?x:y; 这是求最大值函数的定义部分。,再新建C/C+ Header File文件MyMFile(系统会自动添加文件扩展名.h),文件内容如下: #include #include struct Person int id; char name10; ; int MyMax(int, int); int i=100;,再新建C+ Source File文件MyMFile1,文件内容如下: #include “MyMFile.h“

10、void main() Person ZS; ZS.id=i; strcpy(ZS.name,“张三“); printf(“ni= %d“, i); printf(“n%d %s“, ZS.id, ZS.name); int max; max=MyMax(2,20); printf(“nmax= %d“, max); putchar(n); ,可能会有这样的情况: 某些全局类型、全局量值和函数只使用在某几个特定文件中。 某些全局类型、全局量值和函数严格限定只能使用在某一个特定文件中。,如在上面的例子中,如果MyMFile0.cpp文件的内容是如下形式: static int MyMax(int

11、 x, int y) return xy?x:y; 这时,程序就会出错。,6.3名词性的类型和量值在各逻辑结构上的时间域,通常:类型和量值的时间域和空间域是一致的。 特殊情况下:用关键字static对定义的变量和函数做限定时,空间域和时间域不同。,6.3.1模块内static 模块内用static定义的量值(主要是变量)其空间域仍然限定在该模块,但其时间域是整个工程。 这种变量通常叫做“静态变量”。,例6. 8计算15的阶乘 #include int fac (int ); /阶乘函数声明 void main() int i; for (i=1; i=5; i+) /循环调用阶乘函数 prin

12、tf(“%d !=%dn“, i, fac(i); ,int fac(int n) /计算阶乘的函数 /static int f=1; /注释掉的静态定义 int f=1; f=f*n; return (f); ,6.3.2文件内的static 文件内只有三种成分: 1.类型的定义; 2.全局量值(主要是变量)的定义; 3.函数的定义。,例6. 9工程内全局类型和量值时间域 在VC+环境中新建工程tem。然后新建C+ Source File文件tem1。输入如下代码: int a=1; static b=2; 再新建C+ Source File文件tem2。输入如下代码: #include v

13、oid main() extern int a;/对定义在本工程其它文件中全局变量的声明 / extern int b; printf(“na= %d“, a); / printf(“nb= %d“, b); ,6.3.3关于static的总结,6.4变量的物理存储位置,定义的变量通常情况下,无论是动态的还是静态的,都是存储在ROM(随机只读存储器,内存)中的。 在小型计算机或大型计算机中允许用关键字register定义存储在CPU的寄存器中的变量,例6. 10寄存器变量的定义和使用 #include void main() register int i; for (i=0; i10; i+)

14、 printf(“n i= %d“, i); ,编译预处理是为编译做的准备工作,为C/C+语言程序的目标代码编译,连接和运行扫清障碍。,第7章 编译预处理,7.1简单替换宏符号常量,用一个简单、容易理解的名字来标识另一个复杂、不容易理解且在程序中多次出现的部分,可以增加程序的简洁性、易读性。,如,预编指令 #define NUM 100 定义宏名NUM代表100,以后程序中,所有NUM在编译前都替换为100。所以语句 Person studentNUM; /定义长度是100的Person型数组 for (i=0; iNUM; i+) /循环100次 当程序使用场合要求改变数组大小,自然也要改变

15、对该数组的循环次数为200时,只在定义处改为: #define NUM 200,规则如下: 宏是预编译命令,不是C语句,不要分号结束。 #define NUM 100;的作用是将程序中的NUM替换为“100;”而不是“100”,是错误的。 宏定义可以出现在程序的任何部分,其有效范围是从定义位置开始,到#undef 宏名处,例7. 1替换宏的定义、使用、有效范围和解除 #include #define A 1 void main() /main函数模块开始 #define B 2 printf(“n A %d“, A); printf(“n B %d“, B); printf(“n C %d“, C); /error C2065: C : undeclared identifier, /内嵌模块开始 #define C 4 printf(“n A %d“, A); printf(“n B %d“, B); printf(“n C %d“, C); #undef B printf(“n A %d“, A); printf(“n B %d“, B); /error C2065: B : undeclared identifier printf(“

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号