第二部分结构化程序设计_第1页
第二部分结构化程序设计_第2页
第二部分结构化程序设计_第3页
第二部分结构化程序设计_第4页
第二部分结构化程序设计_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Visual C+与面向对象程序设计教程1、程序结构:顺序、选择、循环、程序结构:顺序、选择、循环2、数据:简单数据、复杂数据;常量、变量、数据:简单数据、复杂数据;常量、变量3、函数:库函数、自定义函数(选择个好的、函数:库函数、自定义函数(选择个好的算法实现)算法实现)第第二部分二部分 结构化程序结构化程序2.1 程序的基本控制结构程序的基本控制结构 n结构化程序设计方法结构化程序设计方法 n模块化程序结构模块化程序结构 n三种基本程序结构三种基本程序结构 模块化程序结构模块化程序结构 n模块化模块化 :就是把程序划分为若干个部分,每个部:就是把程序划分为若干个部分,每个部分独立存放、完成

2、一个特定的功能。其目的是降分独立存放、完成一个特定的功能。其目的是降低程序的复杂度,使设计出来的程序便于阅读、低程序的复杂度,使设计出来的程序便于阅读、调试和维护。调试和维护。 n一个模块可以是一条语句、一段程序、一个函数一个模块可以是一条语句、一段程序、一个函数等等 n基本特征是其仅有一个入口和一个出口基本特征是其仅有一个入口和一个出口 n模块相互独立,内聚性很强,一个模块完成一个模块相互独立,内聚性很强,一个模块完成一个功能功能 三种基本程序结构三种基本程序结构 n按照结构化程序设计的观点按照结构化程序设计的观点, 任何算法功能都可以通过由程序模任何算法功能都可以通过由程序模块组成的三种基

3、本程序结构的组合块组成的三种基本程序结构的组合: n顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执顺序结构:程序是按程序语句或模块在执行流中的顺序逐个执行。行。 n选择结构:程序是按设定的条件实现程序执行流的多路分支。选择结构:程序是按设定的条件实现程序执行流的多路分支。 n循环结构:程序是按给定的条件重复地执行指定的程序段或模循环结构:程序是按给定的条件重复地执行指定的程序段或模块。块。 n结论:理论上已经证明,用三种基本程序结构可以实现任何复结论:理论上已经证明,用三种基本程序结构可以实现任何复杂的算法。杂的算法。 2.2 C+语言的控制结构语言的控制结构n顺序语句顺序语句n选择结

4、构选择结构l一路选择分支l两路选择分支l多路选择分支n循环结构循环结构l当型循环l直到型循环lfor 循环n出口控制出口控制VC+语言的控制结构语言的控制结构n顺序顺序n选择(分支)选择(分支)lif ( ) else ;lswitch() case ;default:;n循环循环lwhile();lfor(.);ldo. while(.);n出口出口lbreak; continue;2.3 结构化结构化程序设计程序设计n结构化程序设计支持结构化程序设计支持“自顶向下自顶向下, 逐步求精逐步求精”的程序设计方法。的程序设计方法。 n“自顶向下自顶向下” l是将复杂、大的问题划分为小问题,找出问

5、题的关键、重点所在,然后用精确的思维定性、定量地去描述问题。 n“逐步求精逐步求精” l是将现实世界的问题经抽象转化为逻辑空间或求解空间的问题。复杂问题经抽象化处理变为相对比较简单的问题。经若干步抽象(精化)处理,最后到求解域中只是比较简单的编程问题。 例例2-1 验证验证“哥德巴赫猜想哥德巴赫猜想”n“哥德巴赫猜想哥德巴赫猜想”表述为:表述为:任何任何 一个大于等于一个大于等于4的偶数均可以表的偶数均可以表 示为两个素数之和。示为两个素数之和。n求解第一步求解第一步 提出问题:提出问题: 验证哥德巴赫猜想验证哥德巴赫猜想 n第二步第二步 设一上限数设一上限数M,验证,验证 从从4到到M的的所

