已阅读5页,还剩9页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C语言复习及C 基础知识 课件讲座本文由flying_judy贡献 ppt文档可能在WAP端浏览体验不佳。建议您优先选择TXT,或下载源文件到本机查看。 第二章 C语言复习及 语言复习及C+基础知识 语言复习及 基础知识 2.1 C+的起源和特点 的起源和特点 2.1.1 C+的起源 的起源 2.1.2 C+的特点 的特点 C的源程序 的源程序 *.c 以下的文件C和 都可用: 以下的文件 和C+都可用: 都可用 C的头包含文件 的 *.h C+的源程序 的源程序 *.cpp C+的头包含文件 的 *.hpp /* */ C的注释 的注释 / C +的注释 的注释 1 2.2 C+源程序的构成 源程序的构成 2.2.1 C+程序的一般格式 程序的一般格式 说明C+构造的示例程序 例2.1 说明 构造的示例程序 #include / 系统头文件 int add(int a, int b); /函数原型的说明 函数原型的说明 int main( ) /主函数 主函数 int x,y,sum; /定义三个整型变量 定义三个整型变量 cout输入二个数 输入二个数:x; /从键盘输入变量 的值 从键盘输入变量x的值 从键盘输入变量 ciny; /从键盘输入变量 的值 从键盘输入变量y的值 从键盘输入变量 sum=add(x,y); /调用函数 调用函数add,将函数返回值赋给变量 调用函数 将函数返回值赋给变量 sum cout二数和是 二数和是:name; couthexxdecxoct coutnameendl; x=0;k-) . . 以上的写法在C程序中都是错误的 但在C+程序中都是正确的。 程序中都是错误的, 程序中都是正确的。 以上的写法在 程序中都是错误的,但在 程序中都是正确的 5 2.3.4 结构、联合和枚举名可直接作为类型名 结构、 定义枚举类型名: 定义枚举类型名: 枚举类型名 enum bool FALSE, TRUE; 定义结构枚举类型名 结构枚举类型名: 定义结构枚举类型名: Struct student int sno; char *sneme; ; C语言中定义枚举类型变量: enum bool done; 语言中定义枚举类型变量: 语言中定义枚举类型变量 定义结构类型变量 结构类型变量: 定义结构类型变量: struct student s1, s2; C+语言中定义枚举类型变量: bool done; 语言中定义枚举类型变量: 语言中定义枚举类型变量 定义结构类型变量 结构类型变量: 定义结构类型变量: student s1, s2; 6 2.3.5 const修饰符 修饰符 #define LIMIT 100 是一个标志, 这里 LIMIT 是一个标志,代表 100 const int LIMIT=100; 是一个常量名,在内存有空间放了100,因此有地址, 这里 LIMIT 是一个常量名,在内存有空间放了 ,因此有地址, 可以用指针指向这空间,但不能修改它。 可以用指针指向这空间,但不能修改它。 int i=100; 是一个变量名,在内存有空间放了100,因此有地址,可以 这里 i 是一个变量名,在内存有空间放了 ,因此有地址, 用指针指向这空间,且可以改放别的整数。 用指针指向这空间,且可以改放别的整数。 (1) 可以用一个指向常量的指针变量指向常量: 可以用一个指向常量的指针变量指向常量: a const char *name=“chen”; nam 常量 X chen n name3=a; /错误 错误 e name=“zhang”;/正确 正确 zhang 常量 (2)指针常量 指针常量 X char *const name=“chen”; nam name3=a; /正确 正确 chen a n a e 常量 name=“zhang”; /错误 错误 zhang (3) const char *const name =“chen”; 7 /例2.5 例 #include main( ) int a=1; #define T1 a+a #define T2 T1-T1 coutT2 is T2endl; a+ T2 T1-T1 a+ return 0; a a cout“T2 is “ main( ) int a=1; const T1=a+a; const T2=T1-T1; coutT2 is T2endl; return 0; 8 2.3.6 内置函数 /例2.7 例 float circle(float r) #include int main( ) 3次 return 3.1416*r*r; 次 for(int i=1;i=3;i+) coutr= int main( ) 代码嵌入 return 3.1416*r*r; for(int i=1;i=3;i+) coutr= #define doub(x) x*2 int main( ) for(int i=1;i=3;i+) cout inline int doub(int x) return x*2; int main( ) for(int i=1;i=3;i+) cout void write(char *s); /函数原型或叫函数声明 函数原型或叫函数声明 void main( ) write(Hello, world!); void write(char *s)无分号 无分号 cout 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; cout int avar; void main( ) int avar; avar=25; /局部变量 局部变量avar 局部变量 :avar=10; /全局变量 全局变量avar 全局变量 coutlocal avar = void main( ) /定义一个整型指针变量 定义一个整型指针变量p int *p; 定义一个整型指针变量 p=new int; /动态分配一个整型存储区 并把首地址赋给 动态分配一个整型存储区,并把首地址赋给 动态分配一个整型存储区 并把首地址赋给p *p=10; cout*pendl; delete p; /释放 指的空间 撤消指针 释放p指的空间 撤消指针p 释放 指的空间,撤消指针 new 和 delete 的优点: 的优点: 18 (1)new可以自动计算所要分配内存的类型的大小,而不必用 可以自动计算所要分配内存的类型的大小, 可以自动计算所要分配内存的类型的大小 而不必用sizeof 来计算。 来计算。 (2)new能够自动返回正确的指针类型,而不必进行类型转换。 能够自动返回正确的指针类型,而不必进行类型转换。 能够自动返回正确的指针类型 (3)可以用 可以用new将分配的对象初始化。 将分配的对象初始化。 可以用 将分配的对象初始化 (4)new 和 delete 都可以被重载,允许建立自定义的分配系统。 都可以被重载,允许建立自定义的分配系统。 说明: 说明: (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.17 例 #include p NULL void main( ) int *p; p=new int; if(!p) /若分配内存失败 若分配内存失败 coutallocation failuren; return ; *p=20; cout*pendl; delete p; (5) 用new分配的空间,使用结束后应用 分配的空间, 显式地释放。 分配的空间 使用结束后应用delete显式地释放。 显式地释放 20 2.3.14 引用 引用可为变量起别名,主要有变量的引用、函数參数的引用、 引用可为变量起别名,主要有变量的引用、函数參数的引用、函数 返回值的引用。 返回值的引用。 1.引用变量 数据类型 &别名 已定义的变量名; 别名=已定义的变量名 引用变量 别名 已定义的变量名; /*例2.18 例 #include void main( ) int i; int &j=i; / i 又叫 j i i=30; j couti= void main( ) int i=15; /整型变量 整型变量i 整型变量 i int *iptr=&i; /iptr指向 指向i 指向 iptr int &rptr=i; /rptr引用 引用i 引用 rptr couti is a void swap(int *m, int *n) m &a int temp; temp=*m; *m=*n; b *n=temp; n &b void main( ) int a=5,b=10; couta= void swap(int &m, int &n) int temp; temp=m; m=n; n=temp; main( ) int a=5,b=10; couta= int a=1,3,5,7,9; int &index(int); /声明返回引用的函数 声明返回引用的函数 void main( ) index(2)=25; /将a2重新赋值为 重新赋值为25 将 重新赋值为 cout int &max(int &num1, int &num2); int &min(int &num1, int &num2); main( ) int num1, num2; coutnum1; coutnum2; max(num1,num2)=0; coutn把大的数置成 0 后, 这两个数是 这两个数是:; 把大的数置成 coutnnum1 和 num2n; coutn再一次输入二个数 再一次输入二个数:n; 再一次输入二个数 coutnum1; coutnum2; 27 min(num1,num2)=0; coutn把小的数置成 0 后, 这两个数是 这两个数是:; 把小的数置成 coutnnum1 和 num2num2)?num1:num2; int &min(int &num1, int &num2) /两数中找小数 两数中找小数 return (num1num2)?num1:num2; 运行结果: 运行结果: 输入第一个数: 输入第一个数 45 输入第二个数: 输入第二个数 78 这两个数是: 把大的数置成 0 后, 这两个数是 45 和 0 再一次输入二个数: 再一次输入二个数 输入第一个数: 输入第一个数 13 输入第二个数: 输入第二个数 56 这两个数是: 把小的数置成 0 后, 这两个数是 0 和 56 28 2.3.15 void 指针 void 型指针是一通用型指针,可指任何类型: 型指针是一通用型指针,可指任何类型: void pa; /错误,不能声明 错误, 错误 不能声明void类型的变量 类型的变量 void *pa; /正确,可以声明 正确, 正确 可以声明void类型的指针 类型的指针 int i=456; char c=a; pc=&i; pc=&c; 例2.24 #include void main() void *pc; int i=456; char c=a; pc=&i; cout*(int*)pcendl; pc=&c; cout*(char*)pcendl; 以下部分是C语言复习参考 以下部分是 语言复习参考 2.4 存储类 变量名表列; 存储类 类型修饰符 类型 变量名表列 存储类 auto static extern register 类型修饰符 const volatile 2.4.1 自动变量和寄存器变量 2.4.2 静态变量 2.4.3 外部变量 29 2.5 基本运算符和表达式 2.5.1 关系运算符 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( ) int a,b,c; int sum(int, int); /先申明 先申明sum()函数 先申明 函数 a=25; b=36; c=sum(a,b); /调用 调用sum()函数 调用 函数 cout c 0 & n0) l=maxj(m,n); s=minb(m,n); printf(%d和%d的最大公约数为 和 的最大公约数为 %dn,m,n,l); printf(%d和%d的最小公倍数为 和 的最小公倍数为 %dn,m,n,s); else printf(输入了负数 输入了负数!n); 输入了负数 return; int maxj(int a, int b) int r,t; if(a #include #include void main() char a255; void convert(char b); printf(请输入一个字符串 n); 请输入一个字符串: 请输入一个字符串 gets(a); convert(a); printf(该字符串反序为 n); 该字符串反序为: 该字符串反序为 puts(a); return; a0 a1 a a b c b b0 b1 void convert(char b) 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 a254 d e f 0 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,b,c:n); 请输入一元二次方程的三个系数 scanf(%f,%f,%f,&a,&b,&c); if(a=1e-6) printf(不是一元二次方程 不是一元二次方程!n); 不是一元二次方程 else printf(方程 (%4.1f)x*x+(%4.1f)x+(%4.1f)=0n,a,b,c); 方程 d=b*b-4*a*c; if (d0) root0(a,b,c,d,x); printf(由于 由于b*b-4*a*c0 因此有二个实根 因此有二个实根:n); 由于 printf(x1 = %f n,x1); printf(x2 = %f n,x2); return; void root0(float a, float b, float c, float d,float x) x0=-b/(2*a); x1=sqrt(-d)/(2*a); void root1(float a, float b, float c,float x) x0=x1=-b/(2*a); 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; 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 指针 指针变量名; 定义 类型 *指针变量名 指针变量名 2.11.1 使用指针 取地址运算符 & 取内容运算符 * 位移取值 #include void main( ) int a10=2,4,6,8,10; for(int *p=a;pa+10;p+) cout p+0 endl; 位移+0 这里 p+0 位移 ,等价于 *p p=a; p+2 即 *(p+2) p-i 即 *(p-i) 39 2.11.2 指针运算 1. 赋值 int x,*px,*q; px=&x; q=px; 表示 q 和 px 同指一个地方 跟着 指) 同指一个地方(q跟着 跟着px指 2. 比较 px= =q q!=px 判断 q 和 px 是否同指一个地方 pq 判断 p 和 q 指在数组元素的前后 3. 移动指针 p=p+3; + - 运算 y=*px+; /y=*(px+); y=*+px; /y=*(+px); y=+*px; /y=+(*px); y=(*px)+; 40 2.11.3 指针和数组 1. 指向一维数组的指针 int a4, *p; p=a; 或 p=&a0; 即 p 指向 a0; 2. 指针数组 许多个指针变量在一起都可用来指向整数 int *pa2; char *pc57; 例#include void main( ) int a23=2,4,6,8,10,12; int *pa2; /有二个指针 pa0 和 pa1 有二个指针 pa0=a0; pa1=a1; for (int i=0; i2; i+) for(int j=0; j3; j+,pai+) cout a 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+i)endl; a+; for(int i=0;i5;i+) cout i : *(*a+i)num,&p1-score); %d,%f”,&p1 scanf( %d,%f ,&p1-num,&p1-score); p1p1-num=0 head NULL head=p1; ; p1=(struct student * )malloc(LEN); )malloc(LEN); scanf(“%d,%f ,&p1 num,&p1scanf( %d,%f”,&p1-num,&p1-score); %d,%f ,&p1(n=2) p2-next=p1; p2num score next 0 p 1 47 p2=p1; p2=p1; n= 2 1 0 head 01 03 07 08 11 NULL p head p p NULL 01 03 07 08 11 p2 p1 head p p 2 1 03 p 1 08 11 NULL 01 p2 05 p 1 p 0 48 2.11.4 引用 引用可为变量起别名, 引用可为变量起别名,它主要用作函数参数以及函数的返回类 有参数引用和返回值引用。 型。有参数引用和返回值引用。 1. 引用说明 int num=50; int& ref=num; 表示放整数 50 的内存空间 可叫 num,又可叫 ref , 引用实质上是为另一个变量建立别名。 引用实质上是为另一个变量建立别名。 2. 引用参数 传引用 引用参数(传引用 传引用) 49 3. 返回引用的函数 当一个函数的返回值需重新赋值的时候, 当一个函数的返回值需重新赋值的时候,我们也可对 返回值进行引用,这时函数可出现在赋值号的左边。 返回值进行引用,这时函数可出现在赋值号的左边。 这种函数称为返回引用的函数。 这种函数称为返回引用的函数。 类型& 函数名(参数 参数) 形式 类型 函数名 参数 #include int a=2,4,6,8,10,12; int& index(int i); void main( ) index(3)=16; /index(3) 即返回值 即返回值ai,i=3,a3改为 改为16 改为 cout main() int e(int i) int r1=e(3); return i+1; int &r2=e(4); int r3=f(); int &f() int &r4=f(); int i=1; int a=0,b=0,c=0,d; return +i; d=g(4); a+=g(g(c); b+=g(e(3); int g(int &i) return 1; i=i+1; return i; 51 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=&i; vp=&i; cp=&c; vp=&c; fp=&f; vp=&f; vp=ip; vp=fp; vp=cp; ip=vp; cp=vp; fp=vp; /错误 错误 52 2.12 类型定义 typedef 类型名 标识符 2.13 指针和动态内存分配 C+的基本操作符 new 和 delete 的基本操作符 分配内存: 指针变量名=new 类型 大小 类型大小 大小; 分配内存 指针变量名 int *ip; ip=new int5; 释放内存 delete ip; 53 2.14 指针和函数 指针变量可以作函数的参数,指针也可作函数的返回值, 指针变量可以作函数的参数,指针也可作函数的返回值,还有一 种指针可以用来指向函数 2.14.1 指针作为函数的参数 函数中的形参,可以是指针变量。 函数中的形参,可以是指针变量。这时实参可以是地址或指针来 调用它 【例】 指针作为参数的例子 #include void input(int *s, int n) void mai
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《基于数据实时流处理的输液监控管理系统》
- 《2型糖尿病颈动脉内膜-中层增厚患者血清betatrophin水平的变化及意义》
- 2024年朔州小车客运从业资格证考试
- 2024年东营客运从业资格证考试试题
- 2024年温州道路旅客运输驾驶员从业资格考试
- 2024年长沙客运驾驶员考试题
- 2024年湖北客运从业资格证需要什么材料
- 2024年沈阳客运员初级理论知识试卷及答案
- 2023届新高考化学选考一轮总复习学案-热点9 新型化学电源
- 2024年渭南客运资格证考试题目
- 2024年艾滋病知识题库
- 2024年安徽龙亢控股集团限公司公开招聘人员13人(高频重点提升专题训练)共500题附带答案详解
- 湖南美术出版社六年级上册《书法练习指导》表格教案
- 投标项目进度计划
- 中医脑病科缺血性中风(脑梗死恢复期)中医诊疗方案临床疗效分析总结
- 部编版语文二年级上册《语文园地三我喜欢的玩具》(教案)
- 软件开发项目验收方案
- 岗位整合整治与人员优化配置实施细则
- 康复治疗技术的职业规划课件
- 蜜雪冰城营销案例分析总结
- 交换机CPU使用率过高的原因分析及探讨
评论
0/150
提交评论