结构化程序设计一

复杂算法

结构化程序设计方法:模块的分解和组装

函数的定义和调用

+数据管理

分散管理

集中管理

一、结构化程序设计方法

+结构化程序设计方法就是

将一个求解复杂问题的过程划分为若干个子过程,每个子过程完成一个独立的、相对简单的功能;用算法描述各个过程的操作步骤,每个算法称为一个模块;采用“自顶向下,逐步细化”的方法逐步分解和设计算法模块,再通过调用关系将各个模块组织起来,最终形成一个完整的数据处理算法

+基于模块的团队分工协作开发

自顶向下,逐步细化

+常见的某块调用关系

模块重用 被上层多个模块调用

+主模块与被调模块

+结构化程序设计方法

模块化是团队分工的基础

模块接口是团队协作的基础

模块重用影响大型软件开发的组织与管理方式

+代码重用

跨时间重用,现在的软件开发项目可以重用以前项目所开发的代码

跨项目重用,

跨组织机构重用

+模块的额4大要素

模块名称、输入参数、返回值、算法

+模块设计者

重实现算法

+模块调用者

要了解模块的接口

+主模块与子模块

+c++语言支持结构化程序设计方法,以函数的语法形式来描述和组装模块,即函数的定义和调用

二、函数的定义和调用

1.定义函数

  函数类型 函数名(形式参数列表)
  {
    函数体
  }

函数类型:函数返回值(即函数值)的数据类型。由函数功能决定,可以是除数组之外的任何数据类型,省略是默认为int型,某些函数知识完成某种功能,但没有返回值,此时函数类型应定义为void

函数名:由程序员命名,符合标识符命名规则,通常函数之间不能重名

形参列表:定义了函数接收输入参数所需的变量,这些变量称为形式参数,简称为形参。可以有多个形参,每个形参以“数据类型 变量名”的形式定义,形参之间用逗号隔开。某些函数可能不需要输入参数,此时形式参数列表省略为空

函数体:描述数据处理算法的C++语句序列,用{} 括起来,函数体中可以定义专供本函数使用的变量,如果有返回值,则应使用return语句返回,返回值的数据类型应与函数类型一致

“ 函数类型 函数名(形式参数列表)”也称函数头,定义了函数的调用接口,及函数名、输入参数和返回值类型。

2.函数的调用

  函数名(实际参数列表)

实参列表指定函数所需要的输入参数。调用函数时应按被调用函数的要求给定具体的输入参数值,这些参数值称为实际参数,简称实参。实参可以是常量请、变量或表达式,参数之间用逗号隔开。调用时,首先将实参值按位置顺序一一赋值给对应的形参变量,这称为函数调用时的参数传递。实参与形参应当个数一致,类型一致

一个函数调用另一个函数,调用别人的函数称为主调函数,被调用的函数称为被调函数

+数据参数化

+函数的执行

执行子函数时暂停主函数执行跳转到子函数,子函数执行结束后返回主函数

+主调函数与被调函数间的2次数据传递

主调函数传给被调函数:实参--形参

被调函数传给主调函数:返回值

+函数的声明

  函数类型 函数名(形参列表);

函数(未定义)应在被调用之前声明

函数先定义后调用

三、数据的管理策略

+函数间需共享数据

数据分散管理:将数据交给各个函数管理,函数各自定义变量申请自己所需的内存空间,其它函数不能之间其中的数据, 需要时可通过数据传递来实现共享。采用分散管理策略时,定义变量的语句放在函数的函数体中,这样的变量称为"局部变量"。局部变量属本函数所有,其他函数不能直接访问

数据集中管理:将数据集中管理,统一定义公共的变量来存放共享数据,所有函数都可以访问。采用集中管理策略时,应将定义变量语句放在函数外面(不在任何函数的函数体中),这样的变量称为全局变量。全局变量属不属于任何函数,是公共的,所有函数都可以访问

+分散管理

按需传递

形实结合

返回值

+集中管理,全局共享

+变量作用域

局部变量:只能被本函数访问。

全局变量:可以被所有函数访问

c++源程序中的变量需要遵循“先定义 后访问”的原则,即变量在定义之后,其后续的语句才能访问该变量。变量的作用域(Scope)指的是C++源程序中可以访问该变量的代码区域

C++语言根据定义位置将变量分为局部变量、全局变量和函数形参等3种类型,他们具有不同的作用域。作用域也分为3种,分别是块作用域、文件作用域和函数原型作用域。所有变量只能在其作用域范围内访问

局部变量 块作用域 {}

全局变量 文件作用域

形参

函数定义中的形参具有块作用域,这里的代码块指的是该函数的函数体。函数定义中的形参只能被本函数体内的语句访问

函数声明中的形参不能也不需要被访问,其作用域为空,称为函数原型作用域。声明函数时,其形参列表可以只声明形参个数和类型,而形参名可以省略。