6、有偶数是否能被所有偶数是否能被 分解为两个素数之分解为两个素数之和。和。1. 定义一个变量定义一个变量X,初值为,初值为4。2. 每次令其加每次令其加2,并验证,并验证X能否能否 被分解为被分解为两个素数之和,直到两个素数之和,直到 X不小于不小于M为止。为止。验证哥德巴赫猜想验证哥德巴赫猜想X = 4X M ?验证验证x是否能被分解是否能被分解为两个素数之和为两个素数之和X = X +2否否是是验证哥德巴赫猜想(续一)验证哥德巴赫猜想(续一)n第三步第三步 如何验证如何验证X是否能被分是否能被分解为两个素数之和。解为两个素数之和。1. 从从P=2开始;开始;2. 判别判别XP是否仍为素数:是

7、否仍为素数:3. 若是,打印该偶数的分解式。若是,打印该偶数的分解式。4. 否则,换更大的素数,再继续否则,换更大的素数,再继续执行执行2.。如此循环,直到用于。如此循环,直到用于检测的素数大检测的素数大X/2且且X 与其之差与其之差仍不是素数,则打印仍不是素数,则打印“哥德巴哥德巴赫猜想赫猜想”不成立。不成立。 P = 2P= x / 2 ?处理哥德巴赫猜想处理哥德巴赫猜想不成立的情况不成立的情况打印出打印出X的的分解情况分解情况是是否否验证哥德巴赫猜想(续二)验证哥德巴赫猜想(续二)n第四步第四步 生成下一个素数。生成下一个素数。 (1)当前素数)当前素数P加加1 (2)判别)判别P是否是

8、素数;是否是素数; (3)若是素数,返回)若是素数,返回P; (4)否则,)否则,P加加1,继续执行(,继续执行( 2)。)。 P = P + 1是素数?是素数?P = P + 1否否返回素数返回素数 P验证哥德巴赫猜想(续三)验证哥德巴赫猜想(续三)n经过四步分解精化,将经过四步分解精化,将“验证哥德巴赫猜想验证哥德巴赫猜想”这这个命题已经分解为计算机可以求解的数学模型了个命题已经分解为计算机可以求解的数学模型了。n剩下的问题就是编程求解了。如何编程正是我们剩下的问题就是编程求解了。如何编程正是我们这门课程要解决的问题。这门课程要解决的问题。n关于关于“验证哥德巴赫猜想验证哥德巴赫猜想”的求

9、解程序稍后给出的求解程序稍后给出。2.4 伪代码伪代码nC语言的控制结构语句和自然语言结合起来描述算法n比画流程图省时、省力,且更容易转化为程序n不能运行例例2-2 哥德巴赫猜想哥德巴赫猜想n算法分析:算法分析:1) 用用“筛选筛选”法生成素数表法生成素数表PrimeListM。先在素数表中产生到。先在素数表中产生到-1的的所有自然数,然后将已确定的所有素数的倍数置所有自然数,然后将已确定的所有素数的倍数置(求模取余为)求模取余为)。 2,3,5,7,13,17,.2) 这样一来,素数表中有许多这样一来,素数表中有许多0,为找下一个素数,要跳过这些,为找下一个素数,要跳过这些0。3) 分解分解

10、0到到M-1之间的所有偶数;之间的所有偶数; 循环循环(x M) x初值取初值取4 先取素数先取素数P=2,判别判别 若若PrimeListx-p等于等于0,说明分,说明分 解不成功,解不成功,p取素数表中下一个素数;再执行取素数表中下一个素数;再执行 若若PrimeListx-p不等于不等于0,分解成功,打印分解式,分解成功,打印分解式 x = x + 2,继续执行,继续执行,检查下一个偶数。,检查下一个偶数。程序逻辑功能框图程序逻辑功能框图 建立素数表建立素数表reatPrimeList(PrimeList)X M ?P =M/2?P = 2x = x +2是是否否是是否否是是否否x =

11、4打印该偶数分解式打印该偶数分解式显示显示“哥德巴赫猜想错哥德巴赫猜想错“程序模块结构程序模块结构 主函数主函数main()()子函数生成素数表子函数生成素数表CreatPrimeList( )子函数求下一个素数子函数求下一个素数NextPrimeNomber()()子函数求下一个素数子函数求下一个素数NextPrimeNomber()()程序(生成素数表子函数)程序(生成素数表子函数)#include #include #define M 10001 /#define M 10001 /* * 定义验证范围定义验证范围 * */ /void void CreatPrimeList(intCr

