第二章C语言复习及C基础知识.ppt

上传人:sccc 文档编号:5672877 上传时间:2023-08-08 格式:PPT 页数:62 大小:298.01KB
返回 下载 相关 举报
第二章C语言复习及C基础知识.ppt_第1页
第1页 / 共62页
第二章C语言复习及C基础知识.ppt_第2页
第2页 / 共62页
第二章C语言复习及C基础知识.ppt_第3页
第3页 / 共62页
第二章C语言复习及C基础知识.ppt_第4页
第4页 / 共62页
第二章C语言复习及C基础知识.ppt_第5页
第5页 / 共62页
点击查看更多>>
资源描述

《第二章C语言复习及C基础知识.ppt》由会员分享,可在线阅读,更多相关《第二章C语言复习及C基础知识.ppt(62页珍藏版)》请在三一办公上搜索。

1、第二章 C语言复习及C+基础知识,2.1.1 C+的起源2.1.2 C+的特点*.c C的源程序 以下的文件C和C+都可用:*.h C的头包含文件*.cpp C+的源程序*.hpp C+的头包含文件/*/C的注释/C+的注释,2.1 C+的起源和特点,1,2.2 C+源程序的构成,2.2.1 C+程序的一般格式例2.1 说明C+构造的示例程序#include/系统头文件int add(int a,int b);/函数原型的说明int main()/主函数 int x,y,sum;/定义三个整型变量 coutx;/从键盘输入变量x的值 ciny;/从键盘输入变量y的值 sum=add(x,y);

2、/调用函数add,将函数返回值赋给变量sum cout二数和是:sumn;/输出 return 0;int add(int a,int b)/定义函数add,函数(返回)值为整型 int c;/定义临时变量c c=a+b;/求和 return c;/将c的值返回,通过add带回调用处,2,2.2.2 C+程序的结构特性,1.包含文件及头文件2.标准输入与输出 printf(格式说明,表达式表列);scanf(格式说明,地址表列);cout3.新行“n”endl4.主函数 void main().5.一般的函数 函数头 int add(int a,int b)函数体 int c;/变量定义 c=

3、a+b;/执行部分 return c;,3,6.面向对象的特性 类的声明部分 类的使用部分例2.2#include/类的声明部分class A int x,y,z;/类A的数据成员声明 fun()/类A的成员函数声明;/类的使用部分void main()A a;/创建一个类A的对象a.a.fun();/给对象a发消息,调用成员函数fun(),2.3 C+在非面向对象方面的一些特性,2.3.1 注释行/*/C的注释/C+的注释2.3.2 新的I/O流cin是标准输入流,在程序中代表标准输入设备,即键盘。运算符“”表示向右cout是标准输出流,在程序中代表标准输出设备,即屏幕。运算符“int ma

4、in()char name20;coutname;coutnameendl;return 0;,/例2.4#include void main()int x=25;couthexxdecxoctxn;,4,2.3.3 灵活的局部变量说明,int f()int i;i=10;int j;j=25;for(int k=5;k=0;k-).以上的写法在C程序中都是错误的,但在C+程序中都是正确的。,5,2.3.4 结构、联合和枚举名可直接作为类型名,定义枚举类型名:enum bool FALSE,TRUE;定义结构枚举类型名:Struct student int sno;char*sneme;C语言

5、中定义枚举类型变量:enum bool done;定义结构类型变量:struct student s1,s2;C+语言中定义枚举类型变量:bool done;定义结构类型变量:student s1,s2;,6,2.3.5 const修饰符,#define LIMIT 100这里 LIMIT 是一个标志,代表 100const int LIMIT=100;这里 LIMIT 是一个常量名,在内存有空间放了100,因此有地址,可以用指针指向这空间,但不能修改它。int i=100;这里 i 是一个变量名,在内存有空间放了100,因此有地址,可以用指针指向这空间,且可以改放别的整数。(1)可以用一个指