全局变量 先声明,后访问

extern int r;//使用外部声明语句延伸全局变量r的作用域

+变量的重名及局部优先原则

c++规定:同一作用域中的变量不能重名,不同作用域中的变量可以重名

访问重名变量时:局部优先

四、程序代码和变量的存储原理

+程序加载后立即为全局变量分配内存。全局变量将之一占用所分的内存,直到程序结束推测出时才被释放,这种内存分配方法称为静态分配

+局部变量时在计算机执行到其定义语句时才分配内存,到其所在代码块执行结束即被释放,这种内存分配方法称为自动分配

+生存期

程序生存期:从加载到执行结束退出这个时间段是一个程序在内存中的生存期

变量生存期:从内存分配到释放的时间段

+计算机只能执行函数调用语句的具体过程:

  • 动态内存分配

    new运算符来分配内存

    delete运算符将其释放 使用完后

    动态内存分配方法让程序员更主动、更直接地管理内存,根据需要分配尽可能多少的内存,同时尽早释放以减少内存的占用时间

+函数指针

可以通过内存地址访问变量,也可以通过内存地址调用函数

计算机程序在执行时被读如内存,在内存中建立一个程序副本,其中包括各函数的代码。也就是所,智能型时程序中各函数的代码时存放在内存中的

调用函数一般时通过函数名来调用,也可以函数代码的首地址来调用

通过地址调用函数需分为3步,一次时定义函数型指针变量、将函数首地址赋值给该指针变量、通过指针变量间接调用函数

 函数类型(*指针变量名)(形参列表);
  double fun(double x,int y){return(x+y);}
  double (*p)(double,int);
  p=fun1;
  cout<<fun1(3.5,2);
  cout<<(*p)(3.5,2);
  cout<<p(3.5,2);

函数名实际上可以理解成时指向函数代码的指针,只不过它时一种指针常量,固定指向某个函数

一个函数型指针变量可以i指向多个函数、这些函数都需要与指针变量匹配,即他们具有相同的形参和返回值类型

五、函数间参数传递的3种方式

+参数传递

值传递

引用传递

指针传递

+值传递

将主调函数中实参的值传递给被调函数的形参。形参单独分配内存,另外保存一份实参值的副本,被调用函数访问形参中的副本

值传递只是将主调函数中实参的值传递给被调函数的形参,无论被调函数如何修改形参都不会影响到实参

+引用传递

函数中定义的局部变量不能被其他函数直接访问,但能够被间接访问。引用传递就是传递实参变量的引用,被调函数通过该引用间接访问主调函数中的变量,从而达到传递数据的目的

采用引用传递时,被调函数的形参需定义成引用变量

特点:

引用传递将被调函数的形参定义成主调函数中实参变量的引用,被调函数通过该引用间接访问主调函数中的变量

被调函数修改形参实际上修改的是对应的实参。换句话说,主调函数可以通过引用将数据传给被调函数,被调函数也可以通过该引用修改实参的值将数据传回主调函数。引用传递是一种双向数据传递机制

引用传递时,实参必须是变量

引用传递的好处:一是形参直接引用实参,不需分配内存、传递数值,这样可以提高函数调用速度,降低内存占用;二是可以通过引用实现双向数据传递

+指针传递

指针传递就是传递实参变量的内存地址,被调用函数通过该地址间接访问主调函数中的变量,从而达到传递数据的目的

采用指针传递时,被调函数的形参需定义成指针变量,以接收实参变量的内存地址

特点:

指正传递将主调函数中实参变量的内存地址传给被调函数的指针形参,被调函数通过该内存地址间接访问主调函数中的变量

被调函数可通过内存地址修改对应的实参。指针传递是一种双向数据传递机制

指针传递时,实参必须是指针变量或指针表达式

指针传递的好处:一是可以通过内存地址实现双向数据传递,二是在传递批量数据(例如数组)时只需要传递一个内存首地址,这样可以提高函数调用速度,降低内存占用

六、在函数间传递数组

+函数在函数体中定义的数组时局部变量,其它函数不能直接访问其中的数据,需要时可通过传递来实现对数组的共享

+传递数组时,被调用函数需定义数组形式的形参,同时还需传递表明数组大小的参数,例如数组的元素个数

+计算机内部对数组的管理和访问是通过指针(即内存地址)来实现的

+在函数间传递数组,所传递的实际上是数组的首地址。换句话说,函数间数组传递采用的是指针传递,而不是值传递

原文地址:https://www.cnblogs.com/OceanF/p/9251030.html

时间: 2024-10-12 17:40:30

结构化程序设计一的相关文章

结构化程序设计 ?