12、eatPrimeList(int PrimeListPrimeList) intint i, j; i, j; for(i=0; iM; i = i+1) for(i=0; iM; i = i+1) PrimeListiPrimeListi = i; = i; i = 2; i = 2; while( i M / 2 ) / while( i M / 2 ) /只需验证一半数据只需验证一半数据 for(j=i+1; jM; j=j+1) for(j=i+1; jM; j=j+1) if(PrimeListjif(PrimeListj!=0 & !=0 & PrimeListj%

13、PrimeListiPrimeListj%PrimeListi=0)=0) PrimeListjPrimeListj = 0; = 0; i = i = NextPrimeNumberNextPrimeNumber(i i,PrimeListPrimeList);); 求下一个素数子函数求下一个素数子函数/函数函数 NextPrimeNumberNextPrimeNumber: : 求下一个素数求下一个素数intint NextPrimeNumber(intNextPrimeNumber(int p, p, intint PrimeListPrimeList) p = p+1; p = p+1

14、; while(PrimeListpwhile(PrimeListp=0)=0) p = p+1; p = p+1; return return PrimeListpPrimeListp; 主函数主函数(VC0201.cpp)void main()void main() intint PrimeListMPrimeListM;intint x,p; x,p;CreatePrimeList(PrimeListCreatePrimeList(PrimeList););x=4;x=4;while(xM)while(xM) p=PrimeList2;p=PrimeList2; while(pM/2&a

15、mp;PrimeListx-p=0) while(p=M/2)coutGreat Discovery=M/2)coutGreat Discoveryendlendl; ;else else coutcoutThe even numberx=p+x-pThe even numberx=p+x-pendlendl; ;x=x+2;x=x+2; 数据类型数据类型n计算机只能存放二进制数据。不同类型的事物如何区分和描计算机只能存放二进制数据。不同类型的事物如何区分和描述?由此产生数据类型。述?由此产生数据类型。n不同类型的数据占据不同长度的存储单元。不同类型的数据占据不同长度的存储单元。n不同类型的数

16、据对应不同的值域范围。不同类型的数据对应不同的值域范围。n不同类型的数据对应不同的操作(运算)及规则。不同类型的数据对应不同的操作(运算)及规则。n数据类型越丰富,求解能力越强大。数据类型越丰富,求解能力越强大。C+数据类型的分类数据类型的分类typedefn对已有类型定义一个新名称,方便理解。对已有类型定义一个新名称,方便理解。n如:梯形的高度是浮点数,为一看就知道某个数十如:梯形的高度是浮点数,为一看就知道某个数十高度,可以高度,可以 typedef float HEIGHT;/编译预处理编译预处理1、宏定义、宏定义 #define PI 3.14159 #define Max_Num 1

17、002、文件包含、文件包含 #include “iostream.h” #include 3、条件编译、条件编译 #if 条件条件1 程序段落程序段落1 #else 程序段落程序段落X #endif #ifdefine DEBUG #ifndef DEBUG数据基本形式数据基本形式n在实际数据处理过程中,有些数据经常变化(大批在实际数据处理过程中,有些数据经常变化(大批量),而有些数据不变化(个别)。量),而有些数据不变化(个别)。n变化的量称变量,不变化的量称常量。常量和变量变化的量称变量,不变化的量称常量。常量和变量是计算机语言中数据的两种基本形式。是计算机语言中数据的两种基本形式。n常量

18、和变量的运算规则是有区别的。常量和变量的运算规则是有区别的。数组定义数组定义n 具有相同类型的数据的集合被称为数组。具有相同类型的数据的集合被称为数组。n 和简单变量类似,数组用数组名来标识。一个数组和简单变量类似,数组用数组名来标识。一个数组名用来表示一组同类型的数据;这批同类型的数据名用来表示一组同类型的数据;这批同类型的数据被称为数组元素或分量。被称为数组元素或分量。n数组描述的是顺序数据结构;即数组元素在逻辑上数组描述的是顺序数据结构;即数组元素在逻辑上相邻,在物理也相邻。在内存中它们是连续存放的相邻,在物理也相邻。在内存中它们是连续存放的。n数组和变量一样,必须先定义,后使用。数组和

