站群优化公司,贴吧广告投放,狂人站群系统,win7下使用wordpress函数参数和按值传递
下面详细介绍一下函数参数。C通常按值传递参数#xff0c;这意味着将数值参数传递给函数#xff0c;而后者将其
赋给一个新的变量。例如#xff0c;程序清单7.2 包含下面的函数调用#xff1a;
double volumecube(side);其中#xff0c;side 是一个变量…函数参数和按值传递下面详细介绍一下函数参数。C通常按值传递参数这意味着将数值参数传递给函数而后者将其赋给一个新的变量。例如程序清单7.2 包含下面的函数调用double volumecube(side);其中side 是一个变量在前面的程序运行中其值为5。cube( )的函数头如下double cube(double x)被调用时该函数将创建一个新的名为x 的double 变量并将其初始化为5。这样cube( )执行的操作将不会影响main( )中的数据因为cube( )使用的是side 的副本而不是原来的数据。稍后将介绍一个实现这种保护的例子。用于接收传递值的变量被称为形参。传递给函数的值被称为实参。出于简化的目的C标准使用参数argument来表示实参使用参量parameter来表示形参因此参数传递将参量赋给参数参见图7.2。被调用时该函数将创建一个新的名为x 的double 变量并将其初始化为5。这样cube( )执行的操作将不会影响main( )中的数据因为cube( )使用的是side 的副本而不是原来的数据。稍后将介绍一个实现这种保护的例子。用于接收传递值的变量被称为形参。传递给函数的值被称为实参。出于简化的目的C标准使用参数argument来表示实参使用参量parameter来表示形参因此参数传递将参量赋给参数参见图7.2。在函数中声明的变量包括参数是该函数私有的。在函数被调用时计算机将为这些变量分配内存在函数结束时计算机将释放这些变量使用的内存有些C文献将分配和释放内存称为创建和毁坏变量这样似乎更激动人心。这样的变量被称为局部变量因为它们被限制在函数中。前面提到过这样做有助于确保数据的完整性。这还意味着如果在main( )中声明了一个名为x 的变量同时在另一个函数中也声明了一个名为x 的变量则它们将是两个完全不同的、毫无关系的变量这与加利福尼亚州的Albany 与纽约的Albany 是两个完全不同的地方是一样的道理参见图7.3。这样的变量也被称为自动变量因为它们是在程序执行过程中自动被分配和释放的。多个参数n_chars(R,25);上述函数调用将两个参数传递给函数n_chars( )我们将稍后定义该函数。同样在定义函数时也在函数头中使用由逗号分隔的参数声明列表void n_chhhars(char c,int n) //two arguments该函数头指出函数n_char( )接受一个char 参数和一个int 参数。传递给函数的值被赋给参数c 和n。如果函数的两个参数的类型相同则必须分别指定每个参数的类型而不能像声明常规变量那样将声明组合在一起void fifi(float a ,float b) //declare each variable separately void fufu(float a,b) //NOT acceptable和其他函数一样只需添加分号就可以得到该函数的原型void n__chars(char c,int n); //prototype,style 1和一个参数的情况一样原型中的变量名不必与定义中的变量名相同而且可以省略void n_chars(char,int); //prototype style2然而提供变量名将使原型更容易理解尤其是两个参数的类型相同时。这样变量名可以提醒参量和参数间的对应关系double melon_density(double weight,double volume);程序清单7.3 演示了一个接受两个参数的函数它还表明在函数中修改形参的值不会影响调用程序中的数据。#include iostream using namespace std; void n_chars(char, int); int main() { int times; char ch; cout Enter a character:; cin ch; while (ch ! q) { cout Enter an integer:; cintimes; n_chars(ch, times); cout\nEnter another character or press the q-key to quit:; cinch; } coutThe value of times is times.endl; coutByeendl; return 0; } void n_chars(char c, int n) { while (n-- 0) cout c; }运行结果Enter a character:W Enter an integer: 50 WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW Enter another character or press theq-key to quit:20 Enter an integer: Enter another character or press theq-key to quit:q The value of times is 0. Bye程序清单7.3中的main()函数使用一个whlle循环提供重复输入并让读者温习使用循环的技巧它使用cmch而不是cinget(ch)或chcm.get()来读取一个字符。这样做是有原因的。前面讲过这两个cin.get()函数读取所有的输入字符包括空格和换行符而跳过空格和换行符。当用户对程序提示作出响应时必须在每行的最后按Enter键以生成换行符。cinch方法可以轻松地跳过这些换行符但当输入的下一个字符为数字时cin.get将读取后面的换行符。可以通过编程来避开这种麻烦但比较简便的方法是像该程序那样使用cin。n_char( )函数接受两个参数一个是字符c另一个是整数n。然后它使用循环来显示该字符显示次数为nwhile(n--0) //continue until n reachs 0 coutc;程序通过将n 变量递减来计数其中n 是参数列表的形参main( )中times 变量的值被赋给该变量。然后while 循环将n 递减到0但前面的运行情况表明修改n 的值对times 没有影响。即使您在函数main( )中使用名称n 而不是times在函数n_chars()中修改n 的值时也不会影响函数main( )中n 的值。另外一个接受两个参数的函数下面创建另一个功能更强大的函数它执行重要的计算任务。另外该函数将演示局部变量的用法而不是形参的用法。首先需要一个公式。假设必须从51 个数中选取6 个而获奖的概率为1/R则R 的计算公式如下选择6 个数时分母为前6 个整数的乘积或6 的阶乘。分子也是6 个连续整数的乘积从51 开始依次减1。推而广之如果从numbers 个数中选取picks 个数则分母是picks 的阶乘分子为numbers 开始向前的picks 个整数的乘积。可以用for 循环进行计算long double result1.0; for(nnumbers,ppicks;p0;n--,p--) resultresult*n/p;循环不是首先将所有的分子项相乘而是首先将1.0 与第一个分子项相乘然后除以第一个分母项。然后下一轮循环乘以第二个分子项并除以第二个分母项。这样得到的乘积将比先进行乘法运算得到的小。例如对于(10 * 9)/(2 * 1)和45。这两大时这种交替进行乘除运算的策略可以防止中间结果超出最大的浮点数。程序清单7.4 在probability( )函数中使用了这个公式。由于选择的数目和总数目都为正因此该程序将这些变量声明为unsigned .int 类型简称unsigned。将若干整数相乘可以得到相当大的结果因此lotto.cpp 将该函数的返回值声明为long double 类型。另外如果使用整型则像49/6 这样的运算将出现舍入误差。#include iostream long double probability(unsigned numbers, unsigned picsks); int main() { using namespace std; double total, choices; coutEnter the total number of choices on the game card and\n the number of picks you want: \n; while ((cin total choices) choices total) { coutYou have one chance in; cout probability(total, choices); cout of winning.\n; coutNext two numbers(q to quit):; } cout bye\n; return 0; } long double probability(unsigned numbers, unsigned picks) { long double result 1.0; long double n; unsigned p; for (n numbers, p picks; p 0; n--, p--) result result * n / p; return result; }运行结果Enter the total number of choices on the game card and the number of picks you want: 49 6 You have one chance in1.39838e07of winning. Next two numbers(q to quit):51 6 You have one chance in1.80095e07of winning. Next two numbers(q to quit):q bye请注意增加游戏卡中可供选择的数字数目获奖的可能性将急剧降低。程序说明程序清单7.4 中的probability( )函数演示了可以在函数中使用的两种局部变量。首先是形参number和picks这是在左括号前面的函数头中声明的其次是其他局部变量result、n 和p它们是在将函数定义括起的括号内声明的。形参与其他局部变量的主要区别是形参从调用probability( )的函数那里获得自己的值而其他变量是从函数中获得自己的值。