C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc

C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc
C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc

C++笔试题目:将”引用”作为函数返回值类型的格式、好处和需要格式:类型标识符函数名(形参列表及类型说明){//函数体}

好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束,相应的引用也会失效产生runtimeerror!

注意事项:

(1)不能返回局部变量的引用。这条可以参照EffectiveC++[l]的Item31。主要原因是局部变量会在函

返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。

(2 )不能返回函数内部ne w分配的内存的引用。这条可以参照Effect i veC++[l]的I tem31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由n ew分配)就无法释放,造成memoryl eak。

(3)可以返回类成员的引用,但最好是const。这条原则可以参照Eff ect iveC++[l]的I tem30。主要原因是当对

象的属性是与某种业务规则(busines sru le)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。

如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。

(4)流操作符重载返回值申明为“引用”的作用:

流操作符〉,这两个操作符常常希望被连续使用,例如: cout对于返回一个流指针则不能连续使用这个操作符象流操作符一样,是可以连续使用的,例如:x=j=10;或者(x=10)=100 :赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。

例3

^include

in tp ut (intn);

in tvals [10]:

i nter ror=-l;

voi dmain()

{

put (0)=10 ://以put (0)函数值作为左值,等价于V als[0]二10 ;

put (9) =20;//以put (9)函数值作为左值,等价于va ls[9]=20;

co ut intput (in t n) if(n〉=0 nelse{cout}

(5)在另外的一些操作符中,却千万不能返回引用:+_ */四则运算符。它们不能返回引用,Effe ctiveC ++[1 ]的Item2 3详细的讨论了这个问题。主要原因是这四个操作符没有sideeffe ct,因此,它们必须构造一个对象作为返回值,可选的方案包括:返回一个对象、返回一个局部变量的引用,返回一个ne w分配的对象的引用、返回一个静态对象引用。根据前面提到的引用作为返回值的三个规则,第2、3两个方案都被否决了。静态对象的引用又因为(( a+b)==(c+d ))会永远为true而导致错误。所以可选的只剩下返回一个对象了。

EXCEL常用函数使用整理归类

EXCEL常用函数使用整理归类 EXCEL中常用函数的使用 1、求和函数: =SUM(区域或单元格,……) 2、条件式求和函数: =SUMIF(条件区域,条件,求和区域) 3、多重条件求和函数: =SUMIFS(求和区域,条件区域1,条件1,条件区域2,条件2,……) 4、求最 大值函数: =MAX(区域或单元格,……) 5、求最小值函数: =MIX(区域或单元格,……) 应用举例求选手的最后得分: =(SUM(D2:D8)-MAX(D2:D8)-MIN(D2:D8))/6 6、四舍五入函数: =ROUND(单元格或表达式或函数,保留小数位数) 如:=ROUND($E3/30/8,0)*1.5*$F3 7、取整函数:(不是四舍五入而是直接去掉小数) =TRUNC(单元格或表达式或函数) 8、排名函数: =RANK(单元格,单元格所在区域,0) 9、还贷款额函数: =PMT(月利率,偿还期限,贷款总额) 可求出每月的还款额 10、开平方函数: =SQRT(单元格数字)

11、数组公式: (1)计算单个结果: =SUM(F2:F17*G2:G17)+ CTRL+SHIST+ENTER (一一对应分别乘起来后求和) (2)频率分布函数: =FREQUENCY(数据区域,频率点区段)+CTRL+SHIST+ENTER。注:输入函数前先需选定要 生成频率的区域。 12、求平均数函数: =AVERAGE(区域或单元格,……) 13、条件式求平均函数: = AVERAGEIF(条件区域,条件,平均区域) 14、多重条件求平均函数: = AVERAGEIFS(求平均区域,条件区域1,条件1,条件区域2,条件2,……) 15、统计个数函数: =COUNT(区域或单元格,……) 16、条件式统计个数函数: = COUNTIF(统计区域,条件) 17、多重条件统计个数函数: = COUNTIFS(条件区域1,条件1,条件区域2,条件2,……) 实际应用举例: 及格率公式:=(COUNTIF(C2:C59,">=60")/COUNT(C2:C59)); 优秀率公式:=(COUNTIF(C2:C59,">=80")/COUNT(C2:C59)); 语文及格率公式:=COUNTIFS(语文,">=90",班级,A8)/COUNTIFS(语文,">0",班级,A8) 90分以上人数公式:=COUNTIF(C2:C59,">=90");

关于引用

引用就是某个目标变量的“别名”(alias),对引用的操作与对变量直接操作效果完全相同。声明一个引用,不是新定义了一个变量,它只表示该引用名是目标变量名的一个别名,它本身不是一种数据类型,因此引用本身不占存储单元,系统也不给引用分配存储单元。 将“引用”作为函数返回值类型 格式:类型标识符&函数名(形参列表及类型说明){ //函数体} 好处:在内存中不产生被返回值的副本 A a(){...;return *this;}//会调用拷贝构造函数和析构函数 A& a(){...;return *this;}//不会调用拷贝构造函数和析构函数 关键:当想要返回一个引用而不是一个拷贝时,要确保这个引用的有效性,比如: int & fun() { int a; a=10; return a; } 这样是不行的,因为a会在fun退出时被销毁,这时返回的a的引用是无效的。 这种情况下,如果fun的返回类型不是int & 而是int就没有问题了。 注意事项: (1)不能返回局部变量的引用。这条可以参照Effective C++的Item 31。主要原因是局部变量会在函数返回后被销毁,因此被返回的引用就成为了"无所指"的引用,程序会进入未知状态。 (2)不能返回函数内部new分配的内存的引用。这条可以参照Effective C++的Item 31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由new分配)就无法释放,造成memory leak。(3)可以返回类成员的引用,但最好是const。这条原则可以参照Effective C++的Item 30。主要原因是当对象的属性是与某种业务规则(business rule)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。 (4)流操作符重载返回值申明为“引用”的作用:流操作符<<和>>,这两个操作符常常希望被连续使用,例如:cout << "hello" << endl; 因此这两个操作符的返回值应该是一个仍然支持这两个操作符的流引用。可选的其它方案包括:返回一个流对象和返回一个流对象指针。但是对于返回一个流对象,程序必须重新(拷贝)构造一个新的流对象,也就是说,连续的两个<<操作符实际上是针对不同对象的!这无法让人接受。对于返回一个流指针则不能连续使用<<操作符。因此,返回一个流对象引用是惟一选择。这个唯一选择很关键,它说明了引用的重要性以及无可替代性,也许这就是C++语言中引入引用这个概念的原因。赋值操作符=。这个操作符象流操作符一样,是可以连续使用的,例如:x = j = 10;或者(x=10)=100;赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。 例 #include int &put(int n); int vals[10]; int error=-1;

!函数返回值

函数返回值 int Count() { int i,j; i=100; j=200; return i+j; } 测试函数: void Test() { int k=Count(); printf("\n k[%d]\n"); } C/C++的函数返回值一般是放在寄存器eax里的,而不是在栈里。 你的这一句int k = Count()的汇编语句就是这样: mov [esp - 4], eax //eax里是300,esp - 4是局部变量k的位置 你可以在vc里做个实验: int add(int a, int b) { __asm { mov eax,a // 把参数1存入eax add eax,b // eax += 参数2, 结果在eax里 } } int main() { printf("%d\n", add(3, 4)); return 0; } 楼主需要了解下寄存器这一概念,我就不把C/C++函数的汇编代码给发出来了。 还有在汇编层面来看,函数的返回值根本就没有定论,函数可以通过多种方式返回。保存返回值在eax里只是C/C++的一个约定而已。

返回值可以放在栈里,但你在C的语言层面上可能做不到,其实随着函数的结束,mov esp, ebp这条指令过后,函数内部的局部变量就报废了。如果你之后没改变过栈的内容,你可以用栈来存返回值,但比起用寄存器来存储,存储和读取要慢的多。 自己突发奇想在vc下试了下用栈“返回”值,写了段代码: #include void __declspec(naked) __stdcall return_a_value() { int local; local = 1990; // 栈空间 __asm ret } int main() { int local = 1; return_a_value(); // 用栈返回值 printf("%d\n", local); return 0; } 汇编看c之一,简单函数调用 简单的函数调用,通过简单的函数调用反汇编可以清楚了解如下 1.栈到底是什么,如何操纵栈的? 2.参数和临时变量是以什么形式在哪存放? 3.如何传递返回值? 举例: #include

函数返回值

函数返回值 1.不带返回值的函数:return; 不带返回值的函数的返回类型为void,这样的函数会在函数的最后一个语句完成时隐式调用return;也可以在函数的结尾显式地调用return; 对于任意一个函数,只要执行了return语句,函数就强制结束了。 对于返回类型为void的函数,如果不显式地调用return;则只有在函数结束时才会隐式调用。可以在函数执行的某一阶段,显式地调用return;来结束函数,不再执行return语句之后的函数部分。 由于break语句只能用于循环和switch语句中,因此,想要结束if语句直接退出函数,可用return; 只有一种情况下,返回类型为void的函数可以使用return expression这一形式,那就是返回另一个返回类型同样是void的函数的调用结果。 如: void A() void B() { { .... .... .... .... return; return A(); } }//因为A返回类型为void,所以可以这样调用。 2.具有返回值的函数:return expression; 代码: int max(int x,int y) #include { int main() int z; { if(x>=y) int a,b,c; z=x; scanf("%d%d",&a,&b); else c=max(a,b); z=y; printf("%d\n",c); return z; return 0; } } 在main函数中调用max函数,函数调用语句为max(a,b); 仔细研究一下max(a,b)。 对于一个表达式来说,它要完成一定的功能,还要返回一个操作结果(即表达式的值)。如i++,它的功能是使变量i的值加1,它的值是i自增前的值。同样的,函数调用也同样如此:max(a,b)的功能是把实参a,b的值传递给形参并执行函数中的各个语句;max(a,b)的值是一个int类型的值。 ++i的值是i自增后的值,相当于i=i+1,return i;对于i++来说,它的值是i自增前的值,那么如何获得这个值呢?编译器是这样做的:编译器自动创建一个临时变量并用i自增前的值来初始化这个临时变量。用这个临时变量的值来作为i++这个表达式的值。 同样的,执行max(a,b)后,首先完成参数传递并执行函数max中的各条语句。接着创建一个int型的临时变量并用return expression中expression的值来初始化这个临时变量。临时变量的类型为函数的返回值类型,即函数名之前的类型名。对max()函数来说就是int。

C语言程序设计 第六章 函数 试题及答案

C语言程序设计第六章函数试题及答案 1 选择题 *6.1建立函数的目的之一,以下正确的说法是。 A)提高程序的执行效率B)提高程序的可读性 C)减少程序的篇幅D)减少程序文件所占内存 参考答案:B *6.2 以下正确的说法是。 A)用户若需要调用标准库函数,调用前必须重新定义 B)用户可以重新定义标准库函数,若如此,该函数将失去原有意义 C)用户系统根本不允许用户重新定义标准库函数 D)用户若需要调用库函数,调用前不必使用预编译命令将该函数所在文件包括到用户源文件中,系统自动寻找该文件。 参考答案:B 6.3 以下正确的函数定义形式是。 A)double fun(int x,int y) B)double fun(int x;int y) C)double fun(int x,int y); D)doubel fun(int x;int y); 参考答案:A *6.4 以下正确的函数形式是。 A)double fun(int x,int y){z=x+y;return z;} B)double fun(int x,y){int z;return z;} C)fun(x,y){int x,y;double z; z=x+y; return z;} D)double fun(int x,int y){double z;z=x+y;return z;} 参考答案:D *6.5以下正确的说法是。 A)实参和与其对应的形参占用独立的存储单元 B)实参和与其对应的形参共占用一个存储单元 C)只有当实参和与其对应的形参同名时才共占用一个存储单元 D)形参是虚拟的,不占用存储单元 参考答案:A 参考分析:本题并不严谨,因为实参可以是表达式,当实参为表达式时,实参并不单独占用独立的存储单元。 6.6 若调用一个函数,且此函数中没有return语句,则正确的说法是该函数。 A)没有返回值B)返回若干个系统默认值 C)返回一个用户所希望的函数值D)返回一个不确定的值 参考答案:D 参考分析:函数有没有返回值是由函数类型所决定的,当没有retrun语句,系统不能返回一个确定的值而已。 6.7 以下不正确的说法是,C语言规定。 A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)实参应与其对应的形参类型一致

