资源描述
C语言基础3.1、C+语言的特点3.2、简单的C+程序3.3、C+编程简介 3.4、C+基本数据类型 3.5、表达式3.6、C+基本语句 3.7、函数3.8、const修饰符 第三章 C语言基础3.9、动态内存分配运算符new和delete 3.10、作用域运算符3.11、引用3.12、C+针对C语言的改进3.13、综合训练 3.1、C+语言的特点(1) C+保持与C兼容: C+=C+面向对象(2) 用C+编写的程序可读性更好,代码的结构更加合理 (3) 生成的代码的质量高,运行速度快(5) 支持面向对象的机制,可以方便的构造出模拟现实问题的实体和操作(4) 从开发时间、费用到软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高 A、 C+编译器可编译C程序;B、C语言的库函数和实用软件可以用于C+中 3.2、简单的C程序1. #include 2. int add(int a,int b);3. int main()4. 5. int x,y,sum;6. cout“Enter two numbers:”x; /从键盘输入变量x的值8. ciny; /从键盘输入变量y的值9. sum=add(x,y); /调用函数add,将得到的值赋给变量sum10. cout“The sum is:”sumxy; 3.3、C+编程简介 头文件主函数main()注释新的输入输出语句C+源程序的组成结构: 3.3、C+编程简介现到类库中查找,再到当前工程所在目录查找,最后到默认路径查找与 “”的区别: “” 现到当前工程所在目录查找,再到类库中查找,最后到默认路径查找与 “”在用户定义了与头文件同名的文件时需要注意 3.3、C+编程简介/符号的注释范围是从/开始到这一行结束(也就是从/符号到换行符号之间的范围)注释: /* .*/与/均可使用,但没有/符号方便 3.3、C+编程简介试比较下面两种输入输出:/*c语言的输入输出*/int a ,b ;scanf(“%d”, /输入变量aprintf(“%d”, b ) ; /输出变量b/*c+语言的输入输出*/int a ,b ; cina ; /输入变量acoutb); 4、布尔类型 :用于表示真、假的数据类型布尔类型分配1个字节的空间特殊的存放方式,使得表数范围、精度提高仅有true(真)和false(假)两个取值 3.4、C+基本数据类型例如错误的声明:void a ;5、空类型 :空类型的作用:(1)一个是描述一个函数没有返回值,例如: void f(int x) ; 没有空类型的对象或数据存在,也就是说空类型是不用作变量的类型(2)描述一个指向不明类型对象的指针,例如: void *p ; 3.4、C+基本数据类型6、用户自定义类型 :用 户 定 义 数 据 类 型数组指针结构体联合类枚举 3.4、C+基本数据类型enum colorred, yellow, blue; /定义类型color cl=red; /定义变量7、枚举 :color cl=black; /错误!当一个变量只有几个取值时使用枚举类型,比如:枚举变量的值在内存中以整型值存放比如:red为0, yellow为1, blue为2在C+中定义变量时,结构名、联合名或枚举名前的struct、union或enum可省略 3.5、表达式算数表达式:+ - * / % + -赋值表达式:=关系表达式 := = = !=逻辑表达式:! 函数定义1、简介函数参数函数调用 3.7、函数2、C的函数重载:当两个或者两个以上的函数共用一个函数名时,称为函数重载。被重载的函数称为重载函数 举例:/重载的函数类型声明int do_stuff(const int);int do_stuff(float);float do_stuff(const float,float);/重载函数1-重载整型变量int do_stuff(const int in_value) return in_value*in_value; 3.7、函数/重载函数2重载浮点型变量 int do_stuff(float in_value) return (int)(3.0*in_value);/重载函数3重载变量个数,2个浮点型变量float do_stuff(const float in1,float in2) return (in1+in2)/2.0;编译器会根据实参的类型来自动确定调用哪个重载函数 3.7、函数3、C中的内置函数(内联函数)每当程序中出现对该函数的调用时,C编译器使用函数体中的代码替代函数调用表达式,这样能加快代码的执行,减少普通函数调用的开销。在函数说明前冠以关键字“inline”的函数。C的内置函数具有与C中的宏定义#define相同的作用和相似的机理,但是消除了#define的不安全因素 3.7、函数举例#include /定义一个类Aclass A int inttest; public:A(); void show();void increat(int incr_num=2) inttest+=incr_num; ; /类内部定义的函数默/认为内联函数如果没有实参则默认为2 3.7、函数A:A() /构造函数 inttest=1000;cout“OK?”endl; inline void A:show() /通过inline定义的内联函数 cout“nittest=”inttestendl; /主函数void main() A test; /对象声明 test.show(); /向A发送消息test.increat(1234); /调用类内部定义的内联函数 test.show(); 3.8、const修饰符 例如: const int START=3; /定义整型常量START const int STOP=9; /定义整型常量STOP在程序中START和STOP的值都不允许改变C+引入const修饰符(关键字):用于修饰常量,使用const修饰的对象在运行过程中不允许改变。 3.8、const修饰符使用const修饰符注意事项:(1) 常量必须在声明时被初始化。比如:const int a;/错误,没有初始化(2) 注意分清常量指针和指向常量的指针:比如常量指针 :指向的数据可以改变,但是所指的位置是不能变的;char *const name ”chen”; char *name1=“Hi!”; name=name1; /不允许!name1=H; /允许! c h e n 0name H i 0name1 3.8、const修饰符指向常量的指针:所指的对象是一个常量,不允许改变, 但可以指向其他的对象const char *name = “chen”;char *name1=“Hi!”; name=name1; /允许!name2=H; /不允许! 指向常量的常指针:所指的对象和所指的位置(即指针)都不 能改变const char *const name = “chen”; 3.8、const修饰符(3) 如果const定义的是一个整型常量,关键字int可以省略例如:const int LIMIT100;const LIMIT100;这两个语句是一样的(4) const的作用与#define相似,但它消除了#define的不安全性,建议在可能的情况下,用const代替#define 3.8、const修饰符举例:#include /C+输入输出流头文件void print_it(const int data_value) ; /const修饰函数参数main() const int START=3; /定义整型常量STARTconst int STOP=9; /定义整型常量STOPint index; for(index=START; indexSTOP; index+) print_it(index);return 0;void print_it(const int data_value) data_value=12; /编译出错 cout“The value of the index is” data_valuen; / 3.9、动态内存分配运算符new和delete 1、new和delete的作用进行内存的分配和释放例如:int *point1;char *point2; point1=new int; /初始化指针point1point2=new char; /重新初始化指针point2delete point1; /销毁指针point1,释放point1所指 /变量的内存空间delete point2; /释放指针point2与C中的malloc()和free()类似,但更好、更简单 注意:申请的内存使用完后要及时的释放,否则可能会出问题 3.9、动态内存分配运算符new和delete 2、new和delete的使用说明(1) new可以自动计算所要分配内存类型的大小,而不必要使用sizeof()(2) new可以自动返回正确的指针类型,不需要进行指针类型转换(3) 使用new可以将分配的对象初始化。例如:int *p new int(99);struct student *p1;p1 = (struct student *) malloc(sizeof (struct student);(4) 使用new可以为数组动态分配内存空间,这时需要在类型名后面加上缀上数组的大小。例如: int *pi=new int10;括号不同 3.9、动态内存分配运算符new和delete 关于数组使用new和delete的注意:对于数组,在用delete释放时要在前面用括号即,如果在new时使用括号,则delete时也要使用括号string *stringptr2 = new string100;delete stringptr2; / 删除数组的分配空间野指针:所指空间被释放后的指针,应置为NULL 3.9、动态内存分配运算符new和delete 举例:#include /C+输入输出流头文件main() /主程序 int index, *point; /声明变量 point= /初始化指针point *point=77; /改变指针point所指的变量的值 point=new int; /重新初始化指针point *point=999; coutThe value are index *point /输出结果 n; delete point; /销毁指针point1 char *c_point; /声明指向字符的指针 3.9、动态内存分配运算符new和delete c_point=new char37; /初始化指针c_point delete c_point; /释放指c_point c_point=new charsizeof(int)+133; /重新初始化指 /针c_point delete c_point; /释放指针c_point return 0;定义什么?多大? 3.10、作用域运算符:1、作用域运算符:的作用(1) 使用类的静态成员:classname:membername(2) 解除被隐藏全局函数或变量#include int num=1; /全局变量main() int num=2; /局部变量coutnumendl; /显示局部变量cout:numendl; /显示全局变量 3.11、引用(reference)1、引用的作用定义和语法定义:为目标变量其别名,使之与目标变量地址关联 简化指针的使用语法: type /声明一个整型变量int /声明一个引用j指向整型变量Ij=4; 不是取地址符i和j具有相同地址空间, /声明一个整型变量 int /声明一个引用j指向整型变量i int *k= /声明了指向i的指针变量k/改变变量i的值 i+; /通过变量i自身加1改变变量的值 j+; /通过引用改变变量的值 (*k)+; /通过指针改变变量的值 cout=0; k-) 程序代码段; /在这里,变量K只在for循环域中有效。 3.12、C+针对C语言的改进一般原则:在大函数中,在最靠近使用变量的位置说明变量较为合理在较短的函数中,局部变量集中在函数的开始处说明比较好在for循环语句中,一般在for语句中说明循环变量 3.12、C+针对C语言的改进2、无名联合C+中的一种特殊联合,定义的联合没有类型名举例:union int i;float f;变量i和f具有相同的存储地址可直接引用其数据项,如:i20; /使用变量i 3.12、C+针对C语言的改进3、强制类型转换C+引入新形式的强制类型转换C语言中: int i=10;float x=(float)i;C+中: int i=10;float x=float(i); /类型名像函数名一样使用两种方法在C+都能够使用,但推荐使用后面的一种形式 本章小结不同的头文件不同的注释形式不同的输入输出语句增加了布尔类型 函数重载、内联函数增加了const修饰符不同的动态内存分配运算符new和delete 作用域运算符:引用 本章小结 引用是C+中独有的特性,引用的目的主要用在函数的参数传递中,解决了大对象传递效率和空间不如意的问题。相比指针,它有表达清晰的优点,不允许声明引用数组,返回引用的时候,要注意局部对象返回的危险。 为了适应C引入的类的概念,类对象的建立是分配空间,构造结构和初始化三部分,因此引入了new和delete进行堆空间的分配和释放。 综合训练题目:编写C+风格的程序,实现求m,n两个正整数的最大公约数和最小公倍数分析:只要求出最大公约数即可,因为: 最小公倍数=mn最大公约数最大公约数的计算可用欧几里德算法(也称辗转相除法):(1)求两个数(m、n)相除的余数r(r=m%n mn) ;(2)当余数r不为零时,m取n的值,n取r的值,返回(1)(3)输出最后的除数n,就是最大公约数m=9、n=6r=m%n=3 m=6, n=3 r=m%n=6%3=0 n=3 综合训练#include /头文件,包含C+特有输入输出流int fun(int c,int d); /函数fun用来求最大公约数void main() /主函数 int m,n,e,d; /定义一些用到的一些变量 coutm; /输入m coutendl; /输出换行 coutn; /输入n coutendl; /输出换行 e=fun(m,n); /调用函数fun求最大公约数 d=m*n/e; /利用最大公约数求最小公倍数 cout“ 最大公约数为:”eendl; /输出最大公约数 cout 最小公倍数为:dendl; /输出最小公倍数 综合训练int fun(int c, int d) /函数fun的定义 int r; r=c%d; /以下几行都是辗转相除法的步骤 while(r!=0) c=d; d=r; r=c%d; return d; 综合训练总结:(1)输入输出符号cin和cout非常方便, 推荐使用(2)在C+中经常先声明所有要用到的函数,在主函数后一个一个定义这些函数,这样做可以让程序容易被读懂(3)将各种功能封装到函数中去,在主函数中对函数调用。这样主函数只出现输入输出结构等语句,显得干净利落。(4)在输入一个数前加一句提示语句 作业题 11、15、18、19
展开阅读全文