免费智能真题库 > 历年试卷 > 数据库系统工程师 > 2020年下半年 数据库系统工程师 上午试卷 综合知识
  第22题      
  知识点:   程序语言的基本成分   数组   程序设计   程序设计语言   程序设计语言的基本成分   分包
  关键词:   程序设计语言   对象   分包   枚举   数据组织   数组   程序设计   数据   语言        章/节:   计算机软件基础知识       

 
程序设计语言的基本成分包括数据、运算、控制和(22)。数据是程序操作的对象,按照数据组织形式可以分为多种类型,其中枚举属于(23)类型;数组属于(24)类型。
 
 
  A.  存储
 
  B.  分配
 
  C.  传输
 
  D.  函数
 
 
 

 
  第23题    2021年上半年  
   62%
  第23题    2009年上半年  
   46%
函数调用时,基本的参数传递方式有传值与传地址两种,(23)。
  第25题    2009年上半年  
   51%
关于程序语言的叙述,错误的是(25)。
   知识点讲解    
   · 程序语言的基本成分    · 数组    · 程序设计    · 程序设计语言    · 程序设计语言的基本成分    · 分包
 
       程序语言的基本成分
        程序语言的基本成分包括数据、运算、控制和传输。
               程序语言的数据成分
               程序语言的数据成分指其程序中的数据对象。数据对象总是对应着应用系统中某些有意义的东西,数据表示则指示了程序中值的组织形式。数据类型用于描述数据对象,还用于在基础机器中完成对值的布局,同时还可用于检查表达式中对运算的应用是否正确。
               数据是程序操作的对象,具有存储类别、类型、名称、作用域和生存期等属性,使用时要为它分配内存空间。数据名称由用户通过标识符命名,在一些语言中,标识符是由字母、数字和下画线“_”组成的标记;类型说明数据占用内存的大小和存放形式;存储类别说明数据在内存中的位置和生存期;作用域则说明可以使用数据的代码范围;生存期说明数据占用内存的时间范围。从不同角度可将数据进行不同的划分。
                      常量和变量
                      按照程序运行时数据的值能否改变,将程序中的数据分为常量和变量。程序中的数据对象可以具有左值和(或)右值,左值指存储单元(或地址、容器),右值是值(或内容)。变量具有左值和右值,在程序运行过程中其右值可以改变;常量只有右值,在程序运行过程中其右值不能改变。
                      全局变量和局部变量
                      按数据的作用域范围,可将其分为全局量和局部量。系统为全局变量分配的存储空间在程序运行的过程中一般是不改变的,而为局部变量分配的存储单元是可以动态改变的。
                      数据类型
                      按照数据组织形式的不同可将数据分为基本类型、用户定义类型、构造类型及其他类型。以C/C++为例,其数据类型如下:
                      (1)基本类型:整型(int)、字符型(char)、实型(float、double)和布尔类型(bool)。
                      (2)特殊类型:空类型(void)。
                      (3)用户定义类型:枚举类型(enum)。
                      (4)构造类型:数组、结构、联合。
                      (5)指针类型:type*。
                      (6)抽象数据类型:类类型。
                      其中,布尔类型和类类型由C++语言提供。
               程序语言的运算成分
               程序语言的运算成分指明允许使用的运算符号及运算规则。大多数高级程序语言的基本运算可以分成算术运算、关系运算和逻辑运算等,有些语言如C/C++还提供位运算。运算符号的使用与数据类型密切相关。为了明确运算结果,运算符号要规定优先级和结合性,必要时还要使用圆括号。
               程序语言的控制成分
               控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序中的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择和循环这三种控制结构来描述。
                      顺序结构
                      顺序结构用来表示一个计算操作序列。计算过程从所描述的第一个操作开始,按顺序依次执行后续的操作,直到序列的最后一个操作,如下图所示。顺序结构内也可以包含其他控制结构。
                      
                      顺序结构示意图
                      选择结构
                      选择结构提供了在两种或多种分支中选择其中一个的逻辑。基本的选择结构是指定一个条件P,然后根据条件的成立与否决定控制流走计算A还是计算B,从两个分支中选择一个执行,如下图(a)所示。选择结构中的计算A或计算B还可以包含顺序、选择和重复结构。程序语言中通常还提供简化了的选择结构,也就是没有计算B的分支结构,如下图(b)所示。
                      
                      选择结构示意图
                      循环结构
                      循环结构描述了重复计算的过程,通常由三部分组成:初始化、循环体和循环条件。其中初始化部分有时在控制的逻辑结构中不进行显式的表示。循环结构主要有两种形式:while型循环结构和do-while型循环结构。while型结构的逻辑含义是先判断条件P,若成立则执行循环体A,然后再去判断条件P;否则控制流就退出循环结构,如下图(a)所示。do-while型结构的逻辑含义是先执行循环体A,然后再判断条件P,若成立则继续执行A的过程并判断条件;否则控制流就退出循环结构,如下图(b)所示。
                      
                      循环结构示意图
                      C/C++语言中的控制语句
                      (1)复合语句。复合语句用于描述顺序结构。复合语句是一系列用“{”和“}”括起来的声明和语句,其主要作用是将多条语句组成一个可执行单元。语法上能出现语句的地方都可以使用复合语句。复合语句是一个整体,要么全部执行,要么一条语句也不执行。
                      (2)if语句和switch语句。
                      ①if语句实现的是双分支的选择结构,其一般形式为:
                      
                      其中,语句1和语句2可以是任何合法的C/C++语句,当语句2为空语句时,可以简化为:
                      
                      使用if语句时,需要注意if和else的匹配关系。C/C++语言规定,else总是与离它最近的尚没有else的if相匹配。
                      ②switch语句描述了多分支的选择结构,其一般形式为:
                      
                      执行switch语句时,首先计算表达式的值,然后用所得的值与列举的常量表达式值依次比较,若任一常量表达式都不能与所得的值相匹配,则执行default的“语句n+1”,然后结束switch语句。若表达式的值与常量表达式i(i=1,2,…,n)的值相同,则执行“语句序i”,当case i的语句i中无break语句时,则执行随后的语句i+1,语句i+2……直到执行完语句n+1后,才退出switch语句;或者遇到break时跳出switch语句。要使得程序在执行“语句i”后结束整个switch语句,则语句i中应包含控制流能够到达的break语句。
                      常量表达式通常为字符型或整型。多个常量表达式可以共用一个语句组。
                      (3)循环语句。C/C++语言中有while、do-while和for三种循环语句,用于描述循环计算的控制结构。
                      ①while语句。while语句描述了先判断条件再执行循环体的控制结构,其一般形式是:
                      
                      其中,循环体语句多于一条时,应使用“{”和“}”括起来。执行while语句时,先计算条件表达式的值,当值为非0时,就执行循环体语句,然后重新计算条件表达式的值后再进行判断,否则就结束while语句的执行过程。
                      ②do-while语句。do-while语句描述了先执行循环体再判断条件的控制结构,其一般格式是:
                      
                      执行do-while语句时,先执行其循环体语句,然后再计算条件表达式的值,若值为非0,则再一次地执行循环体语句,计算条件表达式并进行判断,直到条件表达式的值为0时,才结束do-while语句的执行过程。
                      ③for语句。for语句的基本格式是:
                      
                      可用while语句等价地表示为:
                      
                      for语句的使用是很灵活的,其内部的三个表达式都可以省略,但用于分隔三个表达式的分号“;”不能遗漏。
                      C/C++语言中还有实现控制流跳转的goto、break和continue语句,由于使用goto有可能导致程序的逻辑结构不够清晰,因此不提倡使用。
                      程序语言的传输成分指明语言允许的数据传输方式,如赋值处理、数据的输入和输出等。
               函数
               函数是程序模块的主要成分,它是一段具有独立功能的程序代码。C程序由一个或多个函数组成,每个函数都有一个名字,其中有且仅有一个名字为main的函数,作为程序运行时的起点。函数的使用涉及三个概念:函数定义、函数声明和函数调用。
                      函数定义
                      函数的定义包括两部分:函数首部和函数体。函数的定义描述了函数做什么和怎么做。函数定义的一般格式是:
                      
                      函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。函数所实现的功能在函数体部分进行描述。
                      C/C++程序中所有函数的定义都是独立的。在一个函数的定义中不允许定义另外一个函数,也就是不允许函数的嵌套定义。
                      函数声明
                      对于函数,应该先声明后引用。如果程序中对一个函数的调用在该函数的定义之前进行,则应该在调用前对被调用函数进行声明。函数原型用于声明函数。函数声明的一般形式为:
                      
                      使用函数原型的目的是告诉编译器传递给函数的参数个数、类型以及函数返回值的类型,参数表中仅需要依次列出函数定义时参数的类型,以使编译器能更彻底地检查源程序中对函数的调用是否合适。
                      函数调用
                      当在一个函数(称为主调函数)中需要使用另一个函数(称为被调函数)实现的功能时,便以名字进行调用,称为函数调用。在使用一个函数时,只要知道如何调用就可以了,并不需要了解被调用函数的内部实现。因此,主调函数需要知道被调函数的名字、返回值和需要向被调函数传递的参数(个数、类型、顺序)等信息。函数调用的一般形式为:
                      
                      在C程序的执行过程中,通过函数调用实现了函数定义时描述的功能。函数体中若调用自己,则称为递归调用。
                      调用函数和被调用函数之间交换信息的方法主要有两种:一种是由被调用函数把返回值返回给主调函数;另一种是通过参数带回信息。函数调用时实参与形参间交换信息的方法有值调用和引用调用两种。
                      (1)值调用(Call by value)。若实现函数调用时实参向形式参数传递相应类型的值(副本),则称为是传值调用。这种方式下形参不能向实参传递信息。
                      在C语言中,要实现被调用函数对实参的修改,必须用指针作形参。即调用时需要先对实参进行取地址运算,然后将实参的地址传递给指针形参。本质上仍属于值调用。这种方式实现了间接内存访问。
                      (2)引用调用(Call by Reference)。引用是C++中增加的数据类型,当形参为引用类型时,形参名实际上是实参的别名,函数中对形参的访问和修改实际上就是针对相应实际参数所作的访问和改变。例如:
                      
                      函数调用:swap(a,b);。
                      在实现调用swap(a,b)时,x、y就是a、b的别名,因此,函数调用完成后,交换了a和b的值。
 
       数组
               数组的定义及基本运算
               一维数组是长度固定的线性表,数组中的每个数据元素类型相同。n维数组是定长线性表在维数上的扩张,即线性表中的元素又是一个线性表。
               设有n维数组Ab1b2,…,bn],其每一维的下界都为1,bi是第i维的上界。从数据结构的逻辑关系角度来看,A中的每个元素Aj1j2,…,jn](1≤jibi)都被n个关系所约束。在每个关系中,除第一个和最后一个元素外,其余元素都只有一个直接后继和一个直接前驱。因此就单个关系而言,这n个关系仍是线性的。
               以下面的二维数组Am][n]为例,可以把它看成是一个定长的线性表,它的每个元素也是一个定长线性表。
               
               可将A看作一个行向量形式的线性表:
               Am*n=[[a11a12a1n][a21a22a2n]…[am1am2amn]]
               也可将A看作列向量形式的线性表:
               Am*n=[[a11a21am1][a12a22am2]…[a1na2namn]]
               数组结构的特点如下:
               (1)数据元素数目固定。一旦定义了一个数组结构,就不再有元素的增减变化。
               (2)数据元素具有相同的类型。
               (3)数据元素的下标关系具有上下界的约束且下标有序。
               在数组中通常做下面两种操作:
               (1)取值操作。给定一组下标,读其对应的数据元素。
               (2)赋值操作。给定一组下标,存储或修改与其相对应的数据元素。
               几乎所有的程序设计语言都提供了数组类型。实际上,在语言中把数组看成是具有共同名字的同一类型多个变量的集合。需要注意的是,不能对数组进行整体的运算,只能对单个数组元素进行运算。
               数组的顺序存储
               由于数组一般不作插入和删除运算,也就是说,一旦定义了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动,因此数组适合于采用顺序存储结构。
               对于数组,一旦确定了它的维数和各维的长度,便可为它分配存储空间。反之,只要给出一组下标便可求得相应数组元素的存储位置,也就是说,在数据的顺序存储结构中,数据元素的位置是其下标的线性函数。
               二维数组的存储结构可分为以行为主序(按行存储)和以列为主序(按列存储)两种方法,如下图所示。
               
               二维数组的两种存储方式
               设每个数据元素占用L个单元,mn为数组的行数和列数,那么以行为主序优先存储的地址计算公式为:
               Loc(aij)=Loc(a11)+((i-1)×n+(j-1))×L
               同理,以列为主序优先存储的地址计算公式为:
               Loc(aij)=Loc(a11)+((j-l)×m+(i-1))×L
 
       程序设计
               类和继承
               1)类
               一个类是一些属性和方法的封装体,类的定义用关键字class声明,用关键字public、protected、 private指定类的成员的存取控制属性:private(私有)成员只有类内部的方法才能访问,protected(保护)成员派生类和同一文件夹下的类可以访问,public(公有)成员可以从类的外部访问。默认是public。这体现了面向对象的以下指导思想:尽量将类内部的细节隐藏起来,对类的属性的操作应该通过类的方法来进行。
               另外,public还可以用来修饰类,public类能够被其他文件夹下的类访问,非public类只能被同一文件夹下的类访问。一个.java文件中可以包含多个类,会被编译成多个.class文件,但只能有一个public类,而且该类名要和文件名一样。
               2)继承
               Java中用关键字extends表示类间的继承关系。父类的公有属性和方法成为子类的属性和方法,子类如果有和父类的同名、同参数类型的方法,那么子类对象在调用该方法时,调用的是子类的方法,亦即方法的重置。如果想要调用父类的同名方法,需要用super关键字(属性同理)。
               子类的对象可以作为祖先类的对象使用,即所谓类的向上转换,反之则不行。具体表现在:可以用子类对象来对祖先类对象赋值,可以用子类对象作为实参去调用以父类对象为形参的函数。
               对象的引用本质
               Java中的对象实际上是对象的引用,本质上和C语言中的指针是一样的;但也和C语言指针不尽相同,例如,不能自增、自减,不能强制转换成其他类型。
               例如:
               
               构造方法
               构造方法就是类的对象生成时会被调用的方法。每个类至少有一个构造方法(Constructor),也称构造函数。构造方法的名字和类名相同,没有任何返回类型。每个类都有一个默认的构造方法,但当用户自定义了构造方法后,默认的构造函数就不再有效了。
               重载
               同一个类中的两个或两个以上方法,名字相同,而参数个数不同或参数类型不同,称为重载。注意:不能有各方法名字和参数都一样,而仅仅返回值类型不同。
               静态属性和静态方法
               静态属性和静态方法的声明用关键字static实现,一个类的静态属性只有一份,由所有该类的对象共享。不需要创建对象也能访问类的静态属性和方法,访问方式为"类名.静态属性或静态方法",静态方法与对象无关,因此不能在静态方法中访问非静态属性和调用非静态方法。
               this和super关键字
               这两个关键字颇为重要。this代表当前对象,super代表当前对象的父类的东西。
               this主要用途有以下两个。
               (1)一个构造函数调用另一个构造函数,对构造函数的调用必须是第一条语句。
               (2)将对象自身作为参数来调用一个函数。
               super的用途如下:在子类中调用父类的同名方法,或在子类的构造函数中调用父类的构造函数,此时亦必须是第一条语句。
               多态
               所谓多态,是指通过基类对象调用一个基类和派生类都有的方法时,在运行时才能确定到底调用的是基类的方法还是派生类的方法。多态的好处是增加了程序的可扩展性。多态是通过动态联编实现的,即编译时不确定,程序运行时才确定调用哪个函数。
               抽象类与接口
               1)抽象类
               抽象类通过关键字abstract实现,抽象类的目的是定义一个框架,规定某些类必须具有的一些共性。
               包含抽象方法的类一定是抽象类,所谓抽象方法是指没有函数体的方法。
               抽象类的直接派生类必须实现其抽象方法;抽象类只能用于继承,不能创建对象。
               2)接口(Interface)
               接口用关键字interface声明,只能用于继承。注意:此时关键字为implements(实现)。接口用于替代多继承的概念,能实现多继承的部分特点,又避免了多继承的混乱,还能起到规定程序框架的作用。注意:接口也可以用于多态。
               直接继承了接口的类,必须实现接口中的抽象方法;间接的则可以实现,也可以不实现。
               3)抽象类与接口的异同
               接口和抽象类都不能创建对象。
               抽象类不能参与多继承,抽象类可以有非静态的成员变量,可以有非抽象方法;接口可以参与多继承,所有属性都是静态常量,所有方法都是public抽象方法。
               异常处理
               1)异常概念
               异常,即出错,比如0作为除数、找不到类、打开文件错误、数组越界等。异常如果不进行处理,那么程序运行就会结束;如果进行处理,那么会在执行完异常处理代码后继续运行。
               Java中所有异常类均继承自类Exception。
               Java中的异常类层次结构如下:
               
               此外,还有EOFException、 FileNotFoundException、 MalformedURLException等。
               2)捕获异常
               异常处理的典型用法如下,将可能出现异常的代码放在try块中,其后由一个或多个catch捕获相应异常进行处理,注意只执行第一个匹配的catch块,忽略后面的。
               
               如果某个方法中所产生的异常该方法自己没有处理,那么可以在调用该方法的方法中进行处理,如果自己处理了,那么调用它的方法就无法得到该异常。
               3)抛出异常
               异常除了运行中系统产生的之外,也可以主动抛出异常,用关键字throw,如throw new Exception()。注意:throw只能抛出Throwable子类的异常。
               4)带throws关键字的方法
               带throws关键字的方法声明如下:
               
               强制调用该方法的方法必须处理可能发生的异常,或者将异常重新定向。假定方法A带throws关键字,而方法B中调用了方法A,则方法B中必须有处理方法A中可能产生的异常的语句,或者方法B也带throws关键字,指明调用方法B的方法必须处理异常。
               final关键字
               用final关键字定义的常量,在其初始化或第一次赋值后,其值不能被改变。常量必须先有值,然后才能使用。对于常量的第一次赋值只能在构造函数中进行。
               final对象的值不能被改变,指的是该对象不能再指向其他对象,而不是指不能改变当前对象内部的属性值。
               函数参数声明为final后,函数中不能改变其值。
               final方法是不能被重置的方法。
               final类不能被继承,其所有方法都是final的,但属性可以不是final的。
 
       程序设计语言
        程序设计语言(Programming Language)是用于编写计算机程序的语言。语言的基础是一组记号和一组规则,根据规则由记号构成的记号串的总体就是语言。在程序设计语言中,这些记号串就是程序。程序设计语言包含三个方面,即语法、语义和语用。语法表示程序的结构或形式,即表示构成程序的各个记号之间的组合规则,但不涉及这些记号的特定含义,也不涉及使用者。语义表示程序的含义,即表示按照各种方法所表示的各个记号的特定含义,但也不涉及使用者。语用表示程序与使用的关系。
        程序设计语言的基本成分有:数据成分,用于描述程序所涉及的数据;运算成分,用以描述程序中所包含的运算;控制成分,用以描述程序中所包含的控制;传输成分,用以表达程序中数据的传输。
        程序设计语言按照语言级别可以分为低级语言和高级语言。低级语言有机器语言和汇编语言。低级语言与特定的机器有关、功效高,但使用复杂、繁琐、费时、易出差错。机器语言是表示成数码形式的机器基本指令集,或者是操作码经过符号化的基本指令集。汇编语言是机器语言中地址部分符号化的结果,或进一步包括宏构造。高级语言的表示方法要比低级语言更接近于待解问题的表示方法,其特点是在一定程度上与具体机器无关,易学、易用、易维护。常见的有Java、C、C++、PHP、Python和Delphi等。这类语言与人们使用的自然语言比较接近,大大提高了程序设计的效率。
 
       程序设计语言的基本成分
        程序设计语言的基本成分包括数据、运算、控制和传输等。
               程序设计语言的数据成分
               程序中的数据对象总是对应着应用系统中某些有意义的东西,数据表示则指示了程序中值的组织形式。数据类型用于描述数据对象,还用于在基础机器中完成对值的布局,同时还可用于检查表达式中对运算的应用是否正确。
               数据是程序操作的对象,具有类型、名称、作用域、存储类别和生存期等属性,在程序运行过程中要为它分配内存空间。数据名称由用户通过标识符命名,标识符常由字母、数字和称为下画线的特殊符号“_”组成;类型说明数据占用内存空间的大小和存放形式;作用域则说明可以使用数据的代码范围;存储类别说明数据在内存中的位置;生存期说明数据占用内存的时间范围。从不同角度可将数据进行不同的划分。
               (1)常量和变量。按照程序运行时数据的值能否改变,将数据分为常量和变量。程序中的数据对象可以具有左值和(或)右值。左值指存储单元(或地址、容器),右值是值(或内容)。变量具有左值和右值,在程序运行的过程中其右值可以改变;常量只有右值,在程序运行的过程中其右值不能改变。
               (2)全局变量和局部变量。按作用域可将变量分为全局变量和局部变量。一般情况下,系统为全局变量分配的存储空间在程序运行的过程中一般是不改变的,而为局部变量分配的存储单元是动态改变的。
               (3)数据类型。按照数据组织形式的不同可将数据分为基本类型、用户定义类型、构造类型及其他类型。以C/C++为例,其数据类型如下。
               .基本类型:整型(int)、字符型(char)、浮点型(float、double)和布尔类型(bool)。
               .特殊类型:空类型(void)。
               .用户定义类型:枚举类型(enum)。
               .构造类型:数组、结构、联合。
               .指针类型:type*。
               .抽象数据类型:类类型。
               其中,布尔类型和类类型是C++在C语言的基础上扩充的。
               程序设计语言的运算成分
               程序设计语言的运算成分指明允许使用的运算符号及运算规则。大多数高级程序设计语言的基本运算可以分成算术运算、关系运算和逻辑运算等类型,有些语言如C(C++)还提供位运算。运算符号的使用与数据类型密切相关。为了明确运算结果,运算符号要规定优先级和结合性,必要时还要使用圆括号。
               程序设计语言的控制成分
               控制成分指明语言允许表述的控制结构,程序员使用控制成分来构造程序的控制逻辑。理论上已经证明,可计算问题的程序都可以用顺序、选择(分支)和循环这三种控制结构来描述。
               (1)顺序结构。顺序结构用来表示一个计算操作序列。计算过程从所描述的第一个操作开始,按顺序依次执行后续的操作,直到序列的最后一个操作,如下图所示。
               
               顺序结构示意图
               (2)选择结构。选择结构提供了在两种或多种分支中选择其中之一的逻辑。基本的选择结构是指定一个条件P,然后根据条件的成立与否决定控制流走分支A还是分支B,只能从两个分支中选择一个来执行,如下图(a)所示。选择结构中的A或B还可以包含顺序、选择和重复结构。程序设计语言中通常还提供简化了的选择结构,如下图(b)所示,还有描述多个分支的选择结构。
               
               选择结构示意图
               例如,C/C++提供了if、switch语句实现选择控制结构。
               (3)循环结构。循环结构描述了重复计算的过程,通常由三个部分组成:初始化、需要重复计算的部分和重复的条件。其中,初始化部分有时在控制的逻辑结构中不进行显式的表示。重复结构主要有两种形式:while型重复结构和do-while型重复结构。while型结构的逻辑含义是先判断条件P,若成立,则进行需要重复的计算A,然后再去判断重复条件;否则,控制就退出重复结构,如下图(a)所示。do-while(或repeat-until)型结构的逻辑含义是先执行循环体A,然后再判断条件P,若成立则继续执行循环体A的过程并判断条件;否则,控制就退出重复结构,如下图(b)所示。
               
               循环结构示意图
               例如,C/C++提供了while、for和do-while语句来实现循环控制结构。
               此外,C语言中还提供了实现控制流跳转的return、break、continue、goto语句。
               程序设计语言的传输成分指明语言允许的数据传输方式,如赋值、数据的输入和输出等。
               函数
               函数是程序模块的主要成分,它是一段具有独立功能的程序。C程序由一个或多个函数组成,每个函数都有一个名字,其中有且仅有一个名字为main的函数,作为程序运行时的起点。函数的使用涉及三个概念:函数定义、函数声明和函数调用。
                      函数定义
                      函数的定义描述了函数做什么和怎么做,包括两部分:函数首部和函数体。函数定义的一般格式是:
                      
                      函数首部说明了函数返回值的数据类型、函数的名字和函数运行时所需的参数及类型。函数所实现的功能在函数体部分描述。如果函数没有返回值,则函数返回值的类型声明为void。函数名是一个标识符,函数名应具有一定的意义(反映函数的功能)。形式参数表列举了函数要求调用者提供的参数的个数、类型和顺序,是函数实现功能时所必需的。若形式参数表为空,可用void说明。
                      C程序中所有函数的定义都是独立的。在一个函数的定义中不允许定义另外一个函数,也就是不允许函数的嵌套定义。有些语言(如PASCAL)允许在函数内部定义函数。
                      函数声明
                      函数应该先声明后调用。如果程序中对一个函数的调用在该函数的定义之前进行,则应该在调用前对被调用函数进行声明。函数原型用于声明函数。函数声明的一般形式为:
                      
                      使用函数原型的目的是告诉编译器传递给函数的参数个数、类型以及函数返回值的类型,参数表中仅需要依次列出函数定义时参数的类型。函数原型可以使编译器更彻底地检查源程序中对函数的调用是否正确。
                      函数调用
                      当在一个函数(称为调用函数)中需要使用另一个函数(称为被调用函数)实现的功能时,便以名字进行调用,称为函数调用。在使用一个函数时,只要知道如何调用即可,并不需要关心被调用函数的内部实现。因此,程序员需要知道被调函数的名字、返回值和需要向被调函数传递的参数(个数、类型、顺序)等信息。
                      函数调用的一般形式为:
                      
                      在C程序的执行过程中,通过函数调用使得被调用函数得以执行。函数体中若调用自己,则称为递归调用。
                      C语言采用传值方式将实参传递给形参。调用函数和被调用函数之间交换信息的方法主要有两种:一种是由被调用函数把返回值返回给调用函数,另一种是通过参数带回信息。函数调用时,实参与形参间交换信息的主要有传值调用和引用调用两种方法。
                      (1)传值调用(Call by value)。若实现函数调用时实参向形参传递相应类型的值,则称为是传值调用。这种方式下形参不能向实参传递信息。
                      例如,下面给出函数swap定义,其功能是交换两个整型变量值。
                      
                      函数调用为:swap(a,b);
                      因为是传值调用,swap函数运行后只能交换x和y的值,而实参a和b的值并没有交换。
                      在C语言中,要实现被调用函数对实参的修改,必须用指针作形参,调用时需要先对实参进行取地址运算,然后将实参的地址传递给指针形参。本质上仍属于传值调用。
                      下面给出函数swap的定义,其功能是交换两个整型变量值。
                      
                      函数调用为:swap(&a,&b);
                      由于形参px、py分别得到了实参变量a、b的地址,所以px指向的对象*px即为a,py指向的对象*py就是b,因此在函数中交换*px和*py的值实际上就是交换实参a和b的值,从而实现了调用函数中两个整型变量值的交换。这种方式是通过数据的间接访问来完成运算要求的。
                      (2)引用调用。引用是C++中增加的数据类型,当形参为引用类型时,函数中对形参的访问和修改实际上就是针对相应实参所作的访问和改变。例如:
                      
                      函数调用为:swap(a,b);
                      引用调用方式下调用swap(a,b)时,x、y就是a、b的别名,因此,函数调用完成后,交换了实参a和b的值。
 
       分包
        中标人应当按照合同约定履行义务,完成中标项目。中标人不得向他人转让中标项目,也不得将中标项目肢解后分别向他人转让。中标人按照合同约定或者经招标人同意,可以将中标项目的部分非主体、非关键性工作分包给他人完成。接受分包的人应当具备相应的资格条件,并不得再次分包。中标人应当就分包项目向招标人负责,接受分包的人就分包项目承担连带责任。
   题号导航      2020年下半年 数据库系统工程师 上午试卷 综合知识   本试卷我的完整做题情况  
1 /
2 /
3 /
4 /
5 /
6 /
7 /
8 /
9 /
10 /
11 /
12 /
13 /
14 /
15 /
 
16 /
17 /
18 /
19 /
20 /
21 /
22 /
23 /
24 /
25 /
26 /
27 /
28 /
29 /
30 /
 
31 /
32 /
33 /
34 /
35 /
36 /
37 /
38 /
39 /
40 /
41 /
42 /
43 /
44 /
45 /
 
46 /
47 /
48 /
49 /
50 /
51 /
52 /
53 /
54 /
55 /
56 /
57 /
58 /
59 /
60 /
 
61 /
62 /
63 /
64 /
65 /
66 /
67 /
68 /
69 /
70 /
71 /
72 /
73 /
74 /
75 /
 
第22题    在手机中做本题