关于结构函数以下函数调用语句中实参的个数是问题c++

A.找出数据结构的合理性
B.找出算法中输入和输出之间的关系
C.分析算法的易懂性和可靠性
D.分析算法的效率以求改进

A.break语句可用于循环体内它将退出该重循环
C.break语句鈳用于对体内,它将退出if语句
D.break语句在一个循环体内可以出现多次

main就是一个函数它是C++程序的主函數。一个C++程序可以由一个主函数和若干子函数组成主函数是程序执行的开始点。由主函数调用子函数子函数还可以再调用其它子函数。

调用其它函数的函数称为主调函数被其他函数调用的函数称为被调函数。一个函数很可能既调用别的函数又被其它函数调用

1.1函数定義的语法形式

类型说明符   函数名(含类型说明的形式参数表)

形参的作用是实现主调函数与被调函数之间的联系。通常将函数所处理的数據、影响函数功能的因素或者函数的处理结果作为形参

如果一个函数的形参表为空,则表示它没有任何形参main函数可以没有形参,也可鉯有形参其形参也称命令行参数,由操作系统在启动程序时初始化

函数在没有被调用时是静止的,此时的形参只是一个符号它标志著在形参出现的位置应该有一个什么类型的数据。

函数在被调用时才执行也就是在被调用时才由主调函数将实际参数赋予形参。

1.3函数的返回值和返回值类型

函数可以有一个返回值函数的返回值是需要返回给主调函数的处理结果。类型说明符规定了函数返回值的类型函數的返回值由return语句给出,格式如下:

除了指定函数的返回值外return语句还有一个作用,就是结束当前函数的执行

一个函数也可以不讲任何徝返回给主调函数,这时它的类型标识符为void可以不写return语句,但也可以写一个不带表达式的return语句用于结束当前函数的调用,格式如下:

變量在使用之前需要首先声明类似的,函数在调用之前也需要声明函数的定义就属于函数的声明,因此在定义了一个函数之后,可鉯直接调用这个函数但如果希望在定义一个函数之前调用它,则需要在调用函数之前添加该函数的函数原型声明函数原型声明的形式洳下:

类型说明符   函数名(含类型说明的形参表);

与变量的声明和定义类似,声明一个函数只是将函数的有关信息告诉编译器此时并不产生任何代码;定义一个函数是除了同样要给出函数的有关信息外,主要是要写出函数的代码

声明了函数原型之后,便可以按如下形式调用孓函数:

实参列表应该给出与函数原型形参个数相同、类型相符的实参每个实参都是一个表达式。函数调用可以作为一条语句这时函數可以没有返回值。函数调用也可以出现在表达式中这时就必须有一个明确的返回值。

例1   编写一个求x的n次方的函数

例2   输入一个8位二进制數将其转换为十进制数输出

注意:ch的类型写成int是不正确的

例3 编写程序求π的值,公式如下:

其中arctan用如下形式的级数计算:

直到级数某项絕对值不大于10^-15为止;π和x均为double型。

所谓回文数是指其各位数字左右对称的整数例如,121676,94249等满足上述条件的数如m=11,m^2=121,m^3=1331.

分析:判断一个数昰否是回文数可以用除以10求余的方法,从最低位开始依次取出该数的各位数字,然后用最低位充当最高位按反序重新构成新的数,與原数比较是否相等若相等,则原数为回文

例5 投骰子的随机游戏

 游戏规则是:每个骰子有六面,点数分别为12,34,56。游戏者在程序开始时输入一个无符号整数作为产生随机数的种子。每轮投两次骰子第一轮如果和数为7或者11则为胜,游戏结束;和数为23或者12则为負,游戏结束;和数为其他值则将此值作为自己的点数就像第二轮、第三轮···直到某轮的和数等于点数则取胜,若在此前出现和数为7則为负

有rollDice函数负责模拟投骰子,计算和数并输出和数

rand(void)的功能是产生一个伪随机数,伪随机数并不是真正随机的这个函数自己不能产生真正的随机数。如果在程序中连续调用rand期望由此可以产生一个随机数序列,你会发现每次运行这个程序时产生的序列都是相同的这称为伪随机数序列。这是因为函数rand需要一个称为”种子“的初始值种子不同,产生的伪随机数也就不同因此只要每次运行时给予鈈同的种子,然后连续调用rand便可以产生不同的随机数序列如果不设置种子,rand总是默认种子为1不过设置种子的方法比较特殊,不是通过函数的参数而是在调用它之前,需要首先调用另外一个函数void

函数允许嵌套调用如果函数1调用了函数2,函数2再调用函数3便形成了函数嘚嵌套调用

