第7章 函数

合集下载

C语言程序设计第四版_谭浩强7章

C语言程序设计第四版_谭浩强7章

➢函数的功能
return z; }
函数体
函数首部,不是语 句,行尾无分号
精选课件ppt
函数的返回值,类 型与首部定义一致14
函数的定义
关于函数类型的说明
无返回值的函数类型为void; 有返回值的函数,其类型根据返回值 类型决定;省略类型时默认为int(建议 不要省略)
精选课件ppt
15
函数的调用
int main( )
{ int max(int a[ ],int n);
int x[6],i;
for(i=0;i<=5;i++)
scanf("%d",&x[i]);
printf("max=%d",max(x,6));
return 0;
}
实参为数组名
精选课件ppt
int max(int a[ ],int n) { int m,i; m=a[0]; for (i=1;i<n;i++)
float fac; fac=1; for(i=1;i<=n;i++)
fac=fac*i; return fac;
printf("c="); scanf("%d",&c);
}
sum=factorial(a)+factorial(b)+factorial(c);
printf("%d!+%d!+%d!=%.0f",a,b,c,sum);
函数1 函数2 函数3
函数1 函数2
精选课件ppt
34
变量作用域——局部变量和全局变量

第7章 函数

第7章  函数

第七章 函 数学习和解题要点1.函数的概念和作用函数:是具有一定功能的一个程序块;是C 语言的基本组成单位。

要求掌握函数定义方法,有关函数类型和返回值的相关知识。

要会调用函数,并能处理函数嵌套、递归调用的相关问题。

1) 函数的参数,返回数值(示意图):2.函数的定义存储类型 (返回的)数据类型 函数名(形参说明语句序列) (注:此地分不能有分号) {函数内用的变量说明序列;(临时工作单元) 可执行语句序列;(包括 return(表达式)语句) }函数的返回值一般是通过 return 语句获得的。

返回的数据类型说明一般应该和return 语句中的表达式类型一致,若不一致则以数据类型说明为准。

如函数中没有 return 语句或 return ;函数无返回值,返回一个用户很难确定的值。

说明:函数的数据类型:int char short long float double *类型。

缺省为 int 型。

不返回值为 void 型。

函数的存储类型:内部函数 本文件内有效 static外部函数 可被其他文件函数调用 extern3.函数调用:函数名(实参表)可以为独立语句:函数名(实参表); 表达式中:变量=函数名(实参表)+其他式;实参表与形参表的对应一般要做到三个一致:个数一致类型一致(在学指针时,指针变量和地址对应)次序一致实参都应该己预先说明的,并有确定的值。

一般,函数都应先定义后调用。

对函数返回值是 int 或 char 的可先调用后定义。

如果非int 或 char型的函数一定要先调用后定义,则在函数调用语句前先作一个“申明”,申明的方法是相当于把函数头部抄一遍,加一个分号:存储类型(返回的)数据类型函数名(形参表);(注:此地分号不可少) 4.函数调用的数据传递把实参数据复制给形参,形参变量内数据变化不影响实参--值调用。

main(){ int a=45,b=50;c=max(a,b);}int max(int x,int y){ .............}把实参的地址传给形参,这时形参变量应为指针变量,因此形参实参共用一个内存位置,形参值的变化也即实参值的变化--地址调用(名调用)。

c语言第7章函数练习题