19、变量一样,必须先定义,后使用。数组说明数组说明n数组必须先说明,才能使用。说明的一般格式:数组必须先说明,才能使用。说明的一般格式: 类型说明符类型说明符 数组名数组名常数表达式常数表达式,.n说明:说明:l类型说明符可以是任意类型(例如char、int)l常数表达式的值是数组元素的个数l数组可以是一维、二维或多维数组;是几维数组,数组名右边就有几对方括号,分别确定各维的长度(元素个数);n举例:举例: char a10,str1080;/*10行行80列的字符数组列的字符数组*/ int s110010,i11000;存贮结构存贮结构n存贮结构也称物理结构;它描述数据在计算机中的存贮结构也称

20、物理结构;它描述数据在计算机中的表示(又称映象)。表示(又称映象)。n逻辑结构和存贮结构的区别:逻辑结构和存贮结构的区别:(1 1)逻辑结构逻辑结构是从逻辑关系(某种顺序)上观察数据是从逻辑关系(某种顺序)上观察数据,它是独立于计算机的;可在理论上、形式上进行,它是独立于计算机的;可在理论上、形式上进行研究、运算。研究、运算。(2 2)存储结构存储结构是逻辑结构在计算机中的实现,它是依是逻辑结构在计算机中的实现,它是依赖于计算机的;离开计算机,则无法进行任何操作赖于计算机的;离开计算机,则无法进行任何操作。(3 3)任何一个算法的设计取决于选定的数据逻辑结构)任何一个算法的设计取决于选定的数据

21、逻辑结构;而算法的最终实现依赖于采用的存储结构。;而算法的最终实现依赖于采用的存储结构。一维数组存储结构一维数组存储结构n逻辑结构:逻辑结构: 由一串数据构成的向量表,每个元素的下标值确定由一串数据构成的向量表,每个元素的下标值确定了各元素在此数据表中的位置。例如了各元素在此数据表中的位置。例如, , A5A5排序次序为:排序次序为: A0A0,A1A1,A2A2,A3A3,A4A4n存贮结构:存贮结构: 数组元素存放为一片连续的存储单元,其元素在内数组元素存放为一片连续的存储单元,其元素在内存中的存放顺序与逻辑结构是一致的;即所谓存中的存放顺序与逻辑结构是一致的;即所谓“逻逻辑上相邻,物理上

22、也相邻辑上相邻,物理上也相邻”。A5A5的存储结构为:的存储结构为:A0A1A2A3 A4二维数组存储结构二维数组存储结构n逻辑结构:逻辑结构: 二维数组恰似一张表格(或矩阵)。数组元素中的第一个下标值表示该二维数组恰似一张表格(或矩阵)。数组元素中的第一个下标值表示该元素在表格中的行号,第二个下标为列号。元素在表格中的行号,第二个下标为列号。 M33M33具有如下逻辑结具有如下逻辑结构:构: M00 M01 M02M00 M01 M02 M10 M11 M12 M10 M11 M12 M20 M21 M22 M20 M21 M22n存贮结构:存贮结构: 二维数组在内存中按一维数组存放、占据一

23、片连续的存贮单元;是二维数组在内存中按一维数组存放、占据一片连续的存贮单元;是“按行顺序按行顺序”在内存中分配存贮单元。数组在内存中排列如下:在内存中分配存贮单元。数组在内存中排列如下:m01 m02 m10 m11 m12 m20 m21 m22m00三维数组存储结构三维数组存储结构n三维数组可以看成是若干个二维数组;在内存中也三维数组可以看成是若干个二维数组;在内存中也按一维数组存放。按一维数组存放。C233C233的数组元素排列如下的数组元素排列如下:n三维数组元素在内存中三维数组元素在内存中 的排列顺序为:的排列顺序为: C000、 C001 、 C002、 C010、 C011、 C

24、012、 C020、 C021、 C022、 C100、 C101、 C102、 C110、 C111、 C112、 C120、 C121、 C122。C000 C001 C002C010 C010 C012C020 C021 C022C100 C101 C102C110 C110 C112C120 C121 C122字符型数组和字符串处理函数字符型数组和字符串处理函数n字符数组是用于存放字符串和字符型数据的。字符数组是用于存放字符串和字符型数据的。nVC+语言提供了许多字符串处理函数。使用这些函语言提供了许多字符串处理函数。使用这些函数,可以提供字符处理的效率。数,可以提供字符处理的效率。字

