6、数学函数: 例如我们前面说的sinO函数,其它的各种三角函数,还有求整,求绝对值,求随机数 求对数等 这些函数大都枯燥无味,其中的随机函数倒是有趣点。很多游戏程序都要使用到它。这 里粗略讲讲。 什么叫随机?大白话说就是:一件事情的结果有几种相同概率的可能。比如你扔一个硬 币到地上,可能是正面,也可能是反面朝上,两种可能的概率都是50%。但如果你要考虑 硬币还有“立”着在地上的可能,那么这种可能就不属于随机的范畴了。下面的程序随机 生成一个0~99的数,然后要求你输入一个0~99之间的数,如果这你输入的和它生成的数 相等(概率为1%),就表示你中奖了 //虽然属于数学类函数,但随机函数其实放在标准库( stdlib)里 #include <stdlib. h> #include <iostream. h> int main(int argc, char* argv[) //在第一次调用随机数之前,要调用一次这个函数, //这个函数称为“随机种子函数” randomize o //随机函数: random(intn)的用法: //随机返回一个0~(n-1)之间的整数, //如:intx= random(100),则x值将是0到99之间的一个数。 int x random(100) in t
6、数学函数: 例如我们前面说的 sin()函数,其它的各种三角函数,还有求整,求绝对值,求随机数, 求对数等。 这些函数大都枯燥无味,其中的随机函数倒是有趣点。很多游戏程序都要使用到它。这 里粗略讲讲。 什么叫随机?大白话说就是:一件事情的结果有几种相同概率的可能。比如你扔一个硬 币到地上,可能是正面,也可能是反面朝上,两种可能的概率都是 50%。但如果你要考虑 硬币还有“立”着在地上的可能,那么这种可能就不属于随机的范畴了。下面的程序随机 生成一个 0~99 的数,然后要求你输入一个 0~99 之间的数,如果这你输入的和它生成的数 相等(概率为 1%),就表示你中奖了。 //虽然属于数学类函数,但随机函数其实放在标准库(stdlib)里: #include <stdlib.h> #include <iostream.h> int main(int argc, char* argv[]) { //在第一次调用随机数之前,要调用一次这个函数, //这个函数称为“随机种子函数” randomize(); //随机函数:random(int n)的用法: //随机返回一个 0~ (n-1) 之间的整数, //如: int x = random(100),则 x 值将是 0 到 99 之间的一个数。 int x = random(100); int y;
cout<<"请输入一个0~99的整数:" cin >>y if(x==y)//可能性为1% cout<<"恭喜!您中奖了!"<<endl else cout<<"谢谢使用。"<<end 7、字符串函数 我们在学习字符串时将用到 8、内存管理管理函数: 我们在学习内存管理时将用到 9、杂七杂八的其它函数。 这个且不说。 12.212操作系统的API函数 大家总该知道什么叫操作系统吧? Windows就是一套操作系统,另外如UNIX, Linux也是 当然我们最常用的是前者。操作系统有两个主要任务 第一是给普通用户提供一套界面,比如桌面啦,任务条啦,及任务条上的开始按钮,桌 面上的图标:还有资源管理器等等。这一些我们都称为“用户界面”。它的作用是让用户 “用”这台电脑。因此我们也可以称它为用户与电脑之间的“接口”。 第二就是给我们这些程序员的接口,我们所写的程序是运行在操作系统上,就必须和操 作系统有着千丝万缕的关系。比如我们想在屏幕上显示一个窗口,那么我们所做的事是“请 求操作系统为我们在屏幕上画一个窗口”,同样在有了窗口后,我们想在窗口上画一条直 线,那么也是“请求操作系统在座标(2,1)-(100,200)之间画一条直线” 那么,这些“请求”是如何实现的呢?其实也是调用函数,调用操作系统为我们准备的 各种函数。这些函数同样是放在库文件里,当然,由于这些库文件是操作系统提供的,每
cout << "请输入一个 0~99 的整数:"; cin >> y; if( x == y) //可能性为 1% cout << "恭喜!您中奖了!" << endl; else cout << "谢谢使用。" << endl; } 7、字符串函数: 我们在学习字符串时将用到。 8、内存管理管理函数: 我们在学习内存管理时将用到。 9、杂七杂八的其它函数。 这个且不说。 1 2 .2.1.2 操作系统的 A PI 函数 大家总该知道什么叫操作系统吧?Windows 就是一套操作系统,另外如UNIX,Linux 也是, 当然我们最常用的是前者。操作系统有两个主要任务: 第一是给普通用户提供一套界面,比如桌面啦,任务条啦,及任务条上的开始按钮,桌 面上的图标;还有资源管理器等等。这一些我们都称为“用户界面”。它的作用是让用户 “用”这台电脑。因此我们也可以称它为用户与电脑之间的“接口”。 第二就是给我们这些程序员的接口,我们所写的程序是运行在操作系统上,就必须和操 作系统有着千丝万缕的关系。比如我们想在屏幕上显示一个窗口,那么我们所做的事是“请 求操作系统为我们在屏幕上画一个窗口”,同样在有了窗口后,我们想在窗口上画一条直 线,那么也是“请求操作系统在座标(2,1)-(100,200)之间画一条直线”。 那么,这些“请求”是如何实现的呢?其实也是调用函数,调用操作系统为我们准备的 各种函数。这些函数同样是放在库文件里,当然,由于这些库文件是操作系统提供的,每
一台装有相同操作系统的电脑都有这些库,所以它不用安装,所以它当然采用了动态库的 形式。对于我们正在用的 Windows,这些库一般都放在 Windows的安装目录: Windows,主 要是 Windows\System或 System32下。那里有一堆的.dll,其中有不少文件就是操作系统 的动态库文件。 我们写的程序,一般称为“应用程序”( Application program),所以 Windows为我们提 供的库函数也就称为“应用程序接口”( Application Program Interface),缩写即:API。 在本部教程,我们主要学习C++语言本身,只有学好C、C++语言,才有可能学会用C、 C++语言来和操作系统打交道。要知道所有在API函数都声明为C语言的形式,这是因为 Windows本身也是主要用C语言写成的。结论是:学习C、C+语言非常重要,并且,如果 想在操作系统上写程序,那么学习C、C++当然最合算! 12.2.1.3VCL库函数 VCL意为:可视化控件库( Visual Component library),事事都直接和 Windows的API 打交道,编程效率将非常的低。主要表现两个方面:第一,由于使用API编程是非可视化 的,我们将不得不花费非常冗长的时间在处理界面显示的事务上,而界面显示其实不是我 们程序的主要逻辑。第二,有关显示等工作的大量代码事实上有很大的相似性,大量重复。 我们要么仍受每写一个程序就重复写一堆千篇一律的代码,要么像早期的 Windows程序员 样自已动手写一套的类库用来“包装”这段代码,以求每次可以得重复利用。但这是件 庞大而灵活的工作,显然我们不值得这样做,事实上也不具备这样的能力。笔者在 Windows3.1下写程序时,曾经购买过国人高手写的一套这种类库,事实上钱花得不值。很 快笔者转向了当时 Borland提供的类库:OWL和微软的MFC VCL提供的也主要是类库,我们暂未学到“类”的概念,所以这时且不详谈。 12.2.2调用者必须能“找”得到被调用者 调用函数前提之一:调用者必须能看到被调用者
一台装有相同操作系统的电脑都有这些库,所以它不用安装,所以它当然采用了动态库的 形式。 对于我们正在用的 Windows,这些库一般都放在 Windows 的安装目录:Windows,主 要是 Windows\System 或 System32 下。那里有一堆的.dll,其中有不少文件就是操作系统 的动态库文件。 我们写的程序,一般称为“应用程序”(Application Program),所以 Windows 为我们提 供的库函数也就称为“应用程序接口”(Application Program Interface),缩写即:API。 在本部教程,我们主要学习 C++语言本身,只有学好 C、C++语言,才有可能学会用 C、 C++语言来和操作系统打交道。要知道所有在 API 函数都声明为 C 语言的形式,这是因为, Windows 本身也是主要用 C 语言写成的。结论是:学习 C、C++语言非常重要,并且,如果 想在操作系统上写程序,那么学习 C、C++当然最合算! 1 2 .2.1.3 V CL 库函数 VCL 意为:可视化控件库(Visual Component Library),事事都直接和 Windows 的 API 打交道,编程效率将非常的低。主要表现两个方面:第一,由于使用 API 编程是非可视化 的,我们将不得不花费非常冗长的时间在处理界面显示的事务上,而界面显示其实不是我 们程序的主要逻辑。第二,有关显示等工作的大量代码事实上有很大的相似性,大量重复。 我们要么仍受每写一个程序就重复写一堆千篇一律的代码,要么像早期的 Windows 程序员 一样自已动手写一套的类库用来“包装”这段代码,以求每次可以得重复利用。但这是件 庞大而灵活的工作,显然我们不值得这样做,事实上也不具备这样的能力。笔者在 Windows3.1 下写程序时,曾经购买过国人高手写的一套这种类库,事实上钱花得不值。很 快笔者转向了当时 Borland 提供的类库:OWL 和微软的 MFC。 VCL 提供的也主要是类库,我们暂未学到“类”的概念,所以这时且不详谈。 12.2.2 调用者必须能“找”得到被调用者 调用函数前提之一:调用者必须能看到被调用者
个“者”字,可能让你以为这里说的是“人”,其实不是,这里说的调用者指的是当 前程序,而被调用者当然是“将被调用”的函数 不过,确实,这里拿人来比喻是再合适不过了。 就拿前面说的“找电视修理工”的例子来说 要修电视,显然要能找到电视修理工。这个道理很明显。 所以本小节的重点其实是:程序如何才能找到要调用的函数呢? 有三种方法: 第一种、将被调用的函数写在当前代码前面 修理工正在我家喝茶呢!是啊,我有个朋友是干这活的,有一天他来我家串门,而我家 电视正好坏了 下面我先写一个函数,这个函数的大部分代码我没有写出来一一根本写不出来。我只是 要用它表示一个叫“修理电视”的功能。 //本函数实现“修理电视” void XiuliDianshio 尽管我们稍后才能学如何自已写函数,但你现在要记住了,上面那几行代码就是一个函 数,它的函数名为: Xiaolidianshi,意为“修理电视” 好!有了“修理电视”的函数了,如何调用它呢?下图表示的是正确的情况:
一个“者”字,可能让你以为这里说的是“人”,其实不是,这里说的调用者指的是当 前程序,而被调用者当然是“将被调用”的函数。 不过,确实,这里拿人来比喻是再合适不过了。 就拿前面说的“找电视修理工”的例子来说: 要修电视,显然要能找到电视修理工。这个道理很明显。 所以本小节的重点其实是:程序如何才能找到要调用的函数呢? 有三种方法: 第一种、将被调用的函数写在当前代码前面 修理工正在我家喝茶呢!是啊,我有个朋友是干这活的,有一天他来我家串门,而我家 电视正好坏了。 下面我先写一个函数,这个函数的大部分代码我没有写出来--根本写不出来。我只是 要用它表示一个叫“修理电视”的功能。 //本函数实现“修理电视” void XiuliDianshi() { ...... } 尽管我们稍后才能学如何自已写函数,但你现在要记住了,上面那几行代码就是一个函 数,它的函数名为:XiaoliDianshi,意为“修理电视”。 好!有了“修理电视”的函数了,如何调用它呢?下图表示的是正确的情况:
void XiuliDianshio 后面的代码 看得见 前面的函数 Xiuli Dianshio 正确:在后面的代码中调用 iul iDi anShi(函数。 当我们写程序要调用一个函数,而这个函数位于我们现在在写的代码前面时,我们就可 以直接调用它,这就像修理工就在我们家里一样。注意这里的前面并非仅限于“跟前” 如果你的代码很多行,这个函数在“很前面”,也不妨碍我们调用它。 要注意的是另一面:当函数在我们的代码后面时,代码就“看”不见这个函数了。下面 即为这种错误情况: 错误:要调用的函数在当前代码后面,“看不到”。 XiuliDianshi0; 前面的代码不能看到后面的 void XiuliDianshio 第二种、将被调用的函数声明写在当前代码前面 修理工不在我家,不过,他曾经留给我一张名片,名片上写着:“张三,电视修理工 Tel:1234567,住址:…”。所以我们也能知道他会修理电视,并且知道他的电话和住址, 这样就不愁找不到他了,对不?
当我们写程序要调用一个函数,而这个函数位于我们现在在写的代码前面时,我们就可 以直接调用它,这就像修理工就在我们家里一样。注意这里的前面并非仅限于“跟前”, 如果你的代码很多行,这个函数在“很前面”,也不妨碍我们调用它。 要注意的是另一面:当函数在我们的代码后面时,代码就“看”不见这个函数了。下面 即为这种错误情况: 第二种、将被调用的函数声明写在当前代码前面 修理工不在我家,不过,他曾经留给我一张名片,名片上写着:“张三,电视修理工, Tel:1234567,住址:……”。所以我们也能知道他会修理电视,并且知道他的电话和住址, 这样就不愁找不到他了,对不?