C++第四章习题解答

第四章类与对象习题 一.基本概念与基础知识自测题 填空题 引入类定义的关键字是(1)。类的成员函数通常指定为(2),类的数据成员通常指定为(3)。指定为(4)的类成员可以在类对象所在域中的任何位置访问它们。通常用类的(5)成员表示类的属性,用类的(6)成员表示类的操作。 答案: (1)class (2)公有的public (3)私有的private (4)公有的public (5)数据 (6)$ (7)函数 类的访问限定符包括(1)、(2)和(3)。私有数据通常由(4)函数来访问(读和写)。这些函数统称为(5)。 答案: (1)public(公有的) (2)private(私有的) (3)protected(保护的) (4)公有的成员函数 (5)类的接口 通常在逻辑上,同一类的每个对象都有(1)代码区,用以存储成员函数。而在物理上通常只有(2)代码区。只有在(3)定义,并(4)的函数和加了关键字(5)的函数例外。 答案: (1)| (2)独立的 (3)共用的 (4)在类说明中 (5)不包括循环等复杂结构 (6)inline C++中支持三种域:(1)、(2)、(3)。函数域被包括在(4)中,全局域被包括在(5)中。using指示符以关键字using开头,后面是关键字(6),最后是(7)。这样表示以后在该名字空间中所有成员都(8)。 如不使用using指示符则在使用时要加::,称为(9)运算符。 答案: (1)局部域(local scope) (2)名字空间域(namespace scope) (3)类域(class scope) (4)/ (5)局部域