面向对象程序设计的雏形早在1960年的Simula语言中就出现过.当时程序设计领域正面临一种危机:面对越来越复杂的软 硬件系统,传统的以C语言为代表的面向过程程序设计思想已越来越无法满足现实的需要——面向过程的设计无法很好地描述整个系统,同时设计结果也让人难以理 解,因而给软件的实现以及后期的维护带来了巨大的挑战,项目越大越难以实现,越到项目后期越难以实现,人们正陷入一场前所未有的软件危机中.为了化解这场 软件危机,人们开始寻找能够消灭“软件危机”这头怪兽的“银弹(silver bullet)”

结构化程序设计

结构化程序设计方法的主要原则可以概括为自顶向下,逐步求精,模块化,限制使用goto语句. 1.自顶向下:程序设计时,应先考虑总体,后考虑细节:先考虑全局目标,后考虑局部目标.不要一开始就过多追求众多的细节,先从最上层总目标开始设计,逐步使问题具体化. 2.逐步求精:对复杂问题,应设计一些子目标作为过渡,逐步细化. 3.模块化:一个复杂问题,肯定是由若干稍简单的问题构成.模块化是把程序要解决的总目标分解为子目标,再进一步分解为具体的小目标,把每一个小目标称为一个模块. 4.限制使用goto语句 结

【结构化程序设计-01】

结构化程序设计简介 •结构化程序设计方法主张按功能来分析系统需求,其主要原则可概括为自顶向下,逐步求精,模块化等.结构化 程序设计首先采用结构化分析(Structrued Analysis,即SA)方法对系统进行需求分析,然后使用结构化设计 (Structrued Design,即SD)方法对系统进行概要设计.详细设计,最后采用结构化编程(Structrued Program,即SP)方式来实现系统.使用这种SA.SD和SP的方式可以较好的保证软件系统的开发进度和质量. •因为结构化程序设计方法

面向对象和结构化程序设计的区别

结构化编程强调功能模块. 结构化程序的概念首先是从以往编程过程中无限制地使用转移语句而提出的.转移语句可以使程序的控制流程强制性的转向程序的任一处,在传统流程图中,就是用上节我们提到的"很随意"的流程线来描述这种转移功能.如果一个程序中多处出现这种转移情况,将会导致程序流程无序可寻,程序结构杂乱无章,这样的程序是令人难以理解和接受的,并且容易出错.尤其是在实际软件产品的开发中,更多的追求软件的可读性和可修改性,象这种结构和风格的程序是不允许出现的.比如:C,FORTRAN,PASCAL

第一次过程性考核——结构化程序设计

码云仓库的地址:https://gitee.com/wslgx/codes 7-1 Hello World! (5 分) 本题要求编写程序,输出一个短句"Hello World!". 输入格式: 本题目没有输入. 输出格式: 在一行中输出短句"Hello World!". 程序的设计思路:直接在输出代码里填上所要输出的内容. 知识点:System.out.println("要输出的内容"):. 运行结果: 7-2 求1到100的和 (10 分)

结构化程序设计二

+多文件结构 +编译预处理指令 +系统函数 +自定义数据类型 一.C++源程序的多文件结构 +++++ 可以只声明 不使用 +头文件 二.编译预处理指令 三.几种特殊形式的函数 四.系统函数 五.自定义数据类型 六. 原文地址:https://www.cnblogs.com/OceanF/p/9251105.html

通过学习学生信息管理系统软件,C程序中,如何设计和编写一个应用系统?

1 从文件操作角度分析. 文件的概念以及文件类型指针 在c语言中,文件被看成是由一个一个的字符或字节组成的.根据数据的组织形式,文件可分为文本文件和二进制文件两种. 文本文件又被称为ASCII文件,文本文件在磁盘中存放时每个字符对应一个字节,用于放其对应的ASCII码.文本文件可在屏幕上按字符显示. 二进制文件时将数据转换成二进制形式然后存储起来的文件.二进制文件虽然也可在屏幕上显示,但其内容无法读懂. 文件指针是一中结构体类型变量,c编译系统已将结构定义好,并命名为FILE,我们直接用定义就好

c语言中如何设计和编写一个应用系统?

C程序中,如何设计和编写一个应用系统? 一. C语言文件的操作 1. 文件操作的基本方法: C语言将计算机的输入输出设备都看作是文件.例如,键盘文件.屏幕文件等. 向屏幕输出一个信息,例如"Hello"是 #include.h> int main() { printf("Hello\\n"); } 从键盘接收一个字符串然后显示是 #include.h> int main() { char a[10]; scanf("%s",&

java设计原则:16种原则

一   类的设计原则   1 依赖倒置原则-Dependency Inversion Principle (DIP) 2 里氏替换原则-Liskov Substitution Principle (LSP) 3 接口分隔原则-Interface Segregation Principle (ISP) 4 单一职责原则-Single Responsibility Principle (SRP) 5 开闭原则-The Open-Closed Principle (OCP) 二  包的设计原则   6