第五章_函数及存储变量
第五章函数及存储变量
一、单项选择题
【5.1】对函数形参的说明有错误的是____。
A) int a(float x[],int n) B) int a(float *x,int n)
C) int a(float x[10],int n) D) int a(float x,int n)
【5.2】如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。
A) 静态变量 B) 动态变量 C) 外部变量 D) 内部变量
【5.3】在一个C源程序文件中,?若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。
A) extern B) register C) auto D) static
【5.4】在C语言中,函数的数据类型是指____。
A) 函数返回值的数据类型 B) 函数形参的数据类型
C) 调用该函数时的实参的数据类型 D) 任意指定的数据类型
【5.5】已知如下定义的函数:
fun1(a)
{ printf("\n%d",a);
}
则该函数的数据类型是____。
A) 与参数a的类型相同 B) void型
C) 没有返回值 D) 无法确定
【5.6】定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是____。
A) swapa(int x,int y) B) swapb(int *x,int *y)
{ int temp; { int temp;
temp=x;x=y;y=temp; temp=x;x=y;y=temp;
} }
C) swapc(int *x,int *y) D) swapd(int *x,int *y)
{ int temp; { int *temp;
temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp;
} }
【5,7】求一个角的正弦函数值的平方。能够实现此功能的函数是____。
A) sqofsina(x)
float x;
{ return(sin(x)*sin(x));
}
B) double sqofsinb(x)
float x;
{ return(sin((double)x)*sin((double)x));
}
C) double sqofsinc(x)
{ return(((sin(x)*sin(x));
}
D) sqofsind(x)
float x;
{ return(double(sin(x)*sin(x)));
}
【5.8】一个函数内有数据类型说明语句如下:
double x,y,z(10);
关于此语句的解释,下面说法正确的是____。
A) z是一个数组,它有10个元素。
B) z是一个函数,小括号内的10是它的实参的值。
C) z是一个变量,小括号内的10是它的初值。
D) 语句中有错误。
【5.9】已知函数定义如下:
float fun1(int x,int y)
{ float z;
z=(float)x/y;
return(z);
}
主调函数中有int a=1,b=0;可以正确调用此函数的语句是____。
A) printf("%f",fun1(a,b)); B) printf("%f",fun1(&a,&b));
C) printf("%f",fun1(*a,*b)); D) 调用时发生错误
【5.10】在下列结论中,只有一个是错误的,它是。
A) C语言允许函数的递归调用
B) C语言中的continue语句,可以通过改变程序的结构而省略
C) 有些递归程序是不能用非递归算法实现的
D) C语言中不允许在函数中再定义函数
【5.11】已知:int a, *y=&a;则下列函数调用中错误的是。A) scanf("%d", &a); B) scanf("%d", y);
C) printf("%d", a); D) printf("%d", y);
【5.12】说明语句"int (*p)( );"的含义是。
A) p是一个指向一维数组的指针变量
B) p是指针变量,指向一个整型数据
C) p是一个指向函数的指针,该函数的返回值是一个整型
D) 以上都不对
二、阅读程序题
【5.13】下面程序的输出结果是____。
#include
func(int a,int b)
{ int c;
c=a+b;
return(c);
}
main()
{ int x=6,y=7,z=8,r;
r=func((x--,y++,x+y),z--);
printf("%d\n",r);
}
A) 11 B) 20 C) 21 D) 31
【5.14】下面程序的输出结果是____。
#include
int k=1;
main( )
{ int i=4;
fun(i);
printf ("\n%d,%d",i,k);/* ① */
}
fun(int m)
{ m+=k;k+=m;
{ char k='B';
printf("\n%d",k-'A');/* ② */
}
printf("\n%d,%d",m,k);/* ③ */
}
① A) 4,1 B) 5,6 C) 4,6 D) A,B,C参考答案都不对
② A) 1 B) -59 C) -64 D) A,B,C参考答案都不对
③ A) 5,66 B) 1,66 C) 5,6 D) A,B,C参考答案都不对
【5.15】下面程序的输出结果是____。
int w=3;
main()
{ int w=10;
printf("%d\n",fun(5)*w);
}
fun(int k)
{ if(k==0) return(w);
return(fun(k-1)*k);
}
A) 360 B) 3600 C) 1080 D) 1200
【5.16】下面程序的输出结果是____。
#include
funa(int a)
{ int b=0;
static int c=3;
a=c++,b++;
return(a);
}
main()
{ int a=2,i,k;
for(i=0;i<2;i++)
k=funa(a++);
printf("%d\n",k);
}
A) 3 B) 0 C) 5 D) 4
【5.17】下面程序的输出结果是____。
#include
void num()
{ extern int x,y;
int a=15,b=10;
x=a-b;
y=a+b;
}
int x,y;
main()
{ int a=7,b=5;
x=a-b;
y=a+b;
num();
printf("%d,%d\n",x,y);
}
A) 12,2 B) 5,25 C) 1,12 D) 输出不确定
【5.18】下面程序的输出结果是____。
main()
{ int a=2,i;
for(i=0;i<3;i++)
printf("%4d",f(a));
}
f(int a)
{ int b=0;
static int c=3;
b++;
c++;
return(a+b+c);
}
A) 7 7 7 B) 7 10 13 C) 7 9 11 D) 7 8 9
【5.19】下面程序的输出结果是____。
#include
try( )
{ static int x=3;
x++;
return(x);
}
main( )
{ int i, x;
for(i=0; i<=2; i++ )
x=try( );
printf("%d\n", x);
}
A) 3 B) 4 C) 5 D) 6
【5.20】下面程序的输出结果是____。
#include
main( )
{ int x=1;
void f1( ), f2( );
f1( );
f2(x);
printf("%d\n", x);
}
void f1(void)
{ int x=3;
printf("%d ", x);
}
void f2( x )
int x;
{ printf("%d ", ++x);
}
A) 1 1 1 B) 2 2 2 C) 3 3 3 D) 3 2 1
三、程序填空题
【5.21】下面程序的功能是将形参x的值转换为二进制数,所得的二进制数放在一个一维数组中返回,二进制数的最低位放在下标为0的元素中。
fun(int x,int b[])
{ int k=0,r;
do
{ r=x% ① ;
b[k++]=r;
x/= ② ;
}while(x);
}
【5.22】下面程序的功能是用辗转相除法求两个正整数m和n的最大公约数。
hcf(int m,int n)
{ int r;
if(m { r=m; ① ; n=r; } r=m%n; while( ② ) { m=n; n=r; r=m%n; } ③ ; } 【5.23】下面程序的功能是计算S= k! 。 k=0 long fun(int n) { int i; long s; for(i=1;i ① ;i++) s*=i; return( ② ); } main() { int k,n; long s; scanf("%d",&n); s= ③ ; for(k=0;k<=n;k++) s+= ④ ; printf("%ld\n",s); } 【5.24】下面程序的功能是由键盘输入n,求满足下述条件的x、y: nx和ny的末3位数字相同,且x≠y,x、y、n均为自然数,并使x+y为最小。 #include pow3(int n,int x) { int i, last; for(last=1,i=1;i<=x;i++ ) last= ① ; return(last); } main() { int x,n,min,flag=1; scanf("%d", &n); for(min=2;flag;min++) for(x=1;x if( ② && pow3(n,x)==pow3(n,min-x)) { printf("x=%d,y=%d\n", x, min-x ); ③ ; } } 【5.25】下面的程序是用递归算法求a的平方根。求平方根的迭代公式如下: #include double mysqrt( double a, double x0 ) { double x1, y; x1 = ① ; if( fabs(x1-x0)>0.00001 ) y = mysqrt( ② ); else y = x1; return( y ); } main() { double x; printf("Enter x: "); scanf("%lf", &x); printf("The sqrt of %lf=%lf\n", x, mysqrt( x, 1.0) ); } 【5.26】以下程序是计算学生的年龄。已知第一位最小的学生年龄为10岁,其余学生的年龄一个比一个大2岁,求第5个学生的年龄。 #include age( int n ) { int c; if( n==1 ) c=10; else c= ① ; return(c); } main() { int n=5; printf("age:%d\n", ② ); } 【5.27】下面的函数sum(int n)完成计算1~n的累加和。 sum(int n) { if(n<=0) printf("data error\n"); if(n==1) ① ; else ② ; } 【5.28】下面的函数是一个求阶乘的递归调用函数。 facto(int n) { if( n == 1 ) ① ; else return( ② ); } 【5.29】组合问题,由组合的基本性质可知: (1) C(m,n)=C(n-m,n) (2) C(m,n+1)=C(m,n)+C(m-1,n) 公式(2)是一个递归公式,一直到满足C(1,n)=n为止。当n<2*m时,可先用公式(1) 进行简化,填写程序中的空白,使程序可以正确运行。 #include"stdio.h" main() { int m,n; printf("Input m,n="); scanf("%d%d", &m, &n); printf("The combination numbeers is %d\n", combin(m,n)); } combin( int m, int n) { int com; if( n<2*m ) m=n-m; if( m==0 ) com=1; else if(m==1) ① ; else ② ; return(com); } 【5.30】输入n值,输出高度为n的等边三角形。例如当n=4时的图形如 下: * *** ***** ******* #include void prt( char c, int n ) { if( n>0 ) { printf( "%c", c ); ① ; } } main() { int i, n; scanf("%d", &n); for( i=1; i<=n; i++ ) { ② ; ③ ; printf("\n"); } } 【5.31】下面的函数实现N层嵌套平方根的计算。 double y(double x, int n) { if( n==0 ) return(0); else return ( sqrt(x+( ① )) ); } 【答案:】 【5.1】答案:C 注释:此处函数形参是一个指针变量,接受实参的地址,而不是一个数组。 【5.2】答案:A 【5.3】答案:D 注释:这里首先要明确一些基本概念。在C语言中,程序与文件是不同的概念,一个程序可以由一个文件组成,也可以由多个文件组成;一个文件中又可以包含多个函数;函数是构成C程序的基本单位。 变量的作用域因变量的存储类型不同而不同。auto和register类型的变量的作用域是说明变量的当前函数;外部变量的作用域是整个程序,即外部变量的作用域可以跨越多个文件;内部静态变量(定义在一个函数内部的static型的变量)的作用域是当前函数,外部静态变量(定义在函数外面的static型的变量)的作用域是当前文件,即可以跨越同一文件中的不同 函数。 【5.4】答案:A 【5.5】答案:A 注释:它和参数a一样,数据类型说明被省略,按照C语言的规定,在这种情况下,表示它们是int型。 【5.6】答案:C 注释:函数swapa是值传递,函数的执行结果不能返回;函数swapb中变量temp不是指针变量,所以它不能接受地址量,用指针变量x为它赋值是不对的;函数swap中虽然指针变量交换了地址,即它们的指向的目标变量进行了交换,但是目标变量并没有行值的交换。【5.7】答案:B 【5.8】答案:D 【5.9】答案:D 注释:主调函数中b=0,在执行fun1函数里的除法时发生溢出错误。 【5.10】答案:C 【5.11】答案:D 注释:在答案D中,正确的函数调用应当是:printf("%d", *y)。 【5.12】答案:C 注释:要注意与说明语句"int (*p)[ ];"的区别。说明语句"int (*p)[ ];"说明的是一个指向数组的指针。 【5.13】参考答案: C 注释:main函数调用func函数时,第一个实参使用的是逗号表达式的值,也就是x+y的结果。由于对变量x、y、z进行的是后缀运算,所以函数func的参数值是13和8。 【5.14】参考答案: ① C ② A ③ C 【5.15】参考答案: B 注释:函数fun进行了递归调用,实际进行的运算是5×4×3×2×1×3×10。主函数内说明的局部变量w屏蔽了外部变量w,所以在主函数中外部变量w是不可见的,在调用printf函数时表达式"fun(5)*w"中w的值是10。 【5.16】参考答案: D 注释:main函数三次调用了函数funa,在funa函数中的静态变量c仅在第一次调用时进行了初始化,再次调用时不再对静态变量赋初值。 【5.17】参考答案: B 注释:main函数和num函数中都说明了变量a和b,由于它们是内部变量,所以它们分别在说明它们的函数内有效。外部变量x和y在函数num之后被说明,而在num函数中又要引用它们,所以在num函数中用关键字"extern"说明变量x和y是一个外部变量,也就是通知计算机这两个变量在fun函数以外被说明,此处不是定义两个int型变量。 【5.18】参考答案: D 注释:函数f中的变量c是静态变量,仅在第一次调用函数f时它被初始化为3,第二次调用函数f时c的值是4,第三次调用函数f时c的值是5。 【5.19】参考答案: D 【5.20】参考答案: D 注释:程序中有三个"x"分别在三个不同的函数中,这三个"x"都是自动变量,所以三个"x"分别局部于三不同的函数,在三个函数中对"x"的操作互不影响。 【5.21】答案: ① 2 ② 2 【5.22】答案:① m=n ② r!=0 ③ return(n) 【5.23】答案:① <=n ② s ③ 0 ④ fun(k) 【5.24】答案:① last*n%1000 ② x!=min-x ③ flag=0 【5.25】答案:① (x0+a/x0)/2 ② a,x1 注释:根据迭代公式,①处应当是计算迭代值x1=(x0+a/x0)/2。按照求平方根的要求,当迭代的精度不能满足"(fabs(x1-x0)>0.00001)"时,则要继续迭代,因此②处应当填写"a,x1"。程序中调用了求绝对值的库函数fabs( )。 【5.26】答案:① 2+age(n-1) ② age(5) 注释:由于程序是递归算法,因此首先要建立问题的递归数学模型。根据原题的描述可以写出如下递归公式: age(n) = 10 (n=1) age(n) = 2+age(n-1) (n>1) 对照程序和递归公式可以看出:n的含义是第n位学生。很显然,要求第5位学生的年龄,②处应当是调用函数age,实参的值应当是5。在①处应该是函数的递归调用,根据递归公式,应当填写:2+age(n-1)。 【5.27】答案:① return(1) ② return (sum(n-1)+n) 注释:按照常规的编程方法,此问题可采用一个循环语句实现。阅读程序,没有发现循环语句,这时,应当认为原来的编程者使用的是非常规的算法。对于这样常规算法需要用循环实现而没有使用循环的程序,就可以肯定地认为,一定是使用了递归算法。 将问题"求1~n的累加和"的公式写成递归定义,可以是如下形式; sum(n)=1 当n=1时 sum(n)=sun(n-1)+n 当n>1时 根据此递归定义,可以很容易完成程序。 【5.28】答案:① return(1) ② n*facto(n-1) 注释:我们熟悉的求n!的算法一般是采用循环语句实现,但在此程序中根本没有循环语句。这时我们应该想到:是采用递归算法实现的。首先写出求n!的递归公式; n!=1 当n=1时 n!=n*(n-1) 当n>1时 根据此递归定义,可以很容易完成程序。 【5.29】答案:① com=n ② com=combin(n-1,m-1) + combin(n-1,m) 注释:题目的说明中已经给出组合问题的递归定义,不需要读者自己寻找递归表达式。程序中的语句"if (n<2*m) m=n-m;"完成了题目中叙述的"用公式(1)进行简化"的工作。 【5.30】答案:① prt(c, n-1) ② prt(' ' , n-i) ③ prt('*', i) 注释:函数prt的功能是输出n个字符c。 【5.31】答案:① y(x, n-1) 注释:这显然是一个递归问题,首先要对原来的数学函数定义形式进行变形,推导出原来函数的等价递归定义。可以推导出原来函数的递归定义如下。 y(x,n)=x 当n=0时 y(x,n)=sqrt(x+y(x,n-1)) 当n>0时 第 五章 1. 下面表是一张关于短期生产函数),(K L f Q 的产量表: (1) 在表1中填空 (2) 根据(1).在一张坐标图上作出TP L 曲线,在另一张坐标图上作出AP L 曲线和MP L 曲线. (3) 根据(1),并假定劳动的价格ω=200,完成下面的相应的短期成本表2. (4) 根据表2,在一张坐标图上作出TVC 曲线,在另一张坐标图上作出AVC 曲线和MC 曲线. (5) 根据(2)和(4),说明短期生产曲线和短期成本曲线之间的关系. (3)短期生产的成本表(表2) (4) (5)边际产量和边际成本的关系,边际MC 和边际产量MP L 两者的变动方向是相反 的. 总产量和总成本之间也存在着对应 系:当总产量TP L 下凸时,总成本TC 曲线和总可变成本TVC 是下凹的;当总产量曲线存在一个拐点时, 总成本TC 曲线和总可变成本TVC 也各存在一个拐点. 平均可变成本和平均产量两者的变动方向是相反的. MC 曲线和AVC 曲线的交点与MP L 曲线和AP L 曲线的交点是对应的. 2.下图是一张某厂商的LAC 曲线和LMC 曲线图.请分别在Q1和Q2的产量上画出 代表最优生产规模的SAC 曲线和SMC 曲线. 解:在产量Q1和Q2上,代表最优生产规模的SAC 曲线和SMC 曲线是SAC 1和SAC 2以及SMC 1和SMC 2. SAC 1和SAC 2分别相切于LAC 的A 和B SMC 1和SMC 2则分别相交于LMC 的A 1和B 1. 3.假定某企业的短期成本函数是TC(Q)=Q 3-5Q 2+15Q+66: (1) 指出该短期成本函数中的可变成本部分和不变成本部分; (2) 写出下列相应的函数:TVC(Q) AC(Q) (3) AVC(Q) AFC(Q)和MC(Q). 解(1)可变成本部分: Q 3-5Q 2+15Q 不可变成本部分:66 (2)TVC(Q)= Q 3-5Q 2+15Q AC(Q)=Q 2-5Q+15+66/Q AVC(Q)= Q 2-5Q+15 AFC(Q)=66/Q O MC Q LMC SMC 1 SAC 1 SAC 2 SMC 2 LAC A 1 B 1 Q 1 Q 2 长期边际成本曲线与短期成本曲线 A 数据结构作业系统_第五章答案 5.21④假设稀疏矩阵A和B均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型TSMatrix的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) { if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].i 随机变量及其分布函数 将随机事件以数量来标识,即用随机变量描述随机现象的研究方法,它是定义在样本空间上具有某种可预测性的实值函数。 分布函数则完整的表述了随机变量。 一、 随机变量与分布函数 (1) 随机变量: 取值依赖于某个随机试验的结果(样本空间),并随着试验结果不同而变化的变量,称之为随机变量。 分布函数: [1] 定义: 设X 是一个随机变量,对任意实数x ,记作 (){}F x P X x ≤=,称()F x 为随机变量X 的分 布函数,又称随机变量X 服从分布()F x ,显然,函数 ()F x 的定义域为(),-∞+∞,值域为[0,1]。 [2] 性质: ?()F x 单调非降。 ?()0F -∞=、()1F +∞=。 ?()(0)F x F x =+,即()F x 一定是右连续的。 ?对于任意两个实数a b <, {}()()P a X b F b F a <≤=- ?对于任意实数0x , 00 0{}()()P X x F x F x ==-- ?000{}1{}1()P X x P X x F x >=-≤=- ?000{}{)lim }(x x P X x P X x x F →- =≤<=- ?000{}1{}1()P X x P X x F x ≥=-<=-- 二、 离散型随机变量与连续型随机变量 (1) 离散型随机变量 [1] 概念:设X 是一个随机变量,如果X 的取值是有限个或者 无穷可列个,则称X 为离散型随机变量。其相应的概率()i i P X x p ==(12)i =、……称为X 的概率分布或分布律,表格表示形式如下: [2] 性质: ?0i p ≥ ? 1 1n i i p ==∑ ?分布函数()i i x x F x p ==∑ ?1{}()()i i i P X x F x F x -==- (2) 连续型随机变量 [1] 概念:如果对于随机变量的分布函数()F x ,存在非 负的函数 ()f x ,使得对于任意实数x ,均有: 设(X ,Y )的联合密度函数为f (x ,y ),现求Z=X+Y 的概率密度。 令{(,)|}z D x y x y z =+≤,则Z 的分布函数为: (){} {}(,)((,))Z D z z y F z P Z z P X Y z f x y dxdy f x y dx dy +∞--∞ -∞ =≤=+≤==??? ? (1.1) 固定z 和y 对积分 (,)z y f x y dx --∞ ?作换元,令x y u +=,得 (,)(,)z y z f x y dx f u y y du --∞ -∞ =-?? (1.2) 于是 ()(,)[(,)]z z Z F z f u y y dudy f u y y dy du +∞+∞ -∞-∞ -∞ -∞ =-=-???? (1.3) 由概率论定义,即得Z 的概率密度为 ()(,)Z f z f z y y dy +∞-∞ =-? (1.4) 由X 与Y 的对称性,又可得 ()(,)Z f z f x z x dx +∞-∞ =-? , (1.5) 特别的,当X 与Y 相互独立时,有 ()()()()()Z X Y X Y F z f z y f y dx f x f z x dx +∞ +∞ -∞ -∞ =-=-? ? (1.6) 其中,()X f x 、()Y f y 分别是X 和Y 的密度函数。 式(1.6)又称为()X f x 和()Y f y 的卷积,常记为*()X Y f f z 。因此式(1.6)又称为独立和分布的卷积公式。 设(X ,Y )的联合密度函数为f (x ,y ),又X Z Y =,现求X Z Y =的概率密度,Z 的分布函数为 1 2 (){} (,)(,)Z D D F z P Z z f x y dxdy f x y dxdy =≤=+???? (2.1) 而 1 (,)(,)yz D f x y dxdy f x y dxdy +∞ -∞=?? ? ? (2.2) 对于固定的z ,y ,积分 (,)yz f x y dx -∞ ?作换元x u y = (这里y>0),得 (,)(,)yz z f x y dx yf yu y du -∞ -∞ =?? (2.3) 于是 01 (,)(,)(,)z D z f x y dxdy yf yu y dudy yf yu y dydu +∞-∞+∞ -∞==????? ? (2.4) 类似的可得 2 (,)(,)(,)yz D z f x y dxdy f x y dxdy yf yu y dydu +∞ -∞-∞-∞ ==-??? ? ? ? (2.5) 故有 12 0()(,)(,)[(,)(,)][(,)]Z D D z z F z f x y dxdy f x y dxdy yf yu y dy yf yu y dy du y f yu y dy du +∞-∞ -∞ +∞-∞-∞ =+=-=?????? ? ?? (2.6) 有概率密度定义可得X Z Y = 的概率密度为 ()(,)Z f z y f yz y dy +∞ -∞ =? (2.7) 特别的,当X 与Y 相互独立时,有 ()()()Z X Y f z y f yz f y dy +∞-∞ =? (2.8) 第五章函数 一. 单项选择题 1.假设a,b,c,e,f,g都已正确定义,则函数调用语句“f(a+b,c,(e,f,g));”中参数的个数是(B ) A.2 B.3 C.5 D.6 2.以下对C 语言函数的有关描述中,正确的是(A ) A.在C 语言中,调用函数时,只能把实参的值传递给形参,形参的值不能传递给实参 B.C 函数既可以嵌套定义,又可以递归调用 C.函数必须有返回值,否则不能定义成函数 D.C 程序中,有调用关系的所有函数必须放在同一个源程序文件中 3.以下程序的输出结果是: #include float av(int a[],int n) { int i; float s; for(i=0,s=0;i 8.随机变量的函数的分布 【教学容】:高等教育大学盛骤,式千,承毅编的《概率论与数理统计》 第二章第五节的随机变量的函数的分布 【教材分析】:本节课主要是在学生学习了随机变量的概念和随机变量的分布的基础上进行的教学;本节从随机变量的分布入手引入随机变量的函数的随机性特征, 即由自变量X 的统计规律性出发研究因变量Y 的统计性规律的问题;本节课的教学先讲授离散型随机变量的函数的分布接着讲连续型随机变量的函数的分布。让学生掌握两种不同的随机变量的分布的求解方法。其中,离散型随机变量的函数的分布是比较容易求得而连续型随机变量的函数的分布学生往往束手无策,因此,我在本次教学中,先复习分布函数和概率密度函数的关系,后通过简单例子来讲解,最后归纳总结 ,再研究连续型随机变量的函数的一种特殊情形的分布问题。最后导出一个重要的定理。 【学情分析】: 1、知识经验分析 学生具有一定的随机变量及其分布相关理论知识及微分学相关知识,通过前两次课的学习已具备一定的解题方法,本节课通过让学生观察、思考,教师启发、引导等教学方式,让学生自然过渡到随机变量的函数的分布的学习中。 2、学习能力分析 学生虽然具备一定的微积分的知识和随机变量的理论基础,但概念理解不透彻,解决问题的能力不高,方法应用不熟练,知识没有融会贯通。 【教学目标】:掌握随机变量的函数的概率分布的求法。 【教学重点、难点】: 重点:离散型随机变量的函数的分布;连续型随机变量的函数的分布。 难点:连续型随机变量的函数的分布。 【教学方法】:讲授法 启发式教学法 【教学课时】:1个课时 【教学过程】: 一、问题引入 在实际中,人们常常对随机变量 X 的函数()Y g X =所表示的随机变量Y 更感兴趣。 第二章:随机变量与分布函数习题 一、“离散型随机变量与分布函数”习题: 1. 射手对靶子进行射击,用X 表示击中的环数,已知击中一环的概率为0.2,击中两环的概率为0.8;求:(1)X 的分布列及分布函数;(2)()()10,1≤<≥X P X P . 2. 射手对靶子进行射击,一次射击的命中率为0.8,现在连续射击三枪,用X 表示三枪中命中的次数,求:(1)X 的分布列及分布函数;(2)A “至少命中两枪”的概率. 3. 设随机变量X 的分布函数为 ()()???? ???≥<≤<≤--<=≤=31 318.0114.010 x x x x x X P x F 求:X 的分布列. 4. 设随机变量X 的分布函数为 ()??? ? ????? >≤≤<=2120sin 00ππx x x A x x F 求:(1)A =? (2)??? ??<6πx P . 5. 设随机变量X 的分布列为??? ? ??--22121101q q ; 求: (1)q=? (2)X 的分布函数. 6. 某设备由三个独立工作的元件构成,该设备在一次试验中每个元件发生故障的概率为 0.1,求该设备在一次试验在中发生故障的元件数的分布列. 7. 将一颗骰子投掷两次,以X 表示两次所得点数之和、Y 表示两次中所得的小的点数;分别求X 与Y 的分布列. 8. 设随机变量X ~()p B ,2, 随机变量Y ~()p B ,3; 已知()9 5 1=≥X P , 求:()1≥Y P . 二、“连续型随机变量与分布函数”习题: 1. 设()()??? ??<>≥=-00 0,0212 x a x e a x x f a x ; ()?????<<=其他0 0cos 21 2 πx x x f ; ()????? <<-=其他0 22cos 3ππx x x f ; (1) 以上()()()x f x f x f 321,,是否是某随机变量X 的分布密度函数? 关于计算机程序,下列叙述正确的是()。 A.只有可执行程序(.exe)才能在计算机中运行。 B.计算机程序是用自然语言书写的关于问题求解的方法和步骤的描述。 C.计算机程序编程人员利用某种计算机程设计语言,根据用户业务需求来编写完成,从概念上讲,计算机程序有数据和代码两部分。 D.用高级程序设计语言书写的程序都可以直接在计算机中运行。 E.从本质上讲,计算机程序是在计算机中运行的指令序列。 正确答案:C、E 2单选(2分) 世界上第一个计算机高级程序设计语言是()。 A.Pascal B.ALGOL C.C D.FORTRAN E.Basic 正确答案: D 你选对了 3单选(2分) 与计算机硬件系统紧密相关的程序设计语言是()。 A.符号语言 B.脚本语言 C.汇编语言 D.机器语言 E.高级语言 正确答案: D 你选对了 4单选(2分) 关于计算机软件开发,下列叙述正确的是()。 A.软件开发就是编写程序。 B.软件开发中的生命周期和原型法不能混合使用。 C.软件开发包括几个典型的阶段,包括:需求分析,系统设计,系统实施,系统测试,运行和维护等。 D.软件开发完成后就可以一劳永逸的运行。 E.软件开发需遵循相应的方法,例如生命周期法和原型法等。 正确答案:C、E 你选对了 5单选(2分) 下面是一个将十进制正整数转换为2进制数的函数定义: void tobinary(int x) { while (x>0) { printf("%1d",x%2); } } 要实现函数的功能,则在空白处应该填写的程序语句是()。 A.x=x/2; C.x=x%2; D.x=x%10; 正确答案: A 你选对了 6单选(2分) 关于数据库管理系统(Data Base Management System,DBMS),下列说法正确的是()。 A.用户程序对数据文件直接操作和数据库管理系统对文件进行管理效果一样。 B.在数据库应用系统中,用户程序可以直接对数据库进行添加、查询、修改和删除操作。 C.用户通过DBMS创建数据库,创建完成后,程序对数据的操作与DBMS无关。 D.数据库管理系统是用户应用软件和数据库之间一种管理程序接口。 E.数据库管理系统是指负责数据库的建立、维护和管理的系统软件。 正确答案:D、E 7单选(2分) 计算机程序设计语言是用于编写计算机程序的语言,下列叙述正确的是()。 A.计算机程序设计语言是由一组基本符号和一组语法规则构成。 B.机器语言是用二进制代码表示的,不是计算机程序设计语言。 C.用计算机程序设计语言书写的程序都可以直接在计算机中运行。 D.计算机程序设计语言就是通常讲的C、Java等高级程序设计语言。 正确答案: A 你选对了 8单选(2分) 在SQL中,数据查询语句SELECT的必选子句是()。 A.FROM子句 B.WHERE子句 C.GROUP BY子句 https://www.360docs.net/doc/9c984376.html,PUTE子句 E.ORDER BY子句 正确答案: A 你选对了 9单选(2分) 从数据表student中查询张姓的所有学生,正确的SQL语句是()。 A.SELECT sno,sname FROM student WHERE sname LIKE N'张%' B. SELECT sname FROM student WHERE sname = N'%张%' C. SELECT sno,sname FROM student WHERE sname LIKE N'%张%' D. SELECT sname FROM student WHERE sname = N'张%' 5.21④假设稀疏矩阵A和B均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型TSMatrix的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) { if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].i §3.4 随机变量函数的分布 对离散型随机变量,我们讨论过随机变量函数的分布问题,对一般的随机变量当然也存在同样的问题。例如,若ξ是N (2 ,σμ)分布的随机变量,为了解决计算中的查表问题, 在中曾经引入变换 η=σ ξa - 这个新出现的随机变量η就是原来的随机变量ξ的一个函数。现在来讨论连续型随机变量函数的分布问题,先介绍一个便于应用的定理。 定理3.1 设ξ是一个连续型随机变量,其密度函数为p (x),又y =)(x f 严格单调,其反函数)(x h 有连续导数,则=η)(ξf 也是一个连续型随机变量,且其密度函数为 ? ? ?<<*=其他,0|],)(|)([)('β α?y y h y h p y (3.51) 其中 α=min{)(-∞f ,)(+∞f } β=min{)(-∞f ,)(+∞f } (证明 略) 例3.11(略) 例3.12(略) 2χ—分布 我们先给出下述一个式子: p (x,y)=? ? ???≤>Γ-0,00,)2(212x x x n y n 我们通常把以上述(3.53)式(其中n 是参数)为密度函数的分布称为是自由度为n 的 2χ—分布(2χ读作“卡方”),并记作)(2 n χ,它是数理统计中一个重要的分布。 (一)和的分布 设),(ηξ是一个二维连续型随机变量,密度函数为p (x,y),现在来求ηξζ+=的分布,按定义为 F ζ(y)= P (ζ F ζ(y)= ??<+y x x dx dx x x p 2121 2 1 ),( = dx dx x x p )),((221?? ∞∞ -∞ ∞ - (3.54) 如果ξ与η是独立的,由(3.48)知P ξ(x)·P η(y)是(ηξ,)的密度函数,用P ξ(x)·P η(y)代替(3.54)式中的p (x 1,x 2)便得 F ζ(y) = dx dx x p x p ))()((221?? ∞∞ -∞ ∞-ηξ =dx dz x z p x p y ))()((11? ?∞ ∞-∞--ηξ = dz dx x z p x p y ))()((11?? ∞ -∞∞ --ηξ 由此可得 ζ 的密度函数为 F ζ(y)= F ' ξ(y)= dx x y p x p ? ∞ ∞ --)()(ηξ (3.55) 由对称性还可得 F ζ(y)= dx x p x y p ? ∞ ∞ --)()(ηξ (3.56) 由(3.55)或(3.56)式给出的运算称为卷积,通常简单地记作 P ζ=P ξ* P η 例3.13(略) 我们已经知道某些分布具有可加性,其实还有一些其它分布,也具有可加性,其中2 χ—分布的可加性在数理统计中颇为重要,我们这里顺便证明这个结论。为此,可以讨论更一般形式的一个分布—Γ分布。如果随机变量ξ具有密度函数为 p (x,y)=?? ???≤>Γ--0,00 ,)(1x x e x x βαααβ (3.57) (其中α>0, β>0为两个常数),这时称ξ是参数为(α,β)的Γ分布的随机变量,相应的分布称作参数为(α,β)的Γ分布,并记作Γ(α,β). 例3.14(略) (二)商的分布 设),(ηξ是一个二维连续型随机变量,密度函数为p (x 1,x 2),现在来求η ξ ζ= 的分 数据结构作业系统_第五章 答案 -标准化文件发布号:(9456-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII 5.21④假设稀疏矩阵A和B均以三元组表作为存储结构。 试写出矩阵相加的算法,另设三元组表C存放结果矩阵。 要求实现以下函数: Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C); /* 三元组表示的稀疏矩阵加法: C=A+B */ 稀疏矩阵的三元组顺序表类型TSMatrix的定义: #define MAXSIZE 20 // 非零元个数的最大值 typedef struct { int i,j; // 行下标,列下标 ElemType e; // 非零元素值 }Triple; typedef struct { Triple data[MAXSIZE+1]; // 非零元三元组表,data[0]未用 int mu,nu,tu; // 矩阵的行数、列数和非零元个数 }TSMatrix; Status AddTSM(TSMatrix A,TSMatrix B,TSMatrix &C) /* 三元组表示的稀疏矩阵加法: C=A+B */ { int k=1,n=1,p=1; ElemType ce; if(A.mu!=B.mu||A.nu!=B.nu)return ERROR; while(k<=A.tu&&n<=B.tu) { if(A.data[k].i==B.data[n].i&&A.data[k].j==B.data[n].j) { ce=A.data[k].e+B.data[n].e; if(ce) { C.data[p].i=A.data[k].i; C.data[p].j=A.data[k].j; C.data[p].e=ce; p++; //printf("%d,,%d ",ce,C.data[p-1].e); } k++;n++; } else if(A.data[k].i 习题 一、选择题 1. 下列叙述错误的是____A_____。 A. 主函数中定义的变量在整个程序中都是有效的 B. 复合语句中定义的变量只在该复合语句中有效 C. 其它函数中定义的变量在主函数中不能使用 D. 形式参数是局部变量 2. 若函数的形参为一维数组,则下列说法中错误的是____B、才_____。 A. 形参数组可以不指定大小 B. 函数调用时对应的实参只能是数组名 C. 函数调用时,系统会为形参数组分配存储单元 D. 函数中对形参的修改将会影响对应的实参值 3. 若函数的类型和return语句中的表达式的类型不一致,则____D_____。 A. 编译时出错 B. 运行时出现不确定结果 C. 不会出错,且返回值的类型以return语句中表达式的类型为准 D. 不会出错,且返回值的类型以函数类型为准 4. 下面的函数定义正确的是_____D____。 A. float f(float x;float y) B. float f(float x,y) {return x*y;} {return x*y;} C. float f(x,y) D. float f( int x, int y) {int x,y ; return x*y;} {return x*y;} 5. 下面函数头的定义格式正确的是____C_____。 A. void sort(int a[n],int n) B. void sort(int a[ ][ ],int n) C. void sort(int a[ ],int n) D. void sort(int a[ ],n) 6. 下面4个程序中输出结果是125的有____C_D____。 (1). #include "iostream.h" void cube(int x) { x=x*x*x; } void main() { int x=5;cube(x); cout< 连续型随机变量的分布 (一)连续型随机变量及其概率密度函数 1.定义:对于随机变量X 的分布函数 F(X) ,若存在非负函数f(x), 使对于 任意的实数 x,有F ( x)x f(x) 称为 X f (t)dt ,则称X为连续性随机变量, 的概率密度函数,简称概率密度。 注: F(x)表示曲线下x 左边的面积,曲线下的整个面积为1。 2 .密度函数f(x) 的性质:注: f( x)不是概率。 1) f( x)≥ 0 + f ( x) dx = 1 2) ò-x 2 3)P{x 1 < X ? x 2 }òx1 f (x) dx = F (x 2 ) - F (x 1 ) 特别地,连续型随机变量在某一点的概率为零,即 P{ X = x} = 0. (但 { X=x} 并不一定是不可能事件) 因此P(a≤X ≤ b)= P(a< X 单选(2分) 一个C程序是由可以由()。 A.一个main函数和若干个其他函数组成 B.一个主程序和若干个子程序组成 C.若干过程组成 D.若干子程序组成 正确答案:A 单选(2分) 在C语言中,有函数leapyear定义如下:int leapyear(int y) { int z=0; if(y%4==0&&y%100!=0||y% 400==0) z=1; return z } 有int型变量d,则执行函数调用语句d=leapyear(2010),则变量d的取值是()。 A.4 B.1 C.0 D.400 正确答案:B 单选(2分) 设x为int型变量,a为一个符号常量,则下列属于赋值语句的是()。 A.a=a*10+a%10; B.x+a=100; C.x=(x=1,2*3) D.x=(a=1,2*3); 正确答案:D 单选(2分) 世界上第一个计算机高级程序设计语言是()。 A.Pascal B.ALGOL C.C D.FORTRAN E.Basic 正确答案:D 单选(2分) 与计算机硬件系统紧密相关的程序设计语 言是()。 A.符号语言 B.脚本语言 C.汇编语言 D.机器语言 E.高级语言 正确答案:D 单选(2分) 下面是一个将十进制正整数转换为2进制数的函数定义: void tobinary(int x) { while(x>0){ printf("%1d",x%2); } } 要实现函数的功能,则在空白处应该填写的程序语句是()。 A.x=x/2; B.x=x/10; C.x=x%2; D.x=x%10; 正确答案:A你选对了 两个随机变量的和与商的分布函数与密度函数 一、两个随机变量的和的分布 设(X ,Y )的联合密度函数为f (x ,y ),现求Z=X+Y 的概率密度。 令{(,)|}z D x y x y z =+≤,则Z 的分布函数为: (){} {}(,)((,))Z D z z y F z P Z z P X Y z f x y dxdy f x y dx dy +∞--∞ -∞ =≤=+≤==??? ? (1.1) 固定z 和y 对积分(,)z y f x y dx --∞ ? 作换元,令x y u +=,得 (,)(,)z y z f x y dx f u y y du --∞ -∞ =-?? (1.2) 于是 ()(,)[(,)]z z Z F z f u y y dudy f u y y dy du +∞+∞ -∞-∞ -∞ -∞ =-=-? ??? (1.3) 由概率论定义,即得Z 的概率密度为 ()(,)Z f z f z y y dy +∞ -∞ =-? 注意:积分限为?∞到+∞ (1.4) 由X 与Y 的对称性,又可得 ()(,)Z f z f x z x dx +∞ -∞ =-? 注意:积分限为?∞到+∞ (1.5) (1.4)与(1.5)相当于分别在 x z y y z x =-=-或条件下,求X 或Y 的边缘概率密度。 特别的,当X 与Y 相互独立时,有 ()()()()()Z X Y X Y f z f z y f y dy f x f z x dx +∞ +∞ -∞ -∞ =-=-? ? (1.6) 其中,()X f x 、()Y f y 分别是X 和Y 的边缘概率密度。 式(1.6)又称为()X f x 和()Y f y 的卷积公式,常记为()*()X Y f z f z 。因此式(1.6)又称为独立随机变量和的分布的卷积公式。 二、两个随机变量的商的分布 设(X ,Y )的联合密度函数为f (x ,y ),现求X Z Y =的概率密度,Z 的分布函数为 第五章函数 “函数”是自定义函数和子程序的统称。子程序可以用来独立出一段具有特定功能的程序代码,供其它地方调用。自定义函数可以用来扩充出fortran库函数中原来不存在的函数。 5-1 子程序(subroutine)的使用 写程序时,可以把某一段常常被使用、具有特定功能的程序代码独立出来,封装成子程序,以后只要经过调用的call命令就可以执行这一段程序代码。先来看一个使用子程序的实例。 1.program ex0501 2. implicit none 3. call message( ) !调用子程序message 4. call message( ) !再调用一次 5. stop 6.end 7.!子程序message 8.subroutine message( ) 9. implicit none 10. write(*,*)"hello" 11. return 12.end 执行结果如下: hello hello 程序的第3、4行出现了一个新命令“call”,而call在程序中的意义就如同它的英文原意,是“调用”的意思。所以第3、4行的意思就是“调用一个名字叫做message的子程序”。 子程序和前面所提到的“主程序”(以program开头、end来结束之间的这一段程序代码)最大不同处在于:主程序的程序代码,在程序一开始就自动会被执行,而子程序则不会自动执行,它需要被别人‘调用’才会执行。这就是它之所以被称作“子”的原因。 子程序的程序代码以subroutine开头,它同样要取一个名字,以end或end subroutine 来结束。 一个包含子程序的fortran程序在结构上的模样大致如下: program main ←----------主程序 …… ……←------------------主程序代码 …… end program main ←------主程序结束 subroutine sub1( ) ←----第1个子程序 …… ……←------------------子程序代码 …… end subroutine sub1←----第1个子程序结束 c语言函数库 第五章(数学函数) 1. abs、labs、fabs:求绝对值函数................... 错误!未定义书签。 2. acos:反余弦函数............................... 错误!未定义书签。 3. asin:反正弦函数............................... 错误!未定义书签。 4. atan:反正切函数................................ 错误!未定义书签。 5. atan2:反正切函数2.............................. 错误!未定义书签。 6. ceil:向上舍入函数.............................. 错误!未定义书签。 7. cos :余弦函数.................................. 错误!未定义书签。 8. cosh:双曲余弦函数............................. 错误!未定义书签。 9. div、ldiv:除法函数............................. 错误!未定义书签。 10. exp:求e的x次幂函数......................... 错误!未定义书签。 11. floor:向下舍入函数........................... 错误!未定义书签。 12. fmod:求模函数................................ 错误!未定义书签。 13. frexp:分解浮点数函数......................... 错误!未定义书签。 14. hypot:求直角三角形斜边长函数................. 错误!未定义书签。 15. ldexp:装载浮点数函数......................... 错误!未定义书签。 16. log、log10:对数函数.......................... 错误!未定义书签。 17. modf:分解双精度数函数........................ 错误!未定义书签。 18. pow、pow10:指数函数.......................... 错误!未定义书签。 19. rand:产生随机整数函数........................ 错误!未定义书签。 20. sin:正弦函数................................. 错误!未定义书签。 21. sinh:双曲正弦函数........................... 错误!未定义书签。 22. sqrt:开平方函数.............................. 错误!未定义书签。 23. srand:设置随机时间的种子函数................. 错误!未定义书签。 24. tan:正切函数................................ 错误!未定义书签。 25. tanh:双曲正切函数............................ 错误!未定义书签。 1.abs、labs、fabs:求绝对值函数 函数原型:int abs(int x); long labs(long x); double fabs(double x); 头文件:#include<> 是否是标准函数:是 函数功能:函数int abs(int x);是求整数x的绝对值;函数long labs(long n);是求长整型数x的绝对值;函数double fabs(double x); 是求浮点数x的绝对值。 返回值:返回计算结果。 例程如下:计算整数的绝对值。 #include <> int main(void) 第五章函数及存储变量 一、单项选择题 【5.1】对函数形参的说明有错误的是____。 A) int a(float x[],int n) B) int a(float *x,int n) C) int a(float x[10],int n) D) int a(float x,int n) 【5.2】如果一个变量在整个程序运行期间都存在,但是仅在说明它的函数内是可见的,这个变量的存储类型应该被说明为____。 A) 静态变量 B) 动态变量 C) 外部变量 D) 内部变量 【5.3】在一个C源程序文件中,?若要定义一个只允许在该源文件中所有函数使用的变量,则该变量需要使用的存储类别是。 A) extern B) register C) auto D) static 【5.4】在C语言中,函数的数据类型是指____。 A) 函数返回值的数据类型 B) 函数形参的数据类型 C) 调用该函数时的实参的数据类型 D) 任意指定的数据类型 【5.5】已知如下定义的函数: fun1(a) { printf("\n%d",a); } 则该函数的数据类型是____。 A) 与参数a的类型相同 B) void型 C) 没有返回值 D) 无法确定 【5.6】定义一个函数实现交换x和y的值,并将结果正确返回。能够实现此功能的是____。 A) swapa(int x,int y) B) swapb(int *x,int *y) { int temp; { int temp; temp=x;x=y;y=temp; temp=x;x=y;y=temp; } } C) swapc(int *x,int *y) D) swapd(int *x,int *y) { int temp; { int *temp; temp=*x;*x=*y;*y=temp; temp=x;x=y;y=temp; } } 【5,7】求一个角的正弦函数值的平方。能够实现此功能的函数是____。 A) sqofsina(x) float x; { return(sin(x)*sin(x)); } B) double sqofsinb(x)微观经济学高鸿业版第五章课后习题答案
数据结构作业系统_第五章答案
随机变量及其分布函数
两个随机变量和与商的分布函数和密度函数
第五章 函数
随机变量的函数的分布
第二章随机变量与分布函数习题
大学计算机 第五章单元测验
数据结构作业系统_第五章答案
§4随机变量函数的分布
数据结构作业系统_第五章答案
c++第五章习题解答(新教材)
连续型随机变量的分布与例题讲解
第五章整理 1
两个随机变量的和与商的分布函数与密度函数
第五章 函数
c语言函数库-第五章(数学函数)
第五章_函数及存储变量