例 输入两个整数,求他们的平方和

分析:设计两个函数:求平方和函数fun1和求一个整数的平方函数fun2。由主函数调用fun1fun1又调用fun2。

函数可以直接或间接地调用自身称为递归调用。

所谓直接调用自身就是指在一个函数的函数体中出现了对自身的调用表达式,例如:

這就是函数直接调用自身的例子

而下面的情况是函数间接调用自身:

这里fun1调用了fun2,而fun2又调用了fun1于是构成了递归。

递归算法的实质是将原有的问题分解成新的问题而解决新问题时又用到了原有问题的解法。按照这一原则分解下去每次出现的新问题都是原有问题的简化嘚子集,而最终分解出来的问题是一个已知解的问题。这便是有限的递归调用只有有限的递归调用才是有意义的,无限的递归调用永遠得不到解没有实际意义。

递归的过程有如下两个阶段

第一阶段:递推。将原问题不断分解为新的子问题逐渐从未知向已知推进,朂终达到已知的条件即递归结束的条件,这时递推阶段结束

例如,求5!可以这样分解:

第二阶段:回归。从已知的条件出发按照遞推的逆过程,逐一求值回归最后达到递推的开始处,结束回归阶段完成递归调用。

例如求5!的回归阶段如下:

分析:当n=0时,n!=1;

遞归结束的条件是n=0

注意:对同一个函数的多次不同调用中,编译器会为函数的形参和局部变量分配不同的空间他们互不影响。

例2 用递歸法计算从n个人中选择k个人组成一个委员会的不同组合数

分析:由n个人里选k个人的组合数=由n-1个人里选k个人的组合数+由n-1个人里选k-1个人的组匼数

由于计算公式本身是递归的,因此可以编写一个递归函数来完成这一功能递推的结束条件是n=k或n=0,这时的组合数是1然后开始回归。

囿三根针A,B,CA针上有n个盘子,盘子大小不等大的在下,小的在上要求把这n个盘子从A针移动到C针,在移动的过程中可以借助B针每次只允許移动一个盘子,且在移动过程中在三针上都保持大盘在下小盘在上。

分析:将n个盘子从A针移动到C针可以分解为下面三个步骤:

(1)将A仩n-1个盘子移动到B针(借助C针);

(2)将A针上剩下的一个盘子移到C针上;

(3)将n-1个盘子从B针移到C针(借助A针)

事实上,上面三个步骤包含下面两种操作:

(1)将多个盘子从一个针移动到另一个针上这是一个递归的过程。

(2)将一个盘子从一个针移到另一个针上

在函数未被调用时,函数的形参并不占有实际的内存空间也没有实际的值。只有在函数被调用时才为形参分配存储单元并将实参与形参结合。每个实参嘟是一个表达式其类型必须与形参相符。函数的参数传递指的就是形参与实参结合(简称形实结合)的过程形实结合的方式有值传递囷引用传递。

值传递是指当发生函数调用时给形参分配内存空间,并用实参来初始化形参(直接将以下函数调用语句中实参的个数是值傳递给形参)这一过程是参数值的单项传递过程,一旦形参获得了值便与实参脱离关系此后无论形参发生了怎样的改变,都不会影响箌实参

将两个整数变换次序后输出

分析:从上面的运行结果可以看出,并没有达到交换的目的这是因为,采用的是值传递函数调用時传递的是以下函数调用语句中实参的个数是值,是单向传递过程形参值的改变对实参不起作用。

值传递时参数是单向传递

引用是一種特殊类型的变量,可以被认为是另一个变量的别名通过引用名与通过被引用的变量名访问变量的效果是一样的。例如:

使用引用时必須注意以下问题:

·声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。44

·一旦一个引用被初始化后,就不能改为指向其它对象。

也就是说一个引用,从它诞生时就必须确定是哪个变量的别名,而且始终只能作为作为这一个变量的别名不能另作怹用。

引用也可以作为形参如果将引用作为形参,情况便稍有不同这是因为,形参的初始化不在类型说明时进行而是在执行主调函數中的调用表达式时,才为形参分配内存空间同时用实参初始化形参。这样引用类型的形参就通过形实结合成为了以下函数调用语句Φ实参的个数是一个别名,对形参的任何操作也就会直接作用于实参

用引用作为形参,在函数调用时发生的参数传递称为引用传递。

唎2 使用引用传递改写例1使两整数成功的进行交换

值传递与引用传递的比较

我要回帖

更多关于 以下函数调用语句中实参的个数是 的文章

 

随机推荐