(6)名字空间域 (7)namespace (8)名字空间名 (9)可以直接被使用 (10)域 引用通常用作函数的(1)和(2)。对数组只能引用(3)不能引用(4)。 答案: (1)参数 (2)返回值 (3)~ (4)数组元素 (5)数组名本身 构造函数的任务是(1)。构造函数无(2)。类中可以有(3)个构造函数,它们由(4)区分。如果类说明中没有给出构造函数,则C++编译器会(5)。拷贝构造函数的参数是(6),当程序没有给出复制构造函数时,系统会自动提供(7)支持,这样的复制构造函数中每个类成员(8)。 答案: (1)初始化数据成员 (2)函数返回类型说明 (3)多 (4)不同的参数表 (5)自动给出一个默认的构造函数 (6)同一类对象的引用 (7): (8)默认的的复制构造函,称为默认的按成员语义支持。 (9)被依次复制 一个类有(1)个析构函数。(2)时,系统会自动调用析构函数。 答案: (1)一 (2)对象注销时 运算符重载时,其函数名由(1)构成。成员函数重载双目运算符时,左操作数是(2),右操作数是(3)。 答案: (1)关键字operator和该运算符 (2)对象 (3)… (4)该函数的参数 面向过程的程序设计中程序模型描述为(1),面向对象程序设计的程序模型可描述为(2)。 答案: (1)“程序=算法+数据结构”。其数据与数据处理是分离的。 (2)程序=(对象+对象+……+对象)+消息;对象=(算法+数据结构)。面向对象设计将数据和对数据的操作方法放在一起,形成一个相对独立的整体——对象(Object),并通过