6、向常量的指针变量指向常量:const char*name=“chen”;name3=a;/错误 name=“zhang”;/正确(2)指针常量 char*const name=“chen”;name3=a;/正确 name=“zhang”;/错误(3)const char*const name=“chen”;,name,chen,常量,zhang,常量,n,X,a,name,chen,zhang,常量,a,n,a,X,7,/例2.5#include main()int a=1;#define T1 a+a#define T2 T1-T1 coutmain()int a=1;const T1=a

7、+a;const T2=T1-T1;coutT2 is T2endl;return 0;,T2,a+a,a+a,T1-T1,8,2.3.6 内置函数,/例2.7#include int main()3次 for(int i=1;iint main()代码嵌入 for(int i=1;i=3;i+)coutr=i area=circle(i)endl;return 0;,float circle(float r)return 3.1416*r*r;,inline float circle(float r)return 3.1416*r*r;,9,/例2.8#include#define doub

8、(x)x*2int main()for(int i=1;iinline int doub(int x)return x*2;int main()for(int i=1;i=3;i+)couti doubled is doub(i)endl;cout1+2 doubled is doub(1+2)endl;return 0;,10,2.3.7 函数原型,返回类型 函数名(参数表);/例2.10#include void write(char*s);/函数原型或叫函数声明 void main()write(Hello,world!);void write(char*s)无分号 coutsendl;

9、使用在前,定义在后,要先声明。若定义在前,使用在后,就可不必声明。说明:(1)-(8),11,2.3.8 带有缺省参数的函数,C+在说明函数原型时,可以为一个或多个参数指定缺省参数值,以后调用此函数时,若省略其中某一实参,C+自动以缺省值作为相应參数的值。int special(int x=5,float y=5.3);合法的调用;special();special(25);special(100,79.8);说明:(1)所有取缺省值参数都必须出现在不取缺省值参数的右边。int fun(int i,int j=5,int k)是错误的 int fun(int i,int k,int j=5)是

10、正确的(2)调用时,若某个参数省略,则其后的参数皆应省略。不合法的调用;special(,21.5);,12,2.3.9 函数重载,C+中,只要函数的參数的类型不同,或者參数个数不同,或者二兼有之,几个函数可以用相同的函数名。称为函数重载/*例2.11#include int square(int i)return i*i;float square(float f)return f*f;double square(double d)return d*d;void main()int i=12;float f=3.4;double d=5.67;couti*i=square(i)endl;cou

11、tf*f=square(f)endl;coutd*d=square(d)endl;,13,/*例2.12#include int mul(int x,int y)return x*y;int mul(int x,int y,int z)return x*y*z;void main()int a=3,b=4,c=5;couta*b=mul(a,b)endl;couta*b*c=mul(a,b,c)endl;说明:(1)重载函数应在参数个数或参数类型上有所不同,编译才能识别调用哪一个重载版本,即使返回类型不同也不行。如:int mul(int x,int y);和 double mul(int x

12、,int y);是不能重载的。(2)一般而言,重载函数应对不同的参数情况执行相同的功能。如:abs(int x);和 abs(float x);都是求绝对值,一个是整数的绝对值,一个是实数的。,14,(3)函数的重载与带默认值的函数一起使用时,有可能引起二义性如:void Drawcircle(int r=0;int x=0;int y=0);void Drawcircle(int r);当调用:Drawcircle(20);编译程序无法确定用哪一个函数。(4)在函数调用时,当实参与形参类型不相符,C+会自动做类型转换,但有时也可能产生错误:void f_a(int x);void f_a(l

13、ong x);int c=f_a(5.56);?,2.3.10 作用域运算符:,当全局变量和局部变量同名时,函数中不能使用全局变量。/*例2.13#include int avar=10;/全局变量void main()int avar=25;/局部变量 coutint avar;void main()int avar;avar=25;/局部变量avar:avar=10;/全局变量avar coutlocal avar=avarendl;coutglobal avar=:avarendl;,15,2.3.11 无名联合,C语言的共用体:union data int i;char ch;floa

14、t f;union data a,b,c;引用:a.i a.ch a.f 等C+的无名联合:union int i;char ch;float f;直接可用 i ch f 等,16,2.3.12 强制类型转换,C语言的强制类型转换:int i=10;float x=(float)i;C+的强制类型转换:int i=10;float x=float(i);float y=(float)i;两种方法C+都可以。,17,2.3.13 new和delete,C语言用函数malloc()和free()动态分配内存和释放动态分配的内存。C+使用运算符new和delete能更好、更简单地进行内存的分配和释放

15、。如C语言中用:int*p;p=(int*)malloc(sizeof(int);*p=10;而C+语言中/*2.14#include void main()int*p;/定义一个整型指针变量p p=new int;/动态分配一个整型存储区,并把首地址赋给p*p=10;cout*pendl;delete p;/释放p指的空间,撤消指针pnew 和 delete 的优点:(1)new可以自动计算所要分配内存的类型的大小,而不必用sizeof来计算。,18,(2)new能够自动返回正确的指针类型,而不必进行类型转换。(3)可以用new将分配的对象初始化。(4)new 和 delete 都可以被重载

16、,允许建立自定义的分配系统。说明:(1)使用new可以为数组动态分配内存空间(但不能赋初值)。int*pi=new int10;int*pi=new int234;(2)new可在为简单变量分配内存空间的同时,进行初始化。/*例2.16#include void main()int*p;p=new int(99);/动态分配内存,并将99作为初始值赋给它 cout*pendl;delete p;(3)释放动态分配的数组存储区:delete p;,19,(4)使用动态分配内存时,分配失败,将返回空指针(NULL)。因此通常要对内存的动态分配是否成功进行检查。分配内存失败,p=NULL/*例2.1

17、7#include void main()int*p;p=new int;if(!p)/若分配内存失败 coutallocation failuren;return;*p=20;cout*pendl;delete p;(5)用new分配的空间,使用结束后应用delete显式地释放。,p NULL,20,2.3.14 引用,引用可为变量起别名,主要有变量的引用、函数參数的引用、函数返回值的引用。1.引用变量 数据类型,21,(2)引用实际上是一种隐式指针,可以少用“*”号/*例2.19#include void main()int i=15;/整型变量i int*iptr=i is 15 i i

18、s 29*iptr is 15*iptr is 29rptr is 15 rptr is 29,22,(3)引用不可重新赋值,不可使其作为另一个变量的别名。int i,k;int 则p中保存的是变量num的地址。(6)引用符虽然与地址符一样,但不会引起二义性。2.引用作为函数參数引用參数的方法可以代替C语言中的指针地址调用的方式。,23,/*例2.20 C语言中的指针地址调用的方式#include void swap(int*m,int*n)int temp;temp=*m;*m=*n;*n=temp;void main()int a=5,b=10;couta=a b=bendl;swap(a

19、=5 b=10a=10 b=5,24,/*例2.21 引用參数的方法#include void swap(int a=5 b=10a=10 b=5,25,3.引用返回值函数可返回一个引用,其目的是可将函数用在赋值运算符的左边。/*例2.22#include int a=1,3,5,7,9;int,26,4.引用举例,例2.23/引用参数和引用返回值#include int,27,min(num1,num2)=0;coutnum2)?num1:num2;int 运行结果:输入第一个数:45输入第二个数:78把大的数置成 0 后,这两个数是:45 和 0 再一次输入二个数:输入第一个数:13输入第

20、二个数:56把小的数置成 0 后,这两个数是:0 和 56,28,2.3.15 void 指针void 型指针是一通用型指针,可指任何类型:void pa;/错误,不能声明void类型的变量void*pa;/正确,可以声明void类型的指针 int i=456;char c=a;pc=,以下部分是C语言复习参考,2.4 存储类存储类 类型修饰符 类型 变量名表列;存储类 auto static extern register 类型修饰符 const volatile2.4.1 自动变量和寄存器变量2.4.2 静态变量2.4.3 外部变量,29,2.5 基本运算符和表达式,2.5.1 关系运算符

21、2.5.2 算术运算符2.5.3 逻辑运算符2.5.4 位运算符2.5.5 条件运算符2.5.6 逗号表达式2.5.7sizeof运算符2.6赋值及运算顺序2.7 类型转换,30,2.8 语句,2.8.1 表达式语句、空语句和块语句2.8.2 选择语句 1.if 语句 2.switch 语句2.8.3 循环 1.while 语句 2.do while 语句 3.for 语句2.8.4 转移 1.break 与 continue 语句 2.goto 语句2.8.5 return 语句,31,2.9 函数,2.9.1 函数的基础知识 函数先声明再调用后定义的例子#include void main

22、()int a,b,c;int sum(int,int);/先申明sum()函数 a=25;b=36;c=sum(a,b);/调用sum()函数 cout c endl;int sum(int x,int y)/定义sum()函数 int temp;temp=x+y;return temp;,32,/习题 函数(7.1)#include void main()int m,n,l,s;int maxj(int a,int b);int minb(int a,int b);printf(输入个正整数:);scanf(%d,%d,int maxj(int a,int b)int r,t;if(ab)

23、t=a;a=b;b=t;r=a%b;while(r!=0)a=b;b=r;r=a%b;return b;,int minb(int a,int b)int r;r=maxj(a,b);if(r!=0)return a*b/r;else return 0;,33,/习题 函数(7.5)#include#include#include void main()char a255;void convert(char b);printf(请输入一个字符串:n);gets(a);convert(a);printf(该字符串反序为:n);puts(a);return;,void convert(char b

24、)int l,i;char c;l=strlen(b);for(i=0;i=l/2;i+)c=bi;bi=bl-i-1;bl-i-1=c;return;,c,34,m#include#include void main()float a,b,c,d,x2;void root0(float a,float b,float c,float d,float x);void root1(float a,float b,float c,float x);void root2(float a,float b,float c,float d,float x);printf(请输入一元二次方程的三个系数 a,

25、b,c:n);scanf(%f,%f,%f,35,void root2(float a,float b,float c,float d,float x)float r,i;r=-b/(2*a);i=sqrt(d)/(2*a);x0=r-i;x1=r+i;,void root1(float a,float b,float c,float x)x0=x1=-b/(2*a);,void root0(float a,float b,float c,float d,float x)x0=-b/(2*a);x1=sqrt(-d)/(2*a);,else root2(a,b,c,d,x);printf(由于

26、b*b-4*a*c0 因此有二个实根:n);printf(x1=%f n,x1);printf(x2=%f n,x2);return;,36,2.9.2 参数传递及函数返回值(1)值传 一般变量(2)传地址 结构,数组(3)传引用 一般变量,结构,数组 缺省参数2.9.3 使用C+系统函数,37,2.10 数组,定义 类型 数组名大小;int a4;int b34;int c234;使用时数组元素 数组名表达式 a0=10;i=3;ai=5;b03=20;初始值 定义时 int a=2,4,6,8,10;int b3=2,4,6,8,10,12;,38,2.11 指针,定义 类型*指针变量名;

27、2.11.1 使用指针 取地址运算符 p+2 即*(p+2)p-i 即*(p-i),39,2.11.2 指针运算1.赋值 int x,*px,*q;px=,40,2.11.3 指针和数组,1.指向一维数组的指针 int a4,*p;p=a;或 p=,41,3.指向整个数组的指针(行指针)如:int(*a)5;int b25=0,1,2,3,4,5,6,7,8,9 a=b;a b 0 1 2 3 4 5 6 7 8 9#include void main()int(*a)5;int b25=0,1,2,3,4,5,6,7,8,9;a=b;for(int i=0;i5;i+)cout i:*(*a

28、+i)endl;a+;for(int i=0;i5;i+)cout i:*(*a+i)endl;,42,43,二维数组的地址*a a0 int a34;*(a+i)+j是第 i 行第 j 列地址*(*(a+i)+j)a+0 是第 0 行的地址.a+i 是第 i 行的地址*(a+0)是第 0 行第 0 列的地址.*(a+0)+j是第 0 行第 j 列的地址*(a+i)是第 i 行第 0 列的地址.*(a+i)+j是第 i 行第 j 列的地址*(*(a+0)+0)是第0行第0列的数据.(*(a+0)+j)是第0行第j列的数据*(*(a+i)+0)是第i行第0列的数据.*(*(a+i)+j)是第i行

29、第j列的数据,44,二维数组的指针*a a0 int a34;(p+i*4+j)是第i行第j列地址(1)int*p;(小指针)p=*a;p=a;p=a0;*(p+i*4+j)p=元素数据:*p*(p+j)pj*(a+0)是第 0 行第 0 列的地址.*(a+0)+j是第 0 行第 j 列的地址*(a+i)是第 i 行第 0 列的地址.*(a+i)+j是第 i 行第 j 列的地址*(*(a+0)+0)是第0行第0列的数据.(*(a+0)+j)是第0行第j列的数据*(*(a+i)+0)是第i行第0列的数据.*(*(a+i)+j)是第i行第j列的数据 p 当一维数组名用但可 p=p+i p+走(i)

30、一行 元素地址:*p+j 数据:*(*p+j)(*p)j,45,struct student int num;float score;struct student*next;struct student*p;,46,p1=p2=(struct student*)malloc(LEN);,scanf(“%d,%f”,&p1-num,&p1-score);,20101,89.5,1,head=p1;,p1=(struct student*)malloc(LEN);,20103,90,2,(n=2)p2-next=p1;,p2=p1;,scanf(“%d,%f”,0,NULL,p1-num=0,47

31、,48,2.11.4 引用,引用可为变量起别名,它主要用作函数参数以及函数的返回类型。有参数引用和返回值引用。1.引用说明 int num=50;int 表示放整数 50 的内存空间 可叫 num,又可叫 ref 引用实质上是为另一个变量建立别名。2.引用参数(传引用),49,3.返回引用的函数,当一个函数的返回值需重新赋值的时候,我们也可对返回值进行引用,这时函数可出现在赋值号的左边。这种函数称为返回引用的函数。形式 类型 注意:返回值是函数内的局部变量时不能引用,50,例#include int e(int i)return i+1;int,main()int r1=e(3);int,51

32、,2.11.5 void类型指针,void指针是一个特殊指针,它可以指向任一类型的C+对象。void main()void*vp;int i=5;floatf=7.8;char c=A;int*ip;float*fp;char*cp;ip=/错误,52,2.12 类型定义,typedef 类型名 标识符2.13 指针和动态内存分配 C+的基本操作符 new 和 delete 分配内存:指针变量名=new 类型大小;int*ip;ip=new int5;释放内存 delete ip;,53,2.14 指针和函数,指针变量可以作函数的参数,指针也可作函数的返回值,还有一种指针可以用来指向函数2.1

33、4.1 指针作为函数的参数 函数中的形参,可以是指针变量。这时实参可以是地址或指针来调用它【例】指针作为参数的例子#include void main()int a15;void input(int*s,int n);input(a,15);for(int i=0;i15;i+)coutaiendl;,void input(int*s,int n)coutsi;/或 cin*s+;,54,2.14.2 返回指针的函数,C+函数的返回类型,可以是除数组和函数外的任何类型包括指针【例】指针作为函数的返回值的例子 先问用户要输入多少个实数,然后分配一存储空间保存输入的这些实数,并把指向这空间的指针返

34、回给用户。#include float*input(int,float*input(int,55,2.14.3 指向函数的指针变量,C+中函数也有地址,也可以用指针指向它。这种指针的定义方法:int(*funp)(int a,int b);表示 funp 是指针,可以用来指向带有两个int类型参数的函数,这个函数的返回值是 int 函数 int fun(int a,int b).funp=fun;funp 指向函数 fun 可以用这种指针调用函数 result=(*funp)(5,10);或 result=fnup(5,10);,56,在C+中,字符串被定义为以 0结束的字符数组。char str7=s,t,r,i,n,g,0;char str7=string;char*ps=string;或分成 char*ps;ps=string;但数组不能分成 char str7;str=string;/错误 串可以作为一个整体输入输出:#include void main()char str=请输入一个字符串:;char entstr25;cout entstr;cout n您输入的字符串是:entstr;,57,习题,2.22.72.82.92.102.112.142.172.18,58,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号