第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章第6讲函数的幂级数展开
sin x x 1 x3 1 x5 (1)n 1 x2n1 x (,) .
3! 5!
(2n 1)!
12
二、 函数的幂级数展开
2.间接展开法
间接展开法, 就是利用已知函数的幂级数展开式, 通过幂级 数运算(如四则运算、逐项求导、逐项积分等)以及变量代换等, 获得所求函数的幂级数展开式.这种方法不但计算简单, 而且可以 避免研究余项.由于函数的幂级数展开式是唯一的, 因此间接法与 直接法展成的幂级数是一致的.
2
f (n) (0) 顺序循环地取 0,1,0,1, (n 0,1,2,3,) ,
于是得到麦克劳林级数
x 1 x3 1 )!
它的收敛半径为 R , 因而此幂级数处处收敛.
11
二、 函数的幂级数展开 例 1 将函数 f (x) sin x 展开成 x 的幂级数.
f
( x0 2!
)
(
x
x0
)
2
f
(n) ( x0 n!
)
(
x
x0
)n
n0
f
(n) ( x0 n!
)
(x
x0
)n
称为函数 f (x) 在点 x0 处的泰勒级数,
特别地, 函数 f (x) 在 x0 0 处的泰勒级数
f (0) f (0)x f (0) x2 f (n) (0) xn f (n) (0) xn
第二步 求出函数 f (x) 及其各阶导数在 x 0处的值 f (0), f (0), f (0),, f (n) (0), ;
第三步 写出 f (x) 的麦克劳林级数
f (x) ~ f (0) f (0)x f (0) x2 f (n) (0) xn ,
第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){ .............}把实参的地址传给形参,这时形参变量应为指针变量,因此形参实参共用一个内存位置,形参值的变化也即实参值的变化--地址调用(名调用)。
第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语言程序设计(向华主编)_第7章_函数
fun1_2() {…… }
fun2() { …… fun2_1(); …… fun2_2(); …… }
fun2_1() {…… }
fun2_2() {…… }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.1
二、C 二、C函数的分类
1.从函数定义的角度分类 从函数定义的角度分类
函数概述
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
习题
P187 3.(1)(2)(3)
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
函数
7.3
一、函数参数
函数参数及返回值
参数的作用: 参数的作用: 函数的参数用于建立函数之间的数据联系。当一个函数调用另一个函数时, 实际参数的值会传递给形式参数,以实现主调函数与被调函数之间的数据通 信。同时,函数参数的运用还可提高一个函数的灵活性和通用性。 [例7.3] 编写一个函数,打印一条由星号构成的横线。 例 编写一个函数,打印一条由星号构成的横线。 main() { pstar() ; /* 第一次调用pstar函数 */ printf(" 欢迎使用本程序!\n") ; 运行结果: 运行结果: pstar() ; /* 第二次调用pstar函数 */ ******************** } 欢迎使用本程序! pstar() /* 定义pstar函数 */ ******************** { printf("********************\n") ; }
《C语言程序设计》 语言程序设计》
清华大学出版社
第7章
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语言中函数定义的形式有两种。
第一种:
函数返回值的数据类型说明 函数名称(带有类型说明的参数表)
{
函数内部数据说明; 语句;
}
第二种:
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语言程序设计知识点—第7章 函数
第 7 章:函数
主讲教师:杨剑
1. 本章目标
熟练掌握函数的定义与调用方法 理解函数的定义、声明和调用的区别 理解函数原型、实参、形参和函数的返回值 了解函数的嵌套调用和递归调用的方法 掌握数组做为函数参数的使用方法 理解变量的作用域和存储方法
2. 函数机制的优点
~6~
C 语言程序设计知识点
主讲教师:杨剑
[练习]若各选项中所用变量已正确定义,函数 fun 中通过 return 语句返回一个函数值,
以下选项中错误的程序是( )
A.main()
{……x=fun(2,10); ……}
float fun(int a,int b){……}
B.float fun(int a,int b){……}
int data; scanf(“%d”,&data); printf(“%d”,add(data)); return 0;
~5~
C 语言程序设计知识点
主讲教师:杨剑
} int add(____②_____) {
int i,sum=0; for(i=1;i<=n;i++)
sum=sum+i; _______③__________ } 答案: ①int add(int); ②int n ③retrun sum;
{
printf(“%d\n”,F(3+5));
}
[练习]程序运行后的输出结果是( )
A.192 B.29
C.25
D.编译出错
答案:D
在 C 语言中,函数返回值的类型最终取决于( )
A.函数定义时在函数首部所说明函数类型
B.return 语句中表达式值的类型 C.调用函数时主调函数所传递的实参类型
高一数学第7章知识点归纳
高一数学第7章知识点归纳高中数学是中学数学的升级版,第七章是高一数学中的重要章节。
这一章主要涉及到的主题是函数和方程。
函数是数学中的一个基本概念,也是高中数学的核心内容之一。
在这一章里,我们学习了函数的定义、性质以及函数的图像表示等知识点。
1. 函数的定义和性质函数的定义是数学中最基本的概念之一。
我们把一个集合A中的元素x与另一个集合B中的唯一元素y之间的这种对应关系称为函数。
函数的定义可以抽象成 f: A -> B,其中A称为定义域,B称为值域。
函数有很多性质,其中最重要的性质是一一对应性质。
如果一个函数f中的每一个元素x对应到B中的唯一元素y,且不同的x对应到不同的y,那么我们称函数f是一个一一对应函数。
2. 函数的表示和图像函数的图像是函数在坐标系中的几何表示。
在高中数学中,我们通常用函数的图像来描述函数的特点。
函数的图像是由函数的定义域中的每一个元素与对应的值域中的元素所组成的点集。
例如,如果函数f 的定义域是集合A={1, 2, 3},函数的值域是集合B={2, 4, 6},那么函数的图像就是坐标系中的三个点{(1, 2), (2, 4), (3, 6)}。
3. 基本函数在高一数学的第七章中,我们学习了一些常见的基本函数,例如线性函数、二次函数、指数函数和对数函数等。
这些函数在数学中有着重要的地位,并且在实际生活中也有广泛的应用。
线性函数是最简单的一种函数,它的一般形式是 f(x) = ax + b。
其中a和b是常数,a表示线性函数的斜率,b表示线性函数的截距。
线性函数的图像是一条直线。
二次函数的一般形式是 f(x) = ax^2 + bx + c,其中a、b和c是常数,且a不等于0。
二次函数的图像是一个开口向上或者向下的抛物线。
指数函数的一般形式是 f(x) = a^x,其中a是一个大于0且不等于1的常数。
指数函数的图像是一个经过点(0,1)并且呈指数递增或指数递减的曲线。
对数函数是指数函数的逆运算。
第七章:函数
11、编写函数:传递参数为一任意字符,返回它的ASCII码值。
12、编写函数,打印出指定行数的图案。
13、编写求任意数阶乘的的函数,利用该函数求1!+2!+….+20!之和。
14、编写判断某个数是否为素数的函数。(只可以被1各它本身整除的数为素数)
15、利用14题的函数,统计出1000以内共有多少个素数。
STEP=16
数组作为函数参数
26、利用数组元素作为参数,编写函数找到数组中的最大值,并指出最大值的位置。
27、利用数组作为参数,编写函数找到数组中的最大值,并指出最大值的位置。
28、有两个班级,分别有35名和30名学生,调用一个average函数,分别求这两个班的学生的平均成绩。
29、编写冒泡排序及选择排序的函数,并对数组进行排序。
5、输入一个三位整数,输出它的反序数。
6、输入一个整数,编写三个函数分别返回整数的最高位、末位和指定的任意位的值。
7、编写两个函数,分别用于返回两个数最大公约数和最小公倍数。
提示:求m,n的最大公约数:首先将m除以n(m>n)得余数R,再用余数R去除原来的除数(m=n,n=r,原除数变为被除数,余数变为除数),得新的余数,重复此过程直到余数为0时停止,此时的除数就是m和n的最大公约数。求m和n的最小公倍数: m和n的积除以m和n的最大公约数。
getch();
return 0;
}
int gong(int m,int n)
{
if(n==0)
return m;
else
return gong(n,m%n);
}
第23题:
add_every_num(int num)
第7章函数的导数和积分
函数的2阶导数:
f2 =
-1/4/cos(x)^(3/2)*sin(x)^21/2*cos(x)^(1/2)-2*cos(x)+x*sin(x)
dfx
sinx
sinxxcosx
dx 2 cosx
d2dfx2x4cossixn2cxosx
cosx2cosxxsinx 2
f 3 x z
% 计算多维函数的导数
syms x y z
f1=x*y*z;f2=x^2-y;f3=x+z;
disp(' 多维函数表达式向量:')
f=[f1;f2;f3]
disp(' 多维函数的偏导数矩阵:')
J=jacobian(f,[x y z])
M文件运行结果:
第7章 函数的导数和积分
对于可导的函数的导数也是一个函数,称作的导 函数。寻找已知的函数在某点的导数或其导函数 的过程称为求导,反之已知导函数,也可以倒过 来求原来的函数。
求导和积分是一对互逆的操作,它们都是微积分 学中最为基础的概念。微积分基本定理说明了求 原函数与积分是等价的。在微积分中,积分是微 分的逆运算,即知道了函数的导函数,反求原函 数。在应用上,积分作用不仅如此,它被大量应 用于求和(例如求曲边三角形的面积),这巧妙 的求解方法是积分特殊的性质决定的。
f=sqrt(cos(x))-x*sin(x); % 定义函数表达式
disp (' 函数的1阶导数:'),f1=diff(f)
disp (' 函数的2阶导数:'),f2=diff(f,2)
M文件运行结果:
函数的1阶导数:
第七章(c语言谭版)函数
调用a
调用b
}
}
}
例: 用弦截法求方程的根。
x3–5x2+16x–80=0 方法如下: (1) 取两个不同点x1、x2,如果f(x1)和f(x2)符号相反, 则(x1,x2)区间内必有一个根。如果f (x1)与f (x2)同 符号,则应改变x1、x2,直到f (x1)、f (x2)异号为 止。注意x1、x2的值不应差太大,以保证(x1, x2) 区间只有一根。
float x1, x2; { int i; float x, y, y1; y1=f(x1); do { x=xpoint(x1, x2);
y=f(x);
if (y*y1>0) /*f(x)与f(x1)同符号。*/ {y1=y; x1=x;} else x2=x; } while (fabs(y)>=0.0001); return (x); }
个return.
返回值类型为函数类型。 一般return中的返
回值类型应与函数定义时的类型一致, 不一致时,
以函数定义类型为准。
5. 调用函数应对被调用函数的返回值类型作出说 明:(函数名相当于一变量,但应有所区别)
类型符 函数名( );
它不同于函数的定义(功能定义) 例: 求二实数之和 main ( ) { float add( ); float a, b, c;
hanoi(n, one, two, three)
表示n个盘子从one塔借助于two塔(空)移至three塔。 调用时塔用字符常量'A' ,' B ', ' C '表示。
§7.5 数组作为函数参数
分为两种情况: 1. 数组元素作为实参
计算机等级考试 C语言 第7章C语言 函数
/* 函数功能: 用迭代法计算n!
返回值函数类入型口参数:函整数型名变说量n明表示阶乘的形阶参数表,函
函数返回值: 函返数回的n!功的能值
数入口
*/
long Fact(int n) /* 函数定义 *函/ 数内部可以定义
{
只能自己使用的变
int i;
量,称内部变量
long result = 1;
for (i=2; i<=n; i++)
2/51
问题的提出
此前,我们所有的代码基本上都是放在main函 数中,这对于一个小的问题来说没问题,但如 果一个问题较大,里面涉及到成百上千个变量 ,将所有代码放在main函数里面显然是非常糟 糕的事情。
我们可以将一个大的问题分解成一个一个的小 问题,每个小问题放在一个函数里面,最后在 main函数里整合。这种思想实际上就是所谓的 “分而治之”。
printf("Input data error!\n"); } else {
for(i=2;i<=n;i++) {
result*=i;
2019/9/10
} return result; } }
25/51
防御性程序设计(Defensive Programming)
但是输入-1后,会输出 :
Input data error!
int i; long result=1; for(i=2;i<=n;i++) {
result*=i; } return result; }
int main() { int m; long ret;
printf("input m:"); scanf("%d",&m); ret=Fact(m); printf("%d!=%d\n",m,ret); return 0; }
第七章 函数的重载
7
实现函数重载
函数重载是通过在类中定义两个或更多的同名的函 数来实现函数重载。 数来实现函数重载。 在函数重载中, 在函数重载中,函数的每个定义必须在函数签名中 不同。 不同。
8
函数签名
函数的签名被下面的部分定义: 函数的签名被下面的部分定义:
参数的数量 参数的类型 参数的顺序 返回类型不是函数签名的一部分
public class DaysInYear { private int days; public DaysInYear(int days) 1.DaysInYear DIY = new DaysInYear(); { 2.DaysInYear DIY = new DaysInYear(5); this.days = days; 3.DaysInYear DIY = new DaysInYear("5"); } public DaysInYear(String dayOne) 4.DaysInYear DIY = new DaysInYear(‘5’); 5.DaysInYear DIY; { days =Convert.ToInt32(dayOne); } 1.错误 错误 public void setDay(int newDays) 2.调用int构造函数 调 构造函数 { 3.调用string构造函数 调 构造函数 days = newDays; 4.调用int构造函数 调 构造函数 } 5.没有对象生成,需要 没有对 或者让 没有 象生成,需要new或者让它指向一 或者 … 个DaysInYear对象 对 }
函数重载: 函数重载:这个方法允许为两个或更多函数使用同样 的名字。 的名字。函数的每个重新定义必须使用不同的参数类 参数顺序或多个参数。 型、参数顺序或多个参数。 操作符重载: 操作符重载:这个方法允许用户定义的类型例如结构 和类,为使它们的对象易于操作而使用重载操作符。 和类,为使它们的对象易于操作而使用重载操作符。
第七章 系统函数
1、求下图所示离散系统在(1))()()2(),()(21k k f k k f εδ==激励作用下的零状态响应。
解:由梅森公式,得zz z zzzz F z Y z H -+=-+==---3223111)()()((1)1)()()(11=↔=z F k k f δ1,11111)1(1)()()(221>-+++-=-+==z z z zz z z z F z H z Y求逆z 变换,得)1()1(])1(1[)1()1()1()1()(1-----=-+--+--=-n n n n n k y nn δεεεδ(2)1)()()(22-=↔=z z z F k k f ε1],)1(1)1(11[21)1)(1(11)1(1)()()(2222222>-+-++=-++=-⋅-+==z z z z z z z z z zz z z z F z H z Y求逆z 变换,得)1(]21)1(21[)]1()1()()1()1[(21)(1----=--++--=-k k k k k k k k y kk εεεε2、已知系统的频率特性模的平方为254)(222++=ωωωH ,且该系统在3=s 有一零点,求)(s H 。
解:设由2)(ωH 求得的系统函数为)('s H 。
令js =ω代入2)(ωH ,有2222225425)(4)()(')(')('s s js js s H s H s H --=++=-= 因此2)('s H 的零点为2±,极点为5±,取全部左半平面的零、极点,有52)('++=s s s H因要求)(s H 的s=3有一零点,为了使)(s H 得幅频特性与)('s H 的幅频特性相同,两者可以差一全通函数,故所求)(s H 为1586)3)(5()3)(2()(22=+--=++-+=s s s s s s s s s H3、连续系统b a 和,其系统函数)(s H 的零点、极点分布如下图所示,且已知当1)(=∞∞→H s 时,。
C语言第7章 函数
函数的 参数?
int main() {
int a=12, b=24; … printf("%d\n", Average(a, b)); … return 0; }
int Average(int x, int y) {
int result;
result = (x + y) / 2;
return result; }
C语言程序设计
22/114
7.3.1 函数调用
每次执行函数调用时
现场保护并为函数的内部变量(包括形参)分配内存 把实参值复制给形参,单向传值(实参形参) 实参与形参数目一致,类型匹配(否则类型自动转换)
int main()
{
①
int a=12, b=24,ave;
…
ave = Average(a, b);
21
1*2
3 (1*2)
(1*2)*3
}
4 (1*2*3)
(1*2*3)*4
return result;
……
…
}
n (1*2*3*4*…)
(1*2*3*4*…)*n
C语言程序设计
监视窗(Watches)
26/114
7.3.2函数原型
第7章 函数
函数原型(Function Prototype)
调用函数前先声明返回值类型、函数名和形参类型
Function Call?
int main() {
int a=12, b=24, ave; … ave = Average(a, b); … return 0; }
int Average(int x, int y) {
int result;
(完整版)答案第七章函数..
(完整版)答案第七章函数..第七章函数一、选择题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 。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
离散数学
西北工业大学
自 动 化 学 院 信 息 安 全 系
2014年5月4日星期日
1
西北工业大学信息安全本科专业课程 离散数学
第三篇 二元关系
第7章 函数
2014/5/4
2
西北工业大学信息安全本科专业课程 离散数学
2014/5/4
16
西北工业大学信息安全本科专业课程 离散数学
结论
设A,B为有限集合,f是从A到B的函数,则: f是单射的必要条件为|A|≤|B|; f是满射的必要条件为|B|≤|A|; f是双射的必要条件为|A|=|B|。
A B
2014/5/4
17
西北工业大学信息安全本科专业课程 离散数学
2014/5/4
14
西北工业大学信息安全本科专业课程 离散数学
将定义7.2.2的描述数学化为
(1)f:A→B是单射当且仅当对x1,x2∈A,若x1≠x2, 则f(x1)≠f(x2); (2)f:A→B是满射当且仅当对y∈B,一定存在 x∈A,使得f(x)=y; (3)f:A→B是双射当且仅当f既是单射,又是满射; (4)f:A→B是变换当且仅当f是双射且A=B。
2014/5/4
7
西北工业大学信息安全本科专业课程 离散数学
例7.2.1
设A={1,2,3,4},B={a,b,c,d},试判断下列关系哪 些是函数。如果是函数,请写出它的值域。 (1)f1={<1,a>,<2,a>,<3,d>,<4,c>}; (2)f2={<1,a>,<2,a>,<2,d>,<4,c>}; (3)f3={<1,a>,<2,b>,<3,d>,<4,c>}; (4)f4={<2,b>,<3,d>,<4,c>}。
从A到B的不同的函数仅有2 =4个。分别如下: f3={<a,2>,<b,1>},f4={<a,2>,<b,2>}。
2014/5/4
R13={<a,1>,<b,1>,<b,2>},R14={<a,2>,<b,1>,<b,2>}, f1={<a,1>,<b,1>},f2={<a,1>,<b,2>}, R15={<a,1>,<a,2>,<b,1>,<b,2>}。
2014/5/4
11
西北工业大学信息安全本科专业课程 离散数学
例7.2.3 解(续)
分别如下:
R0=Φ;R1={<a,1>},R2={<a,2>},R3={<b,1>}, R4={<b,2>},R5={<a,1>,<b,1>},R6={<a,1>,<b,2>}, R7={<a,2>,<b,1>},R8={<a,2>,<b,2>}, R9={<a,1>,<a,2>},R10={<b,1>,<b,2>}, R11={<a,1>,<a,2>,<b,1>},R ={<a,1>,<a,2>,<b,2>}, 212
2014/5/4
22
小结
西北工业大学信息安全本科专业课程 离散数学
例7.2.7
典型(自然)映射。设R是集合A上的一个等价关系, g:A→A/R称为A对商集A/R的典型(自然)映射, 其定义为g(a)=[a]R,a∈A. 证明:典型映射是一个满射。 分析:由等价类的定义,对任意 [a]R∈A/R,a∈[a]R,即任意A/R中的元素都有原象, 所以典型映射是满射。
12
西北工业大学信息安全本科专种特殊的关系,它与一般关系比较具备 如下差别: 1) 从A到B的不同的关系有2|A||B|个;但从A到B的 不同的函数却仅有|B||A|个。 (个数差别) 2) 关系的第一个元素可以相同;函数的第一元素 一定是互不相同的。 (集合元素的第一个元素存在差别) 3) 每一个函数的基数都为|A|个(|f|=|A|),但关 系的基数却为从零一直到|A|×|B|。 (集合基数的差别) 2014/5/4
2014/5/4
5
西北工业大学信息安全本科专业课程 离散数学
7.2.1函数的定义
定义7.2.1 设f是集合A到B的关系,如果对每个 x∈A,都存在惟一的y∈B,使得<x,y>∈f,则称关 系f为A到B的函数(Function)(或映射(Mapping)、 变换(Transform)),记为f:A→B。 A B A为函数f的定义域,记为domf=A; x f(A)为函数f的值域,记为ranf。 函数定义的示意图见图7.2.1。
2014/5/4
1 f A (u i ) 0
ui A ui A
24
西北工业大学信息安全本科专业课程 离散数学
定义7.2.3(续)
(4)对有理数x,f(x)为大于等于x的最小的整数, 则称f(x)为上取整函数(强取整函数),记为 f(x)= x ; (5)对有理数x,f(x)为小于等于x的最大的整数, 则称f(x)为下取整函数(弱取整函数),记为 f(x)= x ; (6)如果f(x)是集合A到集合B={0,1}上的函数, 则称f(x)为布尔函数。
图7.2.1 f(x)
2014/5/4
6
西北工业大学信息安全本科专业课程 离散数学
结论
(1)<x,y>∈fy=f(x); (2)<x,y>∈f∧<x,z>∈fy=z; (3)|f|=|A|; (4)f(x)表示一个变值,f代表一个集合,因 此f≠f(x)。 如果关系f具备下列两种情况之一,那么f就不 是函数: (1)存在元素a∈A,在B中没有象; (2)存在元素a∈A,有两个及两个以上的象。
定理7.2.1
设A,B是有限集合,且|A|=|B|,f是A到B的函数, 则f是单射当且仅当f是满射。 证明必要性(): 设f是单射。因为,f是单射,故|A|=|f(A)|。又因 为|f(A)|=|B|,且f(A)B,得f(A)=B,故f是A到B 的满射。
2014/5/4
18
西北工业大学信息安全本科专业课程 离散数学
例7.2.2 解
显然,fp是一个函数。因为,任意一个特殊的输入 对应唯一的输出。 可用任意一个可能的输入集合A对应输出集合B而推 广到一般情形的程序。所以,通常把函数看做输入 -输出的关系。
2014/5/4
10
西北工业大学信息安全本科专业课程 离散数学
例7.2.3
设A={a,b},B={1,2},请分别写出A到B的不同关系 和不同函数。 解 因为|A|=2,|B|=2,所以|A×B|=|A|×|B|=4, 即A×B={<a,1>,<a,2>,<b,1>,<b,2>},此时从A到 B的不同的关系有24=16个。
2014/5/4
15
西北工业大学信息安全本科专业课程 离散数学
例7.2.4
确定下列函数的类型。 (1)设A={1,2,3,4,5},B={a,b,c,d}。f:A→B定 义为:{<1,a>,<2,c>,<3,b>,<4,a>,<5,d>}; (2)设A={1,2,3},B={a,b,c,d}。f:A→B定义为: f={<1,a>,<2,c>,<3,b>}; (3)设A={1,2,3},B={1,2,3}。f:A→B定义为 f={<1,2>,<2,3>,<3,1>};
2014/5/4
21
西北工业大学信息安全本科专业课程 离散数学
1、函数(f:A→B)的定义 (1)f是集合A到B的关系, (2)对每个x∈A,都存在惟一的y∈B,使得<x,y>∈f。 2、函数与关系的区别与联系 3、函数(f:A→B)的类型 (1)f是单射对x1,x2∈A,若x1≠x2,则f(x1)≠f(x2) (2)f是满射对y∈B,一定存在x∈B,使得f(x)=y; (3)f是双射f既是单射,又是满射; (4)f是变换 f是双射且A=B。
7.0 内容提要
1 2 3 4 5
2014/5/4
函数的概念 集合的概念 集合的表示方法 特殊函数 函数的复合运算 函数的逆运算
无限集合 函数的运算定理
3
西北工业大学信息安全本科专业课程 离散数学
7.1 本章学习要求
重点掌握 1 1 函数的概念 2 单射、满射 和双射函数的 概念 3 函数的复合 运算和逆运算
2014/5/4
8
西北工业大学信息安全本科专业课程 离散数学
例7.2.2
设P是接受一个整数作为输入并产生一个整数作为输 出的计算机程序。令A=B=Z,则由P确定的关系fp定 义如下: 如果<m,n>∈fp当且仅当输入m时,由程序P所产生的 输出是n。 请判断fp是否为一函数。
2014/5/4
9
西北工业大学信息安全本科专业课程 离散数学
13
西北工业大学信息安全本科专业课程 离散数学
7.2.2函数的类型
定义7.2.2 设f是从A到B的函数, 对任意x1,x2∈A,如果x1≠x2,有f(x1)≠f(x2), 则称f为从A到B的单射(不同的x对应不同的y); 如果ranf=B,则称f为从A到B的满射; 若f是满射且是单射,则称f为从A到B的双射。 若A=B,则称f为A上的函数;当A上的函数f是双 射时,称f为一个变换。