25、符数组字符数组n用用char 语句定义的数组。字符数组的元素是单个字语句定义的数组。字符数组的元素是单个字符数据。符数据。n例如:例如: (笨办法赋初值)(笨办法赋初值) char name 4=A,B,C; 或: char name4; name0=A; name1=B; name2=C; name3=0;n例如:例如:char name40 = “Visual C+”;strcpy(name,”Visual Basic”);cinname; coutname;字符串处理函数字符串处理函数n字符串处理函数的说明都包含在字符串处理函数的说明都包含在“string.h”头文件中头文件中,要使用字

26、符串处理函数,必须使用,要使用字符串处理函数,必须使用“#include”预预处理语句(处理语句(#include )。n常用的字符串处理函数有:常用的字符串处理函数有:lstrcat() 字符串连接lstrcpy()字符串拷贝lstrlen() 求字符串长度lstrstr() 在字符串中查找另一个子串lstrchr() 在字符串中查找字符例:计算字符串的长度例:计算字符串的长度n算法分析:算法分析:1)设一个计数器变量len=02)从数组slen第一个元素开始进行处理3)若当前的元素值slen非空(0),则len+1,继续执行3;否则,退出循环。4)打印结果len程序逻辑功能框图程序逻辑功能

27、框图len = 0strnlen=len+1打印结果打印结果lenstrlen=0?是是否否程序模块结构程序模块结构主函数主函数main()子函数求字符串长度子函数求字符串长度strlen(str ) / /* * 函数函数 strlenstrlen(): (): 求字符串的长度求字符串的长度 * */ / intint strlenstrlen(char string)(char string) intint lenlen = 0; = 0; while(string while(stringlenlen!=0)!=0) lenlen = = len len+1;+1; return ret

28、urn lenlen; ; 主函数主函数/用于调试函数用于调试函数 strlenstrlen() () 的主函数的主函数 # #include include .hmain()main() char string = This is a sample.; char string = This is a sample.; coutcoutThe length of string:string;The length of string:string; coutcoutisisstrlenstrlen(string)(string)endlendl; ; 程序运行结果:程序运行结果: The len

29、gth of string: The length of string: is 17. is 17. 地地 址址n计算机的内存储器就象一个一维数组,每个数组元素就是一计算机的内存储器就象一个一维数组,每个数组元素就是一个存储单元。个存储单元。n地址是存放信息数据的内存单元的编号。地址是存放信息数据的内存单元的编号。n程序中定义的任何变量、数组或函数等,在编译时都会在内程序中定义的任何变量、数组或函数等,在编译时都会在内存中分配一个确定的地址单元。存中分配一个确定的地址单元。nC+规定:规定:l变量的地址: 可以用取地址运算符& 来获取l数组的地址: 可以用数组名表示l函数的地址: 可以

30、用函数名表示存储结构简图存储结构简图指指针针n指针是指针是C+语言中的一种数据类型,是专门用来处理地址的语言中的一种数据类型,是专门用来处理地址的;也可以说:指针是包含另一个变量地址的变量。;也可以说:指针是包含另一个变量地址的变量。n指针变量用星号指针变量用星号*表示,定义指针变量是通过定义该指表示,定义指针变量是通过定义该指针所指向的变量类型进行的。针所指向的变量类型进行的。l例如: int *ptr; ptr是一个整形的指针变量n指针运算符指针运算符*具有取地址内容的作用。具有取地址内容的作用。l例如: x=5; ptr=&x; *(&x) 即取即取x地址中值地址中值5地

31、址和指针的关系地址和指针的关系n用来存放地址的变量就叫作指针变量。用来存放地址的变量就叫作指针变量。 n设设 intint x x,* *ptrptr ; 当定义了整型变量当定义了整型变量x x和指针和指针ptrptr后,系统分配两个存储单元后,系统分配两个存储单元10001000和和10041004;n执行执行 x=3x=3; n执行执行 ptrptr=&x ;=&x ; n执行执行 * *ptrptr = 5 = 5;100010043xptr100010003510001004&x1004&x指针的声明指针的声明 n声明的一般格式:声明的一般格式: 类型描