c语言第7章函数练习题
3. 以下对 C语言函数的有关描述中,正确的是( )。 A. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参 B. C函数既可以嵌套定义又可以递归调用 C. 函数必须有返回值,否则不能使用函数 D. C程序中有调用关系的所有函数必须放在同一个源程序文件中
4. C语言程序中,当函数调用时( )。 A. 实参和形参各占一个独立的存储单元 B. 实参和形参共用一个存储单元 C. 可以由用户指定是否共用存储单元 D. 计算机系统自动确定是否共用存储单元
fun(int x,int y,int z)
{ z=x*x+y*y;}
main()
{
int a=31;
fun(5,2,a);
printf("%d",a);
}
A.0
B.29
30.下列程序执行后的输出结果是( )。
voidfunc1(int i);
voidfunc2(int i);
charst[]="hello,friend!";
printf("%d\n",x);
}
上面程序的输出结果是( )。
A.720
B.120
C.24
39.下面程序的输出是( )。
main()
{
intt=1;
fun(fun(t));
}
fun(inth)
{
staticinta[3]={1,2,3};
intk;
for(k=0;k<3;k++) a[k]+=a[k]-h;
B. 不同函数中,可以使用相同名字的变量
C. 形式参数是局部变量
D. 在一个函数内部,可以在复合语句中定义变量,这些变量只在本复合语句中有效

第7章函数

第7章函数

7.4 函数参数传递和函数的值
• 函数的参数分为形参和实参两种。形参出现在函数 定义中,在整个函数体内都可以使用,离开该函数 则不能使用。实参出现在主调函数中,进入被调函 数后,实参变量也不能使用。
• 形参和实参的功能是传送数据。当发生函数调用时, 主调函数把实参的值传送给被调函数的形参,从而 实现主调函数向被调函数的数据传送。这样的参数 传递方式叫做“数值传递”,简称“值传递”。
函数调用过程中,若形参的值发生改变,不会影响实参中的 值发生变化。
【例7.5】编程求n+(n-1)+(n-2)+…+1的和。 #include <stdio.h> void s(int n) void main() 程序运行过程与结果为: {int i; {int n; input number n: for(i=n-1;i>=1;i--) printf("input number n\n"); 5↙ n=n+i; scanf("%d",&n); ********* printf("n=%d\n",n); } printf("*********\n"); /*调用函数s之前,输出n值*/ n=5 printf("n=%d\n",n); /*调用函数s之前,输出n值*/ ********* printf("*********\n"); /*在函数s内部,输出n值*/ n=15 void s(int); ********* /*调用前,说明函数s*/ s(n); n=5 /*调用函数s之后,输出n值*/ printf("*********\n"); ********* printf("n=%d\n",n); /*调用函数s之后,输出n值*/ printf("*********\n"); }

C语言程序设计_课件_第七章(适于清华谭浩强版)

C语言程序设计_课件_第七章(适于清华谭浩强版)

注意:
(1) return(表达式); 和return 表达式;都 是正确的。 (2) 带返回值的函数只能返回一个值。 (3) 在函数定义时,允许使用多个return语句, 但是应尽量在末尾使用一个return语句。 (4) return语句中的表达式与函数的返回值类 型不匹配时,以函数定义时的返回类型为准。

问题的提出 函数基础 函数的定义 函数说明 函数调用 参数传递 程序举例 递归调用 变量的存储类别
7.1 问题的提出
例6.20它可以解决的问题有: ①输入若干个学生的姓名、某课程的期中 和期末成绩,并计算每个学生的总评成绩; ②计算总评成绩的分数段情况; ③输出所有学生的姓名、期中、期末和总 评成绩; ④查询某个学生的总评成绩。
函数调用时需要传递数据。调用函数要将 实参的值传送给被调用函数的形参。 若函数定义首部是 double power(double x,int n) /*函数定义 */ 调 用 形 式 是 可 以 是 power(y,m) , 也 可 以 是 power(3.0,5)。 其中,x和n是形式参数,y和m是实际参数,3.0 和可以是一个变量 名,因为变量名也构成一个表达式,形式参数只 能是变量名。当实际参数是变量名时,它与形参 的名称既可以相同,也可以不同,只是要注意, 在函数定义内部应该使用形参的名称。 (2) 实际参数与形式参数的参数个数、数据类型 和顺序都应该一致,如果数据类型不一致,系统 将按照自动转换规则进行转换。
7.3 函数的定义
7.3.1 函数的定义形式 在C语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:

第7章贝塞尔(Bessel)函数

第7章贝塞尔(Bessel)函数

(4) 三类函数的关系:

(x)
=
1 2
⎡⎣ Hν(1)
(x)
+
Hν( 2 )
( x) ⎤⎦

(x)
=
1 2i
⎡⎣Hν(1) (x)

Hν(2) (x)⎤⎦
15
7.2 贝塞尔函数的母函数,递推关系等
1. 母函数
P68, 例3.4.2
∑ ∑ ∑ f
( x, t )
=
x (t−1)
e2 t
=
∞ n=−∞
k =0
s=0
k =0
s=0
k =0
要使上式在 z < R 的区域内成立,左边 z 的各次幂的系数必须等于零。
5
由 z 的最低次幂的系数为零得:
C0[ρ(ρ −1) + a0ρ + b0 ] = 0
( a0 , b0 已知)
C0 ≠ 0 ⇒ ρ(ρ −1) + a0 ρ + b0 = 0
(10)
—— ρ 的二次方程,指标方程
k =0
k+v
=

C2n X
n=0
2n+v
=
∞ n=0
(−1)n Γ(ν 22n n!Γ(ν
+ 1)C0 + n +1)
X
2 n +ν
另一个特解为: (ρ2 = −ν )
∑ ∑ ∑ y2(x) =

Ck X k −ν
k =0
=

C2n X 2n−ν
n=0
=
∞ (−1)n Γ(−ν +1)C0 n=0 22n n!Γ(−ν + n +1)

C语言程序设计基础 第7章

C语言程序设计基础 第7章

模块化程序设计的基本要点是贯彻“自顶向下,逐步细 化”的思想方法,即将一个复杂功能的编程问题,划分成若 干个功能相对简单的子问题。这种划分可以逐层进行,直到 便于编程为止。在C语言中,一个模块的功能由一个函数来 实现。顶层函数是主函数main( )。功能模块与C语言函数的 关系如图7.1所示。
图7.1 模块与函数
第7章 函数——模块化程序设计方法的实现
7.1 模块化程序设计方法与函数 7.2 函数的定义 7.3 函数的调用 7.4 函数调用的条件与函数声明 7.5 函数的嵌套调用和递归调用 7.6 变量的作用域与函数间的数据传递 7.7 用函数实现模块化程序设计 实训任务十三 熟悉函数的功能及其使用方法 实训任务十四 学习模块化程序设计的方法
② 函数功能实现部分,是一个程序段,要依据实现某 种功能的算法进行设计。
③ 函数体最后使用一个“return(返回值);”语句,括 号中的返回值是一个需传带给主调函数的数据对象。如果没 有返回值,可以不要这个语句。VC++ 6.0系统中提倡在 main( )函数体后使用一个“return 0;”语句,表示正常返 回系统,否则会出现警告。如果函数体仅是一对花括号,没 有任何语句,就是空函数。空函数一般是无参函数。
7.2 函 数 的 定 义
怎样定义函数?定义函数要考虑哪些问题?
定义函数要解决两个方面的问题:一是函数间的接口问 题,二是功能实现问题。接口问题包括如何被上层函数调用 ,调用时需传递什么数据,调用返回时需传带什么数据。功 能实现问题就是如何实现模块的过程算法。
函数定义的一般形式为
基类型符 函数名(类型符形式参数 1,类型符形式参数 2,…) {
函数体内数据对象定义或声明部分; 函数功能实现部分; return(返 回值); }

C语言课件第07章-自定义函数

C语言课件第07章-自定义函数

在主函数或其他函数中,我们可以使用y=sum();语句执行函数sum,并把 函数的值送给y,或者用printf("%d",sum());直接输出函数sum的值。
第7章 自定义函数
2. 有参函数的定义形式 如果一个函数,需要调用者提供原始数据才能执 行(如sqrt函数),则这种函数可以被定义成有 参函数。其定义形式如下:
第7章 自定义函数
下面我们定义一个函数,名叫 printStar,其功能就是专门输出 则,主函数代码可以简化为:
经过函数调用,程序的代码行大大缩水,且main 函数更清晰且可读性更好。
第7章 自定义函数
如果我们把printStar函数的代码放到d盘根目录 下的一个文本文件中,比如放到function.txt文 本文件中,其他的程序如果有需要,也完全可以 用#include <d:\function.txt>把有关内容包含 到对应程序文件中,在需要的时候调用printStar 函数即可 。 函数:函数就是一个用名字命名的独立的程序块( 子程序),能实现某些功能,可供本程序其他函数 ,或者另外一些程序的函数调用。
第7章 自定义函数
factorial 函数专门求n的阶乘
第7章 自定义函数
形式参数(形参):函数在声明(定义) 的时候,同时对函数所需要的参数的数量、类型做出 说明。这些参数的名字只是一种形式,只有在函数被 调用时,这些参数才能得到具体值,所以这些参数为 形式参数。比如,函数求阶乘函数中的n就是形式参 数。 实际参数(实参):一个有参函数在被调用的时候, 主调函数必须根据被调用函数形参(形式参数)的要 求,传递具体数据给被调用函数的形参,这些实际的 数据就叫做实际参数,也就是我们所说的实参。 实参是有具体值的,实参可以是常数,也可以是变量 。但在使用时必须有具体值。
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

单项选择题0701. 一个C语言程序总是从( )开始执行的。

A. 主函数B. 主过程C. 主程序D. 子程序0702. 下面的函数调用语句中func函数的实参个数是( )。

func(f2(v1,v2),(v3,v4,v5));A. 2B. 3C. 4D. 50703. ( )是构成C语言程序的基本单位。

A. 函数B. 过程C. 0D. 10704. 函数double sqrt(x)的功能是( )。

A. 求x的平方根B. 求x的平方C. 求x的对数D. 求x的绝对值0705. 以下叙述中不正确的是( )。

A. 在C程序的函数中,最好使用全局变量B. 调用函数时,只能把实参的值传送给形参,形参的值不能传送给实参C. 形参只是局限于所在函数D. 函数名的存储类别为外部0706. C语言程序从main()函数开始执行,所以这个函数要写在( )。

A. 程序文件的任何位置B. 程序文件的开始C. 它所调用的函数的前面D. 程序文件的最后0707. 表达式sizeof(double)是( )。

A. int型表达式B. 函数调用C. double型表达式D. 非法表达式0708. 若用数组名作为函数调用时的实参,则实际上传递给形参的是( )。

A. 数组首地址B. 数组的第一个元素值C. 数组中全部元素的值D. 数组元素的个数0709. 对函数形参的说明有错误的是( )。

A. int a(float x[10],int n)B. int a(float x[],int n)C. int a(float *x,int n)D. int a(float x,int n)0710. 在C语言中,函数的数据类型是指( )。

A. 函数返回值的数据类型B. 函数形参的数据类型C. 调用该函数时的实参的数据类型D.任意指定的数据类型0711. 已知如下定义的函数:fun1(a){ printf("\n%d",a);}则该函数的数据类型是( )。

A. 与参数a的类型相同B. void型C. 没有返回值D. 无法确定0712. 一个函数内有数据类型说明语句如下:double x,y,z(10);关于此语句的解释,下面说法正确的是( )。

A. 语句中有错误B. z是一个函数,小括号内的10是它的实参的值C. z是一个变量,小括号内的10是它的初值D. z是一个数组,它有10个元素0713. 已知函数定义如下:float fun1(int x,int y){ float z;z=(float)x/y;return(z);}主调函数中有int a=1,b=0;可以正确调用此函数的语句是( )。

A. 调用时发生错误B. printf("%f",fun1(a,b));C.printf("%f",fun1(&a,&b));D. printf("%f",fun1(*a,*b));0714. 下面函数的功能是( )。

a(s1,s2)char s1[],s2[];{ while(s2++=s1++) ;}A. 字符串复制B. 字符串比较C. 字符串连接D. 字符串反向0715. 在下列结论中,只有一个是错误的,它是( )。

A. 有些递归程序是不能用非递归算法实现的B. C语言允许函数的递归调用C. C语言中的continue语句,可以通过改变程序的结构而省略D. C语言中不允许在函数中再定义函数0716. 已知:int a, *y=&a;则下列函数调用中错误的是( ) 。

A. printf("%d", y);B. scanf("%d", y);C.printf("%d", a);D. scanf("%d", &a);0717. 函数的功能是交换变量x和y中的值,且通过正确调用返回交换的结果。

能正确执行此功能的函数是( )。

A. func (int *x, int *y) { *x=*x+*y;*y=*x-*y;*x=*x-*y;}B. funb (int x, int y) { int t; t=x;x=y;y=t;}C.func (int *x, int *y) { *x=*y;*y=*x;}D. funa (int *x, int *y) { int *p;p=x;*x=*y;*y=*p;}0718. 一个完整的C源程序是( )。

A. 由一个且仅由一个主函数和零个以上的非主函数构成B. 要由一个主函数或一个以上的非主函数构成C.要由一个主函数和一个以上的非主函数构成D.由一个且只有一个主函数或多个非主函数构成0719. 以下关于函数的叙述中正确的是( )。

A. C语言规定必须用main作为主函数名,程序将从此开始执行,在此结束B. 可以在程序中由用户指定任意一个函数作为主函数,程序将从此开始执行C. C语言程序将从源程序中第一个函数开始执行D. main可作为用户标识符,用以定义任意一个函数0720. 以下关于函数的叙述中不正确的是( )。

A. 在C语言程序中,被调用的函数必须在main函数中定义B. C程序是函数的集合,包括标准库函数和用户自定义函数C. 在C语言程序中,函数的定义不能嵌套D. 在C语言程序中,函数的调用可以嵌套0721. 在一个C程序中( )。

A. main函数可以在任何地方出现B. main函数必须出现在所有函数之前C. main函数必须出现在所有函数之后D. main函数必须出现在固定位置0722. 若未说明函数的类型,则系统默认该函数的数据类型是( )。

A. intB.floatC. doubleD. bool0723. 以下关于函数叙述中,错误的是( )。

A. 形参可以是常量、变量或表达式B. 实参与形参的个数应相等,且实参与形参的类型必须对应一致C. 当形参是变量时,实参可以是常量、变量或表达式D. 函数未被调用时,系统将不为形参分配内存单元0724. C程序中各函数之间可以通过多种方式传递数据,下列不能用于实现数据传递的方式是( )。

A. 同名的局部变量B. 函数返回值C. 全局变量D. 参数的形实结合0725. 若函数调用时参数为基本数据类型的变量,以下叙述正确的是( )。

A. 实参与对应的形参分别占用不同的存储单元B. 实参与其对应的形参共占存储单元C. 只有当实参与其对应的形参同名时才共占存储单元D. 实参将数据传递给形参后,立即释放原先占用的存储单0726.函数调用时,当实参和形参都是简单变量时,他们之间数据传递的过程是( )。

A. 实参将其值传递给形参,调用结束时形参并不将其值回传给实参B. 实参将其地址传递给形参,并释放原先占用的存储单元C. 实参将其地址传递给形参,调用结束时形参再将其地址回传给实参D. 实参将其值传递给形参,调用结束时形参再将其值回传给实参0727.若用数组名作为函数调用的实参,则传递给形参的是( )。

A. 数组的首地址B. 数组的第一个元素的值C. 数组中全部元素的值D. 数组元素的个数0728. 若函数调用时,用数组名作为函数的参数,以下叙述中正确的是( )。

A. 实参与其对应的形参共用同一段存储空间B. 实参与其对应的形参占用相同的存储空间C. 实参将其地址传递给形参,同时形参也会将该地址传递给实参D. 实参将其地址传递给形参,等同实现了参数之间的双向值的传递0729. 如果一个函数位于C程序文件的上部,在该函数体内说明语句后的复合语句中定义了一个变量,则该变量( )。

A. 为局部变量,只在该复合语句中有效B. 为全局变量,在本程序文件范围内有效C. 为局部变量,只在该函数内有效D. 定义无效,为非法变量0730. C语言中函数返回值的类型是由( )决定。

A. 定义函数时所指定的函数类型B. return语句中的表达式类型C. 调用函数的主调函数类型D. 调用函数时临时0731.若在一个C源程序文件中定义了一个允许其他源文件引用的实型外部变量a,则在另一文件中可使用的引用说明是( )。

A. extern float aB. extern static float aC. float aD. extern auto float a0732. 定义一个void型函数意味着调用该函数时,函数( )。

A. 没有返回值B. 通过return返回一个用户所希望的函数值C. 返回一个系统默认值D. 返回一个不确定的值0733. 若定义函数float *fun( ),则函数fun的返回值为( )。

A. 一个指向实型变量的指针B. 一个实数C. 一个指向实型函数的指针D. 一个实型函数的入口地址0734. C语言规定,程序中各函数之间( )。

A. 既允许直接递归调用也允许间接递归调用B. 不允许直接递归调用也不允许间接递归调用C. 允许直接递归调用不允许间接递归调用D. 不允许直接递归调用允许间接递归调用0735. 若程序中定义函数float myadd(float a, float b){ return a+b;}并将其放在调用语句之后,则在调用之前应对该函数进行说明。

说明中错误的是( )。

A. float myadd( float a,b)B. float myadd(float b, float a)C. float myadd(float, float)D. float myadd(float a, float b)0736. 下列叙述中错误的是( )。

A. 主函数中定义的变量在整个程序中都是有效的。

B. 在其它函数中定义的变量在主函数中也不能使用。

C. 形式参数也是局部变量。

D. 复合语句中定义的变量只在该复合语句中有效。

0737. 若函数的形参为一维数组,则下列说法中正确的是( )。

A. 形参数组可以不指定大小。

B. 调用函数时的对应实参必为数组名。

C. 形参数组的元素个数必须等于实参数组的元素个数。

D. 形参数组的元素个数必须多于实参数组的元素个数。

0738. 在函数的说明和定义时若没有指出函数的类型,则( )。

A. 系统自动地认为函数的类型为整型。

B. 系统自动地认为函数的类型为字符型。

C. 系统自动地认为函数的类型为实型。

D. 编译时会出错。

0739. 下面叙述中正确的是( )。

A. 函数可以返回一个值,也可以什么值也不返回。

B. 说明函数时必须明确其参数类型和返回类型。

C. 对于用户自己定义的函数,在使用前必须加以说明。

D. 空函数不完成任何操作,所以在程序设计中没有用处。

0740. 下面正确的函数定义形式是( )。

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)0741. 关于函数的调用,以下错误的描述是( )。

相关文档
最新文档