C语言实现函数返回多值

C语言实现函数返回多值 笔者从事C语言教学多年,在教学中学生们常常会问到如何编写具有多个返回值的C语言函数。编写有多个返回值的函数是所有C语言教材里均没有提到的知识点,但在实际教学与应用的过程中我们都有可能会遇到这样的问题。有学生也尝试了不少方法:如把多个需要返回的值作相应的处理后变成一个可以用语句返回的数据,再在主调函数中拆开返回的数据使之变成几个值;或者return 把需要返回多个值的一个函数分开几个函数去实现多个值的返回。这些方法虽然最终都能实现返回要求的多个值,但从程序算法的合理性与最优化方面去考虑,显然不理想。我们知道C语言函数的返回值是通过函数中的return语句来实现的,可是每调用一次函数,return语句只能返回一个值。那么当我们希望从一个函数中返回多个值时,用什么方法去实现比较合理呢,在教学过程中,我建议学生跳出对return语句的定势思维,一步步引导学生通过几种间接方式实现多个返回值的C语言函数。以下是笔者在教学过程中引导学生采用的三种不同方法编写多个返回值的C语言函数。 2方法1:利用全局变量 分析:全局变量作为C语言的一个知识点,虽然我们都了解它的特点,但 于全局变量的作用域是从定义变量开始在实际教学过程中应用得并不是很多。由 直到程序结束,而对于编写有多个返回值的C语言函数,我们可以考虑把要返回的多个值定义成全局变量。当函数被调用时,全局变量被更改,我们再把更改后的全局变量值应用于主调函数中。函数被调用后被更改后的全局变量值即为函数的数个返回值。下面以一个实例演示该方法的应用。

实例1:编写函数求3个数中的最大值与最小值。 方法:把最大值、最小值分别定义成2个全局变量max、min,在用户自定义函数中把求出来的最大值与最小值分别赋给全局变量max、min。函数调用完毕后全局变量的max、min值即保存了函数要求返回的值。程序参考代码如下: #include "stdio.h" #include "conio.h" int max,min;/*定义两个全局变量用于保存函数返回值*/ void max_min(int a,int b,int c) /*定义求最大最小值的函数*/ {max=min=a; /*初始化最大最小值*/ if(max if(max if(min>b)min=b; if(min>c)min=c; } main() {int x,y,z; printf(" 请输入3个整数:\n"); scanf("%d,%d,%d",&x,&y,&z); max_min(x,y,z) ;/*调用求最大值与最小值的函数*/ printf("三个数中的最大值为:%d;最小值为:%d",max,min);/*输出最大值与最小值*/ getch(); } 调试结果如下: 请输入3个整数: 5,-6,2

函数参数返回值总结

函数的参数、返回值总结 (一)参数 ◆函数分: 有参函数:函数名(实参列表) 无参函数:函数名() ◆有参函数调用语句中的实参应与被调函数中的形参在个数、类型、顺序上一致。 ◆参数传递时,实参向形参一一对应进行单向的值传递。值:可是数值(变量或数 组元素)或数值的地址值(指针或数组名)。 (二)返回值 函数的返回值即为函数调用后的结果,可有如下返回结果的方法: (1)通过return语句返回一个值; (2)利用地址做参数返回一个或多个值; (3)利用全局变量返回一个或多个值。 (三)例 1、170页实验内容(1):打印由正三角和倒三角组成的图形。 有一个参数,无返回值。实参向形参传递一个数值。 #include /* 有一个参数,无返回值的函数,打印正三角 */ void f1(int n) /* 形参只能是变量,用来接收实参传来的数值 */ { int i,j,k; for(k=1;k<=n;k++) {for(i=1;i<=10-k;i++) printf(" "); for(j=1;j<=k;j++) printf(" *"); printf("\n");} } /* 有一个参数,无返回值的函数,打印倒三角*/ void f2(int n) {int i,j,k; for(k=n;k>=1;k--) {for(i=1;i<=10-k;i++) printf(" "); for(j=1;j<=k;j++) printf(" *"); /*双引号内应为“空格加半角星号”*/ printf("\n");} } main() { int n; scanf("%d",&n);

c++复习题及答案(完整版)