32、述符类型描述符 *指针变量名表;指针变量名表;n举例:举例:int * ptr;float *array;char *s1,*s2;n指针类型指针类型内存地址值是固定不变的,不同类型的指针本身所占据的存储区域都一样大。l规定了用指针间接访问数据时的访问方式l为指针的算术运算提供依据指针声明的举例指针声明的举例n指针在定义后必须指针在定义后必须初始化初始化才能使用;否则,结果不确定。才能使用;否则,结果不确定。n指针初始化的一般格式:指针初始化的一般格式: 指针变量名指针变量名 = 数据对象;数据对象; 数据对象可以是变量、数组、函数、结构等。数据对象可以是变量、数组、函数、结构等。n举例:举例

33、:int *ptr,i=10; ptr=&i; /指向单个变量char *sp=“string”; /指向字符串int a5,*ap; ap=a; /指向数组int max(),(*fp)(); fp=max; /指向函数“* *”和和“&”&”运算符运算符n“&”称为取地址运算符,用以返回变量的指针,即变量的地称为取地址运算符,用以返回变量的指针,即变量的地址;址;n“*”称为指针运算符,用以返回指针所指向的基类型变量的称为指针运算符,用以返回指针所指向的基类型变量的值。值。n例如:例如:lint *ptr;/声明ptr是一个int型指针ly = *ptr;/

34、将指针ptr所指向的值赋给变量ylint &ref;/声明一个int型的引用ref lptr = &x;/取变量x的地址l*ptr = 2; 指针变量的其他运算指针变量的其他运算n指针赋值指针赋值 将一个指针赋值给另一个指针,结果是两个指针指向一个相同的地址单元将一个指针赋值给另一个指针,结果是两个指针指向一个相同的地址单元。 例如,例如, jp=&a;ip=jp; ip和和jp都指向都指向a。n指针的关系运算指针的关系运算表示所指变量在内存中的位置关系表示所指变量在内存中的位置关系例如,例如, ip = =jpn指针的算术运算指针的算术运算只进行加减,完成指针移动,实

35、现对不同数据单元的访问操只进行加减,完成指针移动,实现对不同数据单元的访问操作。作。对不同的类型,移动的单位长度不同。对不同的类型,移动的单位长度不同。 指针指针+/- 整数表达式整数表达式 例如,例如, ptr+; 指针指针ptr右移一个地址。右移一个地址。指针与数组指针与数组n计算机中处理数组时,实际上是将计算机中处理数组时,实际上是将aiai转换成转换成* *(a+a+下标表下标表达式值)的形式。即达式值)的形式。即 ai ai * *(a+ia+i) 因为数组名可以表示该数组的首地址,所以也就有:因为数组名可以表示该数组的首地址,所以也就有: ai ai * *(a+ia+i) * *

36、(ptrptr+i+i) 其中,其中,ptrptr是指向是指向a a的指针。的指针。n由此可见,用指针处理数组及元素是最快捷的方式由此可见,用指针处理数组及元素是最快捷的方式数组清零数组清零n算法分析(用指针实现)算法分析(用指针实现)令指针指向数组首地址向当前地址赋0值指针+重复、直到整个数组处理完毕为止; 用循环语句实现,结束条件是循环N次,N是数组的元素个数。数组清零数组清零void clear_array(float *ptr, int len) float *qtr = ptr+len; while(ptrqtr) *ptr = 0.0; ptr+; 动态存储分配动态存储分配n运算符

37、运算符new用来申请所需的内存用来申请所需的内存 = new ();也可以为数组申请内存:也可以为数组申请内存: = new ;n运算符运算符delete用于释放先前申请到的存储块用于释放先前申请到的存储块delete ;n若要释放数组的空间,必须放一个空的方括号若要释放数组的空间,必须放一个空的方括号在操作符在操作符delete和指向该类对象数组的指针之间。和指向该类对象数组的指针之间。int *p = new int size;deletep; 返回指针的函数返回指针的函数n一个函数只能有一个返回值。一个函数只能有一个返回值。n通过返回一个指针,函数就可以和调用者交换大量数据。通过返回一个

38、指针,函数就可以和调用者交换大量数据。例如:返回诸如数组、字符串等包含多个数值的数据类型。n例例6.2 将月份的数值(将月份的数值(1-12)转换成对应的英文月份名称。)转换成对应的英文月份名称。将表示月份的数值(将表示月份的数值(1 12)转换成对应的英文月)转换成对应的英文月份名称。份名称。char char * *month_name(month_name(intint n) n) static char static char * *month=month= Illegal month, Illegal month, January, February, March, April, M

