第5章.ppt

大学VISUAL C++程序设计-王永国-课件PPT

收藏

资源目录
跳过导航链接。
压缩包内文档预览:(预览前20页/共66页)
预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图 预览图
编号:21836328    类型:共享资源    大小:4.17MB    格式:ZIP    上传时间:2019-09-06 上传人:QQ24****1780 IP属地:浙江
25
积分
关 键 词:
大学VISUAL C++程序设计-王永国-课件PPT 大学 visual C++ 程序设计 王永国 课件 ppt
资源描述:
大学VISUAL C++程序设计-王永国-课件PPT,大学VISUAL,C++程序设计-王永国-课件PPT,大学,visual,C++,程序设计,王永国,课件,ppt
内容简介:
第5章 函数,5.1 函数概述 5.2 函数的定义、调用与说明 5.3 函数间参数传递 5.4 内联函数 5.5 递归函数 5.6 函数重载 5.7 函数模板 5.8 作用域与存储类别 5.9 应用举例,5.1 函数概述,5.1.1 引例 已知五边形的各条边的长度,计算其面积 。,计算多边形面积,可将多边形分解成若干个三角形。,计算三角形面积的公式如下:,用前面所学的知识实现:,#include “math.h“ #include “iostream.h“ void main() float a,b,c,d,e,f,g,p1,p2,p3,s1,s2,s3,s; cinabcdefg; p1=(a+b+c)/2; s1=sqrt(p1*(p1-a)*(p1-b)*(p1-c); p2=(c+d+e)/2; s2=sqrt(p2*(p2-c)*(p2-d)*(p2-e); p3=(e+f+g)/2; s3=sqrt(p3*(p3-e)*(p3-f)*(p3-g); s=s1+s2+s3; coutsendl; ,函数是一个可以独立完成某个功能的语句块。使用时,可以用简单的方法为其提供必要的数据,执行这段程序后,能保存执行结果并将程序返回到原处继续执行。 C+中的函数如果从用户使用的角度,可以分为标准函数和用户自定义函数。所谓标准函数是系统已实现的并通过函数库形式提供的函数,如sqrt、fabs、strlen等等。程序员在编写程序时可以直接使用标准函数,而不用定义它们。在C+中所有的标准函数都被放置在不同的函数库中,并有一个与之对应的头文件。例如,头文件iostream.h中包含了I/O函数;头文件cmath.h中包含了常用的数学函数等。使用标准函数不仅可以提高开发效率,而且又使程序具有很好的可移植性。然而标准函数毕竟有限,对于一些特殊的需要,用户需要自己编写函数用以解决专门的需要。本章将详细介绍C+中的用户自定义函数,但作为一种面向对象的语言,我们推荐在C+中采用面向对象的设计思想来编写程序。,5.1.2 基本知识,#include “math.h“ #include “iostream.h“ float area(float x,float y,float z) /定义求三角形面积函数 float l,s ; l = (x + y + z)/2; s = sqrt(l*(l-x)*(l-y)*(l-z); return s; ,用函数实现:,特点: 函数具有相对独立的功能 函数与函数之间通过参数(输入)和返回值(输出)来联系 使用函数有利于代码重用,提高开发效率,void main() /主函数 float a,b,c,d,e,f,g,s; cinabcdefg; s=area(a,b,c)+area(c,d,e) +area(e,f,g); coutsendl; ,5.2 函数的定义、调用与说明,5.2.1 函数的定义,函数类型 函数名(形式参数类型表) 函数体 ,将两数的比较独立出来编一函数:,【例5.1】求三个整型数中最大的数。,int max(int x,int y) int z; if(xy) z=x; else z=y; return z; /将大的数返回 ,void main() int a,b,c,m; cinabc; m=max(a,b); m=max(c,m); coutmendl; ,【例5.2】编一程序,输出如右图形。,#include #include void pic(int n) for(int i=0;in;i+) coutsetw(10-i); /cout.width(10-i);控制每行输出的起始位 for(int j=0;j2*i+1;j+)cout“*“; coutendl; void main() pic(4); pic(6); ,将n行构成的三角形独立出来编一函数:,说明: 函数类型指函数返回值的数据类型 对没有返回值的函数,函数类型定为void型(无类型或空类型)。 形式参数可以为空,但圆括号不能省略。 函数体由语句和其它分程序组成。 函数体中不允许再嵌套定义函数,非void型函数 函数体中必须有return语句,形式为: return 表达式 ; 或 return (表达式) ; 用于返回函数值。表达式值的类型与函数类型最好一致。 void型函数 函数体中return语句可以不出现。若出现, 则不能带表达式。,5.2.2 函数调用,注意: 实参与形参的个数、位置与类型必须一致。它可以是同类型的常量、变量或表达式。 调用的形式可以是表达式,也可以是语句。 函数定义中的形参只有当发生函数调用时,才被分配内存单元。,形式:函数名(实在参数表) 函数调用的过程:,#include “iostream.h“ #include “iomanip.h“ void main() pic(4); /以语句形式调用 pic(6); ,void pic(int n) for(int i=0;in;i+) coutsetw(10-i); for(int j=0;j2*i+1;j+) cout“*“; coutendl; ,函数调用和返回的过程:,输入数据,调用函数,输出,处理过程,函数结束或 函数值返回,注意:数据的输入、输出一般放在主函数中,保存:返回地址、当前现场,恢复:主调程序现场、返回地址,主函数,结束,自定义函数,【例5.3】 求正整数m,n的最大公约数和最小公倍数 。,注意:函数中参数传递是单向“传值”,且自右向左。,/求最大公约数 int gcd(int m,int n) while(int r=m%n) m=n;n=r; return(n); ,/求最小公倍数 int sct(int m,int n) return( m*n/gcd(m,n) ); ,#include “iostream.h“ void main() int m,n; cinmn; coutgcd(m,n)endl; coutsct(m,n)endl; ,分析:m、n的最小公倍数为: m*n/最大公约数。,函数嵌套调用的示意图:,注意:函数不可嵌套定义,但可以嵌套或递归调用!,形式:函数类型 函数名(形式参数类型表);,#include “iostream.h“ void main() int a,b,c; int max(int x,int y); /函数说明,也可int max(int,int); cinab; c=max(a,b); couty?x:y ; ,【例5.4】函数说明示例,可省略参数名,注意: 函数调用在前,定义在后,则必须对函数进行说明,函数说明可以放在函数调用之前所在的函数内,也可以放在源文件开头、函数的外部。 函数说明和函数定义在返回类型、函数名和参数表上必须要完全一致。,5.2.3 函数说明(函数原型),float *fun(float x,float y); char *strcat(char *strDest,const char *strSource);,在说明或定义返回值为指针的函数时,只须在函数名前加一指针类型说明符即可。,即函数的返回值可以是变量的地址、数组名或指针变量等。如:,5.2.4 函数返回值为指针,【例5.11】拼接两个字符串s1和s2,将拼接后的字符串存于s1中返回。,char *strcat1(char *s1,const char *s2) char *p=s1; while(*p+); -p; while(*p+=*s2+) ; return(s1); ,思考:若不定义为返回指针值的函数,则程序应如何修改?,void main() char *p1,*p2; p1=new char20; p2=new char5; cinp1p2; coutstrcat1(p1,p2)endl; ,注意:不能返回一个局部变量(在函数内定义的变量)的地址,#include “iostream.h“ int *fun(int x) int y=x*x; return ,p指向的对象已经不存在,5.3 函数间参数传递,参数是调用函数与被调用函数之间交换数据的通道。在C+中,函数的参数不仅可以是基本类型的变量,还可以是指针、数组名和对象名。 此外,C+还提供了默认参数机制,从而可以简化复杂函数的调用。,5.3.1参数的传递方式,1传值方式 传值方式是将实参值的副本传递(拷贝)给被调用函数的形参。传值方式调用的特点:形参的改变不会影响实参的值。传值方式是C+默认的参数传递方式,此前列举的函数中,都是传值参数的实例。,形参:变量 实参:常量、变量和表达式,#include “iostream.h“ void swap(int a,int b) int temp; temp=a;a=b;b=temp; void main() int x,y; cinxy; swap(x,y); cout“x=“x“ y=“yendl; ,【例5.5】分析下面程序,能否交换两个变量的值?,【例5.6】m是一个3位的正整数,将满足m、m2、m3均为回文数的正整数输出。所谓回文数是指顺读与倒读数字相同,如4、151、34543。 分析:将正整数的每位数取出,构造一个逆序的正整数,若该数与原来的相同,即为回文数。,bool pd(int x) int m=x,n=0,k; while(x!=0) /构造一逆序数 k=x%10; n=n*10+k; x/=10; return m=n; ,2传址方式,传值调用方式被调函数只能向主调函数传递一个返回值,如果希望形参的改变能影响实参值或者程序需要从函数返回多个值怎么办?解决的办法可以通过传址调用。 (1)形参为指针变量,形参:指针变量 实参:变量的地址、指针变量或数组名 特点:形参的改变能影响实参值,调用时将实参值(地址)传给形参,也就是使实参和形参指向同一存储单元。,【例5.8】交换两个变量的值,#include “iostream.h“ void swap(int * ,int * ); void main() int a,b;cinab; swap( ,【例5.9】随机生成10个1100之间的数放在一维数组中,求其平均值及最大的元素值 。,#include “iostream.h“ #include “stdlib.h“ const int N=10; void fun(float *p,float *p1,int *p2) float sum,max1; sum=max1=*p+; for(int i=1;iN;i+) if (max1*p) max1=*p; sum=sum+*p;p+; *p1=sum/N; *p2=max1; void main() float a10,aver,max,x; for(int i=0;i10;i+) x=rand()%100+1; ai=x; fun(a, ,【例5.10】字符串的复制,#include “iostream.h“ void copy_string(char *from, char *to) while(*from!=0) *to+=*from+; *to=0; void main() char a=“I am a teacher.“, b=“You are a student.“; coutaendlbendl; copy_string(a,b); coutaendlbendl; ,注意: 若对应的实参是指针变量,则该指针应有确定的指向。,void main() char *a,*b; a=new char40; b=new char20; cinab; copy_string(a,b); couta bendl; delete a; delete b; ,若该二语句删除,程序运行时将异常终止。,#include “iostream.h “ int f(const int * p) int a=100; a=*p; return a; void main() int x=5; coutf( ,*p=a; return *p;,错误,不能修改const对象,为了防止被调函数对实参所指对象的修改,可将形参设为常指针。,若实参是常对象的地址,则形参必须定义为常指针。,#include “iostream.h“ int f(const int *p) int a=100; a=*p; return a; void main() const int x=5; coutf( ,形参不能定义为int *p,(2) 数组名作参数,形参:数组名 实参:数组名或指针变量 特点:在被调函数中对形参数组的任何改变均会影响实参所指地址里的内容 。,【例5.12】对含有n个元素的整型数组a,从大到小进行排序。,调用:sort(a,10);,void sort(int x,int n) int i,j,k,w; for(i=0;in-1;i+) k=i; for(j=i+1;jn;j+)if(xkxj)k=j; if(i!=k)w=xi;xi=xk;xk=w; ,数值型数组的元素个数一般须传给形参,【例5.13】 求字符串长度,并调用之。,int len(char s) int i=0; while(si!=0)i+; return i; ,调用: coutlen(str);,字符型数组的元素个数一般不用传给形参,形参s,实参str,注意: 形参和实参的类型应保持一致。 函数头里的参数,要一个一个地分别说明或 列出。,下面是几种函数头正确与错误的写法:,(3)引用参数,#include “iostream.h“ void swap(int ,&为引用声明符。 a是x的引用, b是y的引用。,引用是一种特殊类型的变量,可认为是另一个变量的别名,它不占用存储空间,对引用的操作就是对被引用者的操作,它们代表的是同一存储单元。,特点:形参的改变可影响实参值。,形参:引用 实参:变量名,【例5.7】编一函数,判别一个自然数N是否是降序数,同时,求出该数各位数和。并加以调用,若是降序数输出“yes”,否则输出“no”。例如:3、441、531是降序数;而412不是降序数。,bool drop(int x,int ,函数在定义时预先给定一个缺省的形参值,调用时给出的优先。,5.3.2 函数参数缺省,#include “iostream.h“ #include “math.h“ double s(double x , double eps=1e-6) int n=1; double w=0.0, t=1.0 ; while(fabs(t)=eps) w+=t; t=t*x/(n+); return w; ,void main() cout“s1=“s(2.0); cout“s2=“s(3.0); cout“s3=“s(1.0,1e-5);,参数eps取默认值1e-6,参数eps的值为1e-5,【例5.19】求下面级数的部分和。精度为:,说明: 默认参数的说明必须出现在函数调用之前。若一个函数说明已给出参数的默认值,则在函数定义中不允许再设置。 要求赋予默认值的参数必须放在形参表列中的最右端。函数调用时按从左到右的顺序将实参与形参结合,不足用右边缺省值来补足。,分析下面各例: void fun(int i, int j, int k, int m=3,int n=4); 假设函数调用语句为: fun(1,2); /错误,至少应有三个实参 fun(10,20,30); /正确,m、n取默认值3与4 fun(10,20,30,40); /正确,m取40、n取默认值4 fun(10,20,30, ,50); /错误,只能从左至右匹配,5.4 内联函数,C+引入内联函数的原因是用它来取代C中的预处理函数。内联函数和宏函数的区别在于,宏函数是由预处理器对宏进行替换,而内联函数是通过编译器来实现的,因此内联函数是真正的函数,只是在调用的时候,内联函数像宏函数一样的展开,所以它没有一般函数的参数压栈和退栈操作,减少了调用的开销,因此,内联函数比普通函数有更高的执行效率。 在C+中使用inline关键字来定义内联函数。inline关键字防在函数定义中函数类型之前。不过编译器会将在类的说明部分定义的任何函数都认为内联函数,即使它们没有用inline说明。,【例5.14】 使用内联函数实现求两个整数的最大值。 /Ex5_14.cpp #include “iostream“ using namespace std; inline int myMax(int x,int y) return xy?x:y; void main() coutmyMax(3,6)endl;,关键字inline将函数myMax说明成内联函数。其使用方式和一般函数一样,只不过在程序执行时并不产生函数调用,而是在函数调用处将函数代码展开执行。内联函数的定义必须出现在内联函数第一次被调用之前。 当然,内联函数也有一定的局限性,就是函数中的代码不能太多,函数体内不能有循环语句和switch语句,结构也不能太复杂。 C+中之所以引入内联函数,这与宏函数固有缺陷有关。,5.5 递归函数,用自身的结构来描述自身就称为递归(直接、间接)。 最典型的例子是对阶乘运算: n!=n(n-1)! (n-1)!=(n-1)(n-2)! 1!=1,特点: 原始问题可转化为解决方法相同的新问题; 新问题的规模比原始问题小; 新问题又可转化为解决方法相同的规模更小的新问题,直至终结条件为止。,fac(2)=2*fac(1),fac(1)=1,fac(4)=4*6,fac(3)=3*2,fac(2)=2*1,fac(3)=3*fac(2),fac(4)=4*fac(3),【例5.15】编fac(n)=n! 的递归函数,long fac(int n) if(n=1) return(1); return (n*fac(n-1); ,递推过程:每调用自身,当前参数压栈,直到达到递归结束条件。 回归过程:不断从栈中弹出当前的参数,直到栈空。,思考:若fac函数中没有语句 if(n=1) return(1);程序运行结果将如何?,递推,回归,【例5.16】用递归函数实现将一个十进制整数转换成二至十六任意进制的字符,void convert(int m,int r) char b17=“0123456789ABCDEF“; if(m!=0) convert(m/r,r);coutbm%r; ,任何有意义的递归必须具有: 递归结束条件及结束时的值; 能用递归形式表示,并且递归向终止条件发展。,递归算法设计简单,程序代码简洁易读,但它消耗的机时和占据的内存空间比非递归大。,【例5.17】求px(x,n)=x-x2+x3-x4+(-1)n-1xn (n0),px(x,n) =,x n=1,x*(1-px(x,n-1) n1,#include “iostream.h“ double px(double x,int n) if (n=1) return (x); else return(x* (1-px(x,n-1); void main() double x; int n; coutxn; cout“px=“px(x,n)endl; ,【例5.18】输入一个正整数,要求用递归方法实现以相反的顺序输出该数。,#include “iostream.h“ void printn(int n) if (0num; printn(num); coutendl; ,5.6 函数重载,引例:求不同类型数据的绝对值,不足:易出错、难记忆 函数重载:一组参数(个数或类型)不同的函数共用一个函数名。,不同名函数实现同一类的操作,#include #include void main() int x1=-1; double x2=2.5; long x3=3L; coutabs(x1)endl; coutfabs(x2)endl; coutlabs(x3)endl; ,【例5.20】 #include int abs(int x) return x0?x:-x; double abs(double x) return x0?x:-x; long abs(long x) return x0?x:-x; void main() int x1=1; double x2=2.5; long x3=3L; coutabs(x1)endl; coutabs(x2)endl; coutabs(x3)endl; ,1. 参数类型不同的重载函数,编译器会根据函数参数的类型来确定应该调用哪个函数,2. 参数个数不同的重载函数,可见:重载使得函数的使用更加灵活、方便。 它体现了C+对多态性的支持一个名字,多个入口 。,【例5.21】 #include int min(int a,int b) return ab?a:b; int min(int a,int b,int c) int t=min(a,b); return min(t,c); int min(int a,int b,int c,int d) int t1=min(a,b); int t2=min(c,d); return min(t1,t2); void main() coutmin(13,5,4,9)endl; coutmin(-2,8,0)endl; ,编译器会根据调用语句中实参的个数来确定应该调用哪个函数,注意:,1)重载函数之间参数类型或个数必须有所不同; 2)不要同时使用重载函数和缺省参数函数,以免引起二义性。 3)“运算符重载”是针对C+中原有运算符进行的,不可能通过重载创造出新的运算符。除了.、.*、-*、:、?: 这五个运算符外,其他运算符都可以重载。由于很多符号是一元运算符和二元运算符公用的(如*既可以用于间接访问也可用于两数相乘),为了避免含混,不得为重载的运算符函数设置默认值,调用时也就不得省略实参。 4)除了new和delete这两个较为特殊的运算符以外,任何运算符如果作为成员函数时不得重载为静态函数。=、()、- 以及所有的类型转换运算符只能作为成员函数重载,而且是不能针对枚举类型操作数的重载。,class与typename等价,5.7 函数模板,函数模板用来定义一个通用函数,可以对不同类型的数据进行相同的处理,其作用与函数重载相似,但代码要简单许多。而使用函数重载则需编写多个函数。 利用函数模板定义的函数称为模板函数,形式:,template 类型 函数名( 参数表) ,【例5.22】 #include template T min(T a,T b) return ab?a:b; void main() coutmin(3,5)endl; coutmin(8.5,5.6)endl; ,1)定义一个数据类型T 2)使用模板函数时,模板中的类型参数T用实参的类型替换,分析以下几种模板函数:,template T fun1(T a,int b) /可含有模板参数表中未给出的数据类型 ,template /模板中可带有多个参数 void fun1(T1 a,T2 b,T3 c) ,template void fun1(int a,int b) /必须至少有一个参数的类型为模板的 /类型参数,即使函数体中出现也不可,template void fun1(int a,int b) T i,j; ,【例5.23】定义一个通用的函数,对n个数按递增排序。,#include “iostream.h “ template void sort(TEM x,int n) int i,j,k; TEM w; for(i=0;ixj)k=j; if(i!=k) w=xi;xi=xk;xk=w; ,void main() int i,a6=6,9,2,4,1,0; float b4=5.5,8.0,3.3,0; sort(a,6); sort(b,4); for(i=0;i6;i+) coutaiendl; for(i=0;i4;i+) coutbiendl; ,注意w变量的定义,5.8 作用域与存储类别,前面我们学习了变量的有关知识:1.变量名用标识符表示;2.变量有一定的类型,分别代表一定的存储单元;3.不同类型的变量可以有不同的运算等。 由于用户在编写程序时总希望程序里用到的变量能在同一函数或不同函数里互不干扰或能共享。 所以本节介绍变量:1.变量在什么时间段内存在?2.变量在程序的什么范围内起作用?等等。 下面主要从三个方面分析各变量: 作用域(可见性):指变量可以被使用的有效范围。是一个空间概念(在什么范围内可以访问),由定义变量的位置(全局变量、局部变量)决定。,【例5.24】统计一正整数的位数。 #include “iostream.h“ int digit(long n) int k=0; while(n!=0) n/=10; k+=1; return k; void main() long x; cinx; cout digit(x)endl; ,全局变量(外部变量):在函数外部定义的变量,局部变量(内部变量):在函数内部定义的变量,包括形式参数,生存期:指变量的存在时间,是一个时间概念(在什么时间存在),由变量的存储类别(自动和静态的局部变量和全局变量)决定。 初始化 :,5.8.1 自动变量(auto),缺省的存储类别 作用域:从定义点开始到所在的分程序结束,作用域不可以扩展 生存期:开始执行分程序就生成,分程序执行结束就消亡 初始化:可以初始化,缺省值为随机值。,【例5.23】自动变量示例。 #include “iostream.h“ int f(int x) x+; int y=5; /auto int k=5; y+; return x+y; void main() int k=2; coutf(k)endl; coutf(k+1)endl; ,注意:只有内部变量存储类别才能auto,5.8.2 静态局部变量(static),作用域:从定义点开始到所在的分程序结束。作用域不可以扩展。 生存期:在程序执行过程中始终存在,直到整个程序运行结束。 初始化:在开始执行程序时初始化,缺省值为0或0 。只初始化一次。 一个函数可能被调用多次,前一次调用的结果带到下一次去。,#include “iostream.h“ int fac(int n) static int f=1; f=f*n; return(f); void main() auto int i; for(i=1;i=5;i+) cout“i!=“fac(i); ,【例5.25】计算15的阶乘。,5.8.3 全局变量,全局变量又称外部变量,是在函数外定义的变量。 作用域:从定义点开始到所在的文件结束 生存期:程序的整个执行周期 初始化:可以初始化,缺省值为0或0 。 作用域可以扩展: 向上扩展 横向扩展,扩展到另一个文件 注意:扩展的地方不能初始化,#include “iostream.h“ int m=10; void f1(int n) n=2*n;m=m/3; int n; void f2() n=5;m+;n+; void main() int n=2; f1(n); f2(); coutmnendl; ,【例5.26】外部变量示例,注意:外部变量的作用域只限于定义处到文件结束,定义点之前的函数或其它文件中的函数不可以引用该外部变量。 可以使用extern声明符来扩展外部变量的作用域,外部变量与局部变量同名,起作用的是局部变量,1. 作用域向定义点之前的函数扩展,#include extern int i; void fun() /extern int i; 错误 couti; void g() i+; int i=5; void main() int j=20; coutj; g(); fun(); ,#include extern int i; /不能初始化 void fun() / extern int i; couti; int i=5; void main() int j=20; coutj; fun(); ,2.作用域扩展到另一个文件,/file1.cpp #include “iostream.h“ extern max,min; void main() void maxmin(int x,int n); int a10=11,2,3,-4,5,6,7,8,0,20; maxmin(a,10); coutmax“ “minendl; ,/file2.cpp int max,min; void maxmin(int x,int n) max=x0;min=x0; for(int i=0;imax)max=xi; if(ximin)min=xi; ,【例5.27】作用域横向扩展示例,自动变量、静态局部变量和外部变量总结,对于多文件程序的运行,方法是:新建一个工程,在该工程内分别建立两个或多个文件,编译时由于编译器是以源文件为单位工作的,所以须对每个文件分别进行编译,然后单击 运行!,要慎用外部变量,因为通过外部变量进行数据传递,会影响函数的独立性,不利于结构化程序的编制和调试。,5.9 程序举例,【例5.28】编一判断质数的函数,验证歌德巴赫猜想:任何大于2的偶数均可表示为两个素数的和。例如:4=2+2(特例,仅此一个),6=3+3,8=3+5,。程序要求输入任一偶数,输出6到该数范围内的各个满足条件的组合。,分析:对一个偶数,分解为两个质数和,既n=a+b。方法是从找最小的质数a为3开始(因2是偶数,另一个必定是偶数,不可能是质数),判断b=n-a是否是质数,若b也是质数,则n符合要求;否则,找下一个质数a,再判断b。,程序: #include “iostream.h“ int isprime(int m) /判别m是否
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
提示  人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:大学VISUAL C++程序设计-王永国-课件PPT
链接地址:https://www.renrendoc.com/p-21836328.html

官方联系方式

2:不支持迅雷下载,请使用浏览器下载   
3:不支持QQ浏览器下载,请用其他浏览器   
4:下载后的文档和图纸-无水印   
5:文档经过压缩,下载后原文更清晰   
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

网站客服QQ:2881952447     

copyright@ 2020-2025  renrendoc.com 人人文库版权所有   联系电话:400-852-1180

备案号:蜀ICP备2022000484号-2       经营许可证: 川B2-20220663       公网安备川公网安备: 51019002004831号

本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知人人文库网,我们立即给予删除!