一填空题() 1、派生类的生成过程经历了三个步骤:吸收基类成员、改造基类成员、添加新成员。 2、多态分为:专用多态和通用多态。 二、选择题(10分) 1在一个函数中,要求通过函数来实现一种不太复杂的功能,并且要求加快执行速度,选用(A )比较合适。 A 内联函数 B 重载函数 C 递归调用 D 嵌套调用 2下面对构造函数的描述不正确的是(C ) A 可以重载 B 其名字与类名相同 C 可以显式调用构造函数 D 构造函数是成员函数 E 构造函数不能是虚函数 3、判断题(正确的请写T,错误的请写F)(20分) 静态成员函数可以直接调用类中说明的非静态成员。(F) windows应用程序采用基于消息的事件驱动运行机制。(T) 4、找出程序中的错误并改正(10分) class student() { private: public: display(){} } }; //----------------------------------------------- void g() student g() { student s; return s; } //------------------------------------------------ mian()void main() { student s1; s1->display(); s1.display(); } 5、读程序,在语句后的括号中填入相应的选项,并写出程序运行结果结果(8个小题)(共40分结果30分选择10分)选项:A、复制构造函数 B、构造函数 C、内联成员函数 D、对象成员 E、对象作为函数的参数 F、调用复制构造函数 G、对象调用成员函数 1、 #include #include class Point { public: Point(int xx=0,int yy=0){X=xx;Y=yy;} //1、( B ) Point(const Point& p); //2、( A ) int GetX(){return X;} int GetY(){return Y;} //3、( C ) private:

vba之函数返回值(可多个返回值)

VBA 之函数返回值(可多个返回值) vba之函数返回值1.Function define_yy(ByVal names As String, ByValworkbooks As String) As String Dim str_return As String '返回值 Dim i, t As Integer ........ ........ ........ ........ ........ define_yy = str_return End Function 对于函数返回值的要点已经用粗体表示出来了.调用此函数的格式为: call modle_connection.define_yy() (这个是不需要返回值的调用方法) bb=modle_connection.define_yy(a,b) (这是需要返回值的方法) 注:modle_connection为程序块名 2.返回值为多个值,可以采用返回数组的类型 Function return_data(ByVal strSEL As String, ByRef x As

Integer) AsString() '需要有括号,代表数组Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim bb(1000, 20) As String Dim i As Integer, j As Integer cn.Open strCN rs.Open strSEL, cn i = 1 Do While Not rs.EOF If x = 1 Then bb(i, 1) = rs(0) Else For j = 1 To x bb(i, j) = rs(j - 1) Next j End If i = i + 1 rs.MoveNext Loop

C语言函数说明与返回值

C语言函数说明与返回值 在学习C语言函数以前,我们需要了解什么是模块化程序设计方法。 人们在求解一个复杂问题时,通常采用的是逐步分解、分而治之的方法,也就是把一个大问题分解成若干个比较容易求解的小问题,然后分别求解。程序员在设计一个复杂的应用程序时,往往也是把整个程序划分为若干功能较为单一的程序模块,然后分别予以实现,最后再把所有的程序模块像搭积木一样装配起来,这种在程序设计中分而治之的策略,被称为模块化程序设计方法。 在C语言中,函数是程序的基本组成单位,因此可以很方便地用函数作为程序模块来实现C语言程序。 利用函数,不仅可以实现程序的模块化,程序设计得简单和直观,提高了程序的易读性和可维护性,而且还可以把程序中普通用到的一些计算或操作编成通用的函数,以供随时调用,这样可以大大地减轻程序员的代码工作量。 函数是C语言的基本构件,是所有程序活动的舞台。函数的一般形式是: type-specifier function_name(parameter list) parameter declarations { body of the function } 类型说明符定义了函数中return语句返回值的类型,该返回值可以是任何有效类型。如果没有类型说明符出现,函数返回一个整型值。参数表是一个用逗号分隔的变量表,当函数被调用时这些变量接收调用参数的值。一个函数可以没有参数,这时函数表是空的。但即使没有参数,括号仍然是必须要有的。参数说明段定义了其中参数的类型。

当一个函数没有明确说明类型时, C语言的编译程序自动将整型( i n t)作为这个函数的缺省类型,缺省类型适用于很大一部分函数。当有必要返回其它类型数据时,需要分两步处理: 首先,必须给函数以明确的类型说明符;其次,函数类型的说明必须处于对它的首次调用之前。只有这样,C编译程序才能为返回非整型的值的函数生成正确代码。 4.1.1 函数的类型说明 可将函数说明为返回任何一种合法的C语言数据类型。 类型说明符告诉编译程序它返回什么类型的数据。这个信息对于程序能否正确运行关系极大,因为不同的数据有不同的长度和内部表示。 返回非整型数据的函数被使用之前,必须把它的类型向程序的其余部分说明。若不这样做,C语言的编译程序就认为函数是返回整型数据的函数,调用点又在函数类型说明之前,编译程序就会对调用生成错误代码。为了防止上述问题的出现,必须使用一个特别的说明语句,通知编译程序这个函数返回什么值。下例示出了这种方法。 第一个函数的类型说明sum()函数返回浮点类型的数据。这个说明使编译程序能够对sum( ) 的调用产生正确代码。 函数类型说明语句的一般形式是: type_specifier function_name (; ) 即使函数使用形参,也不要将其写入说明句。若未使用类型说明语句,函数返回的数据类型可能与调用者所要求的不一致,其结果是难以预料的。如果两者同处于一个文件中,编译程序可以发现该错误并停止编译。如果不在同一个文件中,编译程序无法发现这种错误。类型检查仅在编译中进行,链接和运行时均不检查。因此,必须十分细心以确保绝不发生上