39、ay, January, February, March, April, May, June, July, August, September, June, July, August, September, “October”, “November”, “December” “October”, “November”, “December” ; ; return (n=1 & n=1 & n=12)?monthn:month0; 主函数主函数void main( )void main( ) coutcoutendlendl; ; coutcoutmonth_name(3);mo

40、nth_name(3); coutcout“ 15,2000”;“ 15,2000”; 指向函数的指针指向函数的指针n说明格式说明格式 (*)();n例:例:double (*func)() = sin;/ 说明一个指向函数的指针double y, x;/ 说明两个双精度类型的变量x = .;/ 计算自变量x的值y = (*func)(x);/ 通过指针调用库函数求x的正弦n例例6-7 通用数值积分函数通用数值积分函数例:例: 通用数值积分函数通用数值积分函数 #include #include double integral(double a, double b, double (*fun)

41、(), int n) double h = (b-a)/n; double sum = (*fun)(a)+(*fun)(b)/2; int i; for(i=1; in; i+) sum += (*fun)(a+i*h); sum *= h; return sum; 通用数值积分函数的主函数通用数值积分函数的主函数/ 用于调试函数用于调试函数 integral() 的主函数的主函数 double func(double x) return sin(x)+x; void main() double sum; sum = integral(0.0, 1.0, func, 1000); cout(

42、The Integral of sin(x)+x, 0, 1 is ” = ,=,= 高于高于 = , != 赋值运算赋值运算 关系运算关系运算 & | 赋值运算赋值运算 &、| 关系运算关系运算 算术运算算术运算z&x*y0&!isgreat(z)n判别闰年表达式:判别闰年表达式:(year %4=0 & year%100!=0)|year%400=0nx c或或x b至少之一成立至少之一成立 x = bni和和j均小于或等于均小于或等于100,或者,或者i和和j均大于均大于k ( I = 100 & j k & j k )n选未婚、选

43、未婚、30岁以上女讲师和岁以上女讲师和35岁以上男副教授岁以上男副教授 ! 婚否婚否 & ( (性别性别=男男& 职称职称=副教授副教授& 年龄年龄=35) | (性别(性别=女女& 职称职称=讲师讲师& 年龄年龄=30))赋值运算符和赋值表达式赋值运算符和赋值表达式n赋值运算符赋值运算符 “=”: 格式:格式: V = e 将表达式的值赋值给变量将表达式的值赋值给变量V, 其副作用是将表达式的值存入变量其副作用是将表达式的值存入变量V。n复合赋值运算符:复合赋值运算符: 格式:格式: V op = e 等价于:等价于: V = V op e 例如:例如

44、: a += 5, 等价于等价于 a = a + 5n复合赋值运算符有:复合赋值运算符有: +=、- =、*=、/=、%=等等10个个自增、自减运算符自增、自减运算符n表表4-1 自增运算符和自减运算符的用法自增运算符和自减运算符的用法表达式表达式的值 副作用i+ii的值增大1+ii+1i的值增大1i-ii的值减小1-ii-1i的值减小1表达式中各运算符的运算顺序表达式中各运算符的运算顺序优先级别优先级别 运算符运算符 运算形式运算形式 名称或含义名称或含义 1()(e)ae圆括号圆括号数组下标数组下标2- + -e+x或或x+负号和正号负号和正号自增运算和自减运算自增运算和自减运算3* /

45、% e1*e2 乘、除和求余乘、除和求余 4+ - e1+e2 加和减加和减 6 = e1e2 关系运算(比较)关系运算(比较) 7= != e1=e2 等于和不等于比较等于和不等于比较 函数的定义函数的定义n函数是构成程序的基本模块,每个函数完成一个计算函数是构成程序的基本模块,每个函数完成一个计算或执行一个特定的动作,或执行一个特定的动作, 具有相对独立的功能。具有相对独立的功能。nC+提供三种类型的函数:提供三种类型的函数:lmain主函数l标准库函数l用户自定义函数格式格式n函数必须先定义,后使用。函数必须先定义,后使用。/与变量类似n函数定义的一般格式:函数定义的一般格式: () 注意事项注意事项n函数类型说明函数类型说明可以省略,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论