第7章函数练习题(含答案)

函数练习题 1、在C语言中,正确的说法是( A ) A.函数内部和外部定义的变量同名是合法的 B.只要形参和实参都是变量,那么形实结合一定是地址传递 C.变量的定义和声明(也称说明)功能是相同的 D.没有return 的函数就失去了返回功能 2. 若程序中定义了以下函数 double myadd(double a,double B) { return (a+B) ;} 并将其放在调用语句之后,则在调用之前应该对该函数进行说明,以下选项中错误的说明是(A) A) double myadd(double a,B); B) double myadd(double,double); C) double myadd(double b,double A); D) double myadd(double x,double y); 3. 有以下程序 void f(int v , int w) { int t; t=v;v=w;w=t; } int main( ) { int x=1,y=3,z=2; if(x>y) f(x,y); else if(y>z) f(y,z); else f(x,z); printf(“%d,%d,%d\n”,x,y,z); return 0; } 执行后输出结果是( C ) A) 1,2,3 B) 3,1,2 C) 1,3,2 D) 2,3,1 4. 以下叙述正确的是(C) A) c程序由主函数构成B) c程序由函数和过程构成 C) c程序由函数构成 D) 在c程序中,无论是整形值还是实型值,只要在允许的范围内,都能准确无误的表示 5. 构成c语言程序的基本结构单位是(A) A)函数B)过程C)复合语句D)语句 6. C语言规定:在一个源程序中,main函数的位置(C)。

C笔试题目:将"引用"作为函数返回值类型的格式、好处和需要.doc

C++笔试题目:将”引用”作为函数返回值类型的格式、好处和需要格式:类型标识符函数名(形参列表及类型说明){//函数体} 好处:在内存中不产生被返回值的副本;(注意:正是因为这点原因,所以返回一个局部变量的引用是不可取的因为随着该局部变量生存期的结束,相应的引用也会失效产生runtimeerror! 注意事项: (1)不能返回局部变量的引用。这条可以参照EffectiveC++[l]的Item31。主要原因是局部变量会在函 返回后被销毁,因此被返回的引用就成为了”无所指”的引用,程序会进入未知状态。 (2 )不能返回函数内部ne w分配的内存的引用。这条可以参照Effect i veC++[l]的I tem31。虽然不存在局部变量的被动销毁问题,可对于这种情况(返回函数内部new分配内存的引用),又面临其它尴尬局面。例如,被函数返回的引用只是作为一个临时变量出现,而没有被赋予一个实际的变量,那么这个引用所指向的空间(由n ew分配)就无法释放,造成memoryl eak。 (3)可以返回类成员的引用,但最好是const。这条原则可以参照Eff ect iveC++[l]的I tem30。主要原因是当对

象的属性是与某种业务规则(busines sru le)相关联的时候,其赋值常常与某些其它属性或者对象的状态有关,因此有必要将赋值操作封装在一个业务规则当中。 如果其它对象可以获得该属性的非常量引用(或指针),那么对该属性的单纯赋值就会破坏业务规则的完整性。 (4)流操作符重载返回值申明为“引用”的作用: 流操作符〉,这两个操作符常常希望被连续使用,例如: cout对于返回一个流指针则不能连续使用这个操作符象流操作符一样,是可以连续使用的,例如:x=j=10;或者(x=10)=100 :赋值操作符的返回值必须是一个左值,以便可以被继续赋值。因此引用成了这个操作符的惟一返回值选择。 例3 ^include in tp ut (intn); in tvals [10]: i nter ror=-l; voi dmain() { put (0)=10 ://以put (0)函数值作为左值,等价于V als[0]二10 ; put (9) =20;//以put (9)函数值作为左值,等价于va ls[9]=20;

VBA函数返回值

VBA之函数返回值 1.返回一个值 Function define_yy(ByVal names As String, ByVal workbooks As String) As String Dim str_return As String '返回值 Dim i, t As Integer ........ ........ ........ ........ ........ define_yy = str_return End Function 对于函数返回值的要点已经用粗体表示出来了.调用此函数的格式为: call modle_connection.define_yy() (这个是不需要返回值的调用方法) bb=modle_connection.define_yy(a,b) (这是需要返回值的方法) 注:modle_connection为程序块名 2.返回值为多个值,可以采用返回数组的类型 Function return_data(ByVal strSEL As String, ByRef x As Integer) As String() '需要有括号,代表数组 Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Dim bb(1000, 20) As String Dim i As Integer, j As Integer cn.Open strCN rs.Open strSEL, cn i = 1 Do While Not rs.EOF If x = 1 Then bb(i, 1) = rs(0) Else For j = 1 To x bb(i, j) = rs(j - 1) Next j End If i = i + 1 rs.MoveNext Loop x = i - 1 return_data = bb() 'BB()本身也需要定义为数组

答案第七章 函数..

第七章函数 一、选择题 1.以下函数声明正确的是: C 。(02~03第一学期试题) A) double fun(int x, int y) B) double fun(int x; int y) C) double fun(int x, int y) ; D) double fun(int x , y) 2.C语言规定,简单变量作实参,它与对应形参之间的数据传递方式是: B 。(0级) A)地址传递;B)单向值传递; C)双向值传递;D)由用户指定传递方式 3.以下关于C语言程序中函数的说法正确的是: B 。(0级) A)函数的定义可以嵌套,但函数的调用不可以嵌套; B)函数的定义不可以嵌套,但函数的调用可以嵌套; C)函数的定义和调用均不可以嵌套; D)函数的定义和点用都可以嵌套。 4.以下正确的函数形式是: D 。(1级) A)double fun(int x,int y) B)fun (int x,y) {z=x+y;return z;} {int z;return z;} C)fun(x,y) D)double fun(int x,int y) {int x,y ; double z; {double z; z=x+y; return z;} z=x+y; return z;} 5.以下说法不正确的是: B 。(1级) C 语言规定A)实参可以是常量、变量或表达式 B)形参可以是常量、变量或表达式 C)实参可以是任意类型 D)形参应与其对应的实参类型一致 6.C语言允许函数值类型缺省定义,此时该函数值隐含的类型是 B 。(0级) A) float型B) int 型C)long 型D)double 型 7.以下错误的描述是 D 。(0级) 函数调用可以 A)出现在执行语句中B)出现在一个表达式中 C)做为一个函数的实参D)做为一个函数的形参 8.若用数组名作为函数调用的实参,传递给形参的是 A 。(0级) A)数组的首地址B)数组第一个元素的值 C)数组中全部元素的值D)数组元素的个数 9.以下正确的说法是 A 。(0级) 如果在一个函数中的复合语句中定义了一个变量,则该变量 A)只在该复合语句中有效B)在该函数中有效 C)在本程序范围内有效D)为非法变量 10.以下不正确的说法为D 。(0级) A)在不同函数中可以使用相同名字的变量 B)形式参数是局部变量

函数练习题(C语言)带答案

C语言函数练习题 一、选择题 1. 一个完整的C源程序是【】。 A)要由一个主函数或一个以上的非主函数构成 B)由一个且仅由一个主函数和零个以上的非主函数构成 C)要由一个主函数和一个以上的非主函数构成 D)由一个且只有一个主函数或多个非主函数构成 2. 以下关于函数的叙述中正确的是【】。 A)C语言程序将从源程序中第一个函数开始执行 B)可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行 C)C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束 D)main可作为用户标识符,用以定义任意一个函数 3. 以下关于函数的叙述中不正确的是【】。 A)C程序是函数的集合,包括标准库函数和用户自定义函数 B)在C语言程序中,被调用的函数必须在main函数中定义 C)在C语言程序中,函数的定义不能嵌套 D)在C语言程序中,函数的调用可以嵌套 4. 在一个C程序中,【】。 A)main函数必须出现在所有函数之前 B)main函数可以在任何地方出现 C)main函数必须出现在所有函数之后 D)main函数必须出现在固定位置 5. 若在C语言中未说明函数的类型,则系统默认该函数的数据类型是【】 A)float B)long C)int D)double 6. 以下关于函数叙述中,错误的是【】。 A)函数未被调用时,系统将不为形参分配内存单元 B)实参与形参的个数应相等,且实参与形参的类型必须对应一致 C)当形参是变量时,实参可以是常量、变量或表达式 D)形参可以是常量、变量或表达式 7. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是 【】。 A)参数的形实结合 B)函数返回值 C)全局变量 D)同名的局部变量 8. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是【】。 A)实参与其对应的形参共占存储单元 B)只有当实参与其对应的形参同名时才共占存储单元 C)实参与对应的形参分别占用不同的存储单元 D)实参将数据传递给形参后,立即释放原先占用的存储单元

C语言期末实验之函数

高级语言程序设计 实验报告 实验编号 1505B000106 实验名称函数调用 实验地点软件实验室(二) 班级18计嵌2 学号20180505216 姓名王尊

一、实验目的 1.设计函数的参数与返回值并实现函数的调用; 2.分析递归函数的执行过程,设计递归函数。 二、实验原理 1.真正的编程工作中,我们需要完成的代码将非常大,所以将代码合理的分为不同的区块,每一个区块具有相对独立的功能,并为其它程序提供对外调用的参数和返回值。 由多个区域组成的程序才会让程序阅读者更方便的理解程序设计的理念。并可以通过函数让功能被封装起来,使得一个功能可以在不同的情况下被其它功能调用,函数的概念就是这样产生的。 2.当我们调用函数时,对其传入的参数和函数体内接收到的参数其实并不是同一个变量。调用函数时向函数传入的参数称作实际参数,简称实参,而函数体内部用于接收外部调用时传入的参数的参数称为形式参数,简称形参。 3.根据函数能否被其他源文件调用,将函数区分为内部函数和外部函数。 如果一个函数只能被本文件中其他函数所调用,它称为内部函数。在定义内部函数时,在函数名和函数类型的前面加static,可以使函数的作用域只局限于所在文件。即使在不同的文件中有同名的内部函数,也互不干扰。 3. 三、实验内容 问题1 输入一批正整数(以零或负数为结束标志),求其中的奇数和。要求定义和调用函数even(n)判断数的奇偶性,当n为偶数时返回1,否则返回0。 #include "stdio.h" int even(int n){ if(n%2==0)return 1; else return 0; } int main() { int n, s = 0; scanf("%d", &n); while (n != 0) { if (even(n) == 0) { s += n; } scanf("%d", &n); }

事件处理函数中返回值

事件处理函数中返回值 事件处理函数返回值其实指当事件发生时,浏览器会执行默认的操作,而当事件处理函数会返回一个结果,而当这个结果为true时,浏览器会继续执行默认操作,否则会停止执行。如果还是不懂的话,我们看一下下面这个实例: 当点击超链接标签时,如果check()的值为true,那么浏览器会跳转到abc.html页面中去,如果check()的值为false,点击超链接标签就不会跳转 这里return其实是对事件对象中的returnValue属性值的设置,而该属性就决定了该事件操作是否继续操作,当retrunValue为true时则继续操作,为false时则中断操作。 然而直接执行函数check,不使用return返回将不会对eturnvalue进行设置所以会默认地继续执行操作,比如如下实例 上面的实例就是不管check()的结果是true还是fasle,浏览器都会跳转到abc.html 页面中去。所以必须使用return返回。 事件处理函数返回值在表单中也存在这种情况,如下图

判断用户名是否为空,如果为空就不提交表单,否则就提交表单...跟上面理解是一样的。 讲到这里有很多同学在这里还能理解,但是呢,换个地方,换个事件绑定方式就不能理解了。 比如:在DOM对象上绑定事件: 很多人不能理解的是:在html元素上绑定事件时,return用了两次,才能阻止表单的提交,为什么在DOM对象上绑定事件时只用了一次return就能阻止表单提交,这里我们就要看看为什么了。 我们看看直接打印btn.onclick的结果,发现我们在html元素上绑定的事件处理函数fn是出现在DOM对象上事件处理函数的里面。 所以onclick=”return fn()”等价于 btn.onclick=function(){ return fn() },而fn()的结果true/false就决定表单是否提交。 总结:事件函数返回值; 如果返回true或者不返回,浏览器执行默认操作; 如果返回false,阻止浏览器默认操作。

c语言if后面return的用法详细解析

c语言if后面return的用法详细解析 return是C++预定义的语句,它提供了种植函数执行的一种放大。今天在这里为大家介绍c语言if后面return的用法,欢迎大家阅读! 在C89 中,main( ) 是可以接受的。Brian W. Kernighan 和Dennis M. Ritchie 的经典巨著The C programming Language 2e(《C 程序设计语言第二版》)用的就是main( )。不过在最新的C99 标准中,只有以下两种定义方式是正确的: int main( void ) int main( int argc, char *argv[] ) (参考资料:ISO/IEC 9899:1999 (E) Programming languages - C 5.1.2.2.1 Program startup) 当然,我们也可以做一点小小的改动。例如:char *argv[] 可以写成char **argv;argv 和argc 可以改成别的变量名(如intval 和charval),不过一定要符合变量的命名规则。 如果不需要从命令行中获取参数,请用int main(void) ;否则请用int main( int argc, char *argv[] ) 。 main 函数的返回值类型必须是int ,这样返回值才能传递给程序的激活者(如操作系统)。 如果main 函数的最后没有写return 语句的话,C99 规定编

译器要自动在生成的目标文件中(如exe 文件)加入return 0; ,表示程序正常退出。不过,我还是建议你最好在main函数的最后加上return 语句,虽然没有这个必要,但这是一个好的习惯。注意,vc6不会在目标文件中加入return 0; ,大概是因为vc6 是98 年的产品,所以才不支持这个特性。现在明白我为什么建议你最好加上return 语句了吧!不过,gcc3.2(Linux 下的C 编译器)会在生成的目标文件中加入return 0; 。 c语言if后面return的用法:C++C++98 中定义了如下两种main 函数的定义方式: int main( ) int main( int argc, char *argv[] ) (参考资料:ISO/IEC 14882(1998-9-01)Programming languages - C++ 3.6 Start and termination) int main( ) 等同于C99 中的int main( void ) ;int main( int argc, char *argv[] ) 的用法也和C99 中定义的一样。同样,main 函数的返回值类型也必须是int。如果main函数的末尾没写return 语句,C++98 规定编译器要自动在生成的目标文件中加入return 0; 。同样,vc6 也不支持这个特性,但是g++3.2(Linux 下的C++ 编译器)支持。 c语言if后面return的用法:关于void main在C 和C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程

相关文档
最新文档