1.23k likes | 1.51k Views
C++ 程序设计. C++ 语言: 教材 : 吴乃陵,况迎辉 . C++ 程序设计 ( 第二版 ) . 高等教育出版社, 2006 年 1 月 . 参考教材: Stanley B Lippman , J o s é e L a j o i e 著 , 李师贤 蒋爱军等 译 . 深入 C++ 系列: C++ Primer 中文版(第 4 版) , 中国电力出版社 , 2002 年 1 月. 1. 主讲教师:李长河 院 系:计算机学院 Email : changhe.lw@gmail.com
E N D
C++程序设计 • C++ 语言: • 教材: 吴乃陵,况迎辉. C++程序设计(第二版). 高等教育出版社,2006年1月. • 参考教材:Stanley B Lippman , J o s é e L a j o i e 著,李师贤 蒋爱军等 译. 深入C++系列:C++ Primer中文版(第4版),中国电力出版社, 2002年1月. 1
主讲教师:李长河 院 系:计算机学院 Email:changhe.lw@gmail.com 课程主页:http://cs.cug.edu.cn/teacherweb/lichanghe/pages/teachingRes/Cplusplus.html
听课要求: 在预习的基础上,听课为主,笔记为辅,课后弄懂课件和 教材中的程序(会分析,能流利写出) 课下:1.交流和探讨是学习的重要方法,对C++以动手为基础的课程尤为重要。 2. 学会课外找资料(上网或翻阅书籍)解决问题 3. 每个星期保证独立完成2-3个程序的上机时间 4. 养成查看英文资料的习惯 实验安排:4次,每次4个课时,时间地点待定 考核方式: 总成绩=作业*5%+上机*40%+考勤*5%+考试*50% 不会编写程序==一次无意义的理论学习==没有学习C++
第一章 C++基础知识 本章将简要介绍C++中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。 4
第一章 C++基础知识 1.1 C++语言概述 1.2 一个C++程序实例 1.3 C++的词法单位 1.4 C++ 中的数据类型 1.5 常量和变量 1.6 运算符和表达式 1.7 数组与字符数组 1.8 简单的输入输出 5 ok
种类: 机器语言 低级语言 汇编语言 (面向计算机) BASIC 入门语言 F77科学计算 高级语言Foxpro 数据库管理 (面向问题 ) C/C++ 多用途 1.1 C++语言概述 加法:100000 加法:ADD 计算机语言 …… 加法:+ ……
1.2 一个C++程序实例 已知圆柱体的地面半径和高分别是6cm和12cm,求圆柱体体积。 数学解法: 解:设半径为r,高为h,体积为v。 则r=6cm,h=12cm, 答:圆柱体体积为1356.48cm3。 【例1.1】 一个简单的C++程序。
C++程序解法: // 单行注释:计算圆柱体体积程序 volume.cpp #include <iostream> /*多行注释:C++标准输入输出流类库, 用于std::cin&std::cout两个IO(输入和输出)对象*/ int main(){ double r,h,v; // 定义三个变量,存储半径、高和体积的值 std::cout<<"Input r and h:"; //屏幕显示 Input r and h: std::cin>>r>>h; //从键盘输入6 12 并按回车结束输入 v=3.14*r*r*h; std::cout<<"the volume is "<<v<<" cbccm"<<std::endl; return 0; }
函数名 函数头部 int main() { ...... return 0; } 函数定义 函数体 函数结束语句
1.2 一个C++程序实例 注释 程序体 由若干函数组成,其中有且仅有一个主函数main(),这是程序的执行入口。 编译预处理指令 【例1.2】 一个简单的C++程序。 # include <iostream> using namespace std; // 使用标准库名字 int max(int i, int j) { //A if (i>=j) return i; else return j; } int main() { //B cout<<″输入i,j:″; //显示提示信息 int i, j; //定义变量 cin>>i>>j; //从键盘上输入变量值 cout<<″max number is:″<<max(i, j) <<endl; //输出提示和结果 return 0; } 程序组成: 10
C++程序小结 1.注释 // 和/* */:方便阅读,帮助理解代码的含义 2. include指令:使用标准库 3. main() 函数: 程序的入口 4. 花括号{}: 基本编译单元(体) 5. C++语句: 由分号隔开的程序语句 5 . return: 函数返回值
补充知识 C++程序的编译、调试和执行步骤 1.C++程序工程的创建(windows系统 Visual Studio 2012)(机房VS6.0) 2. 添加空的源文件(*.cpp) 如main.cpp 3. 编写源代码, 每行只写具有一个;号的语句 4. 编译,编译器会指出具体的语法错误 5. 改正语法错误 6. 调试程序(排除逻辑错误) 7. 运行程序 编译和执行过程中的几个常用按键 F7:编译源程序 F10:单步执行一行代码 F11:进入待执行的函数 F9:添加断点 F5: 执行程序 监视变量: 在watch窗口(最多有4个watch窗口),添加想要监视的变量,观察每一步执行时,其值的改变情况
作业1 • 1. 课程主页,实验一 Visual C++集成开发环境入门 • 2. 仿照实验一,完成ppt中例1.1和1.2程序的调试(监视窗口中添加变量,观察和分析值的变化)和运行,其中1.2要用两组不同的值进行测试 • 3. 完成之后,把例1.2的解决过程写到作业中, 包括工程的创建过程、源代码的书写、调试过程和最终的运行结果 • Deadline:下次上课
1.3 C++的词法单位 1.3.1 C++的字符集 1.3.2 关键字 1.3.3 标识符(ID,identifier) ok 1.3.4 标点符号 14
1.3.1 C++的字符集 常用字符集: ASCII码字符集(见课本附录一)是计算机中的常用字符集。它包括英文字母及阿拉伯数字等128个字符,存储一个ASCII码占用一个字节单元。 了解:Unicode字符集对各类字符进行统一的双字节编码。它包括了世界上多种语言的基本字符,最多可容纳65536个字符。 ASCII码字符集,汉子国标码字符集都是它的子集。 ok 15
补充知识 信息存储和度量的基本单位 • 位(bit,b):度量数据的最小单位,表示一位二进制信息。 • 字节(byte,B):由八位二进制数字组成(1 byte = 8 bit)。 1001 0101 高位 低位 同十进制 1001 0101(二进制)=1*2^0+0*2^1+1*2^2+0*2^3+1*2^4+1*2^7=149(十进制)
C++的字符集 C++语言基本字符: 17
1.3.2 关 键 字 关键字(keyword): 又称保留字。是由系统定义的具有特定含义的英文单词。关键字不能另作它用(鼠标、键盘)。 C++区分大小写,关键字全部由小写字母组成。标准C++(ISO14882)定义了74个关键字,具体的C++编译器会做一些增删。常用关键字及分类见表2.1。 ok 18
关 键 字 运算符及逻辑值 break case catch continue default do else for goto if return switch throw try while 语句与标号 asm explicit namespace operator template this typedef typename using virtual friend private protected public delete false new sizeoftrue auto extern inline register static 存储类型说明符 bool char wchar_t class const double enum float int long short signed struct union unsigned void 数据类型说明符与修饰符 其它说明符 访问说明符 红色本章重点 表2-1 C++常用关键字及分类 int main(){ //蓝色为C++关键字 double r,h,v; std::cout<<"Input r and h:"; std::cin>>r>>h; v=3.14*r*r*h; std::cout<<"the volume is "<<v<<" cbccm"<<std::endl; return 0; } ok 19
关 键 字 20
1.3.3 标识符 小提示: 1)变量名一般用小写字母,如index,而不是Index或INDEX 2)应使用能帮助记忆的名字,如salary 3)有多个单词组成时,单词之间可用下划线或每个内嵌单词的第一个字母大写,如student_name或studentName,而不是 studentname 标识符(Identifier,ID ): 是程序员定义的“单词”,用来给变量、常量、数据类型、函数(?)等命名。 int main(){ // 蓝色C++关键字 double r,h,v; double pi=3.14; std::cout<<"Input r and h:";//绿色为C++资源标示符 std::cin>>r>>h; v=pi*r*r*h; std::cout<<"the volume is "<<v<<" cbccm"<<std::endl; return 0; } 用户自定义标示符:不能使用关键字和C++提供的资源标示符,包括函数名、类名和对象名 合法标识符由字母或下划线开始,由字母、数字、下划线组成,其有效长度为1-31个字符,长度超过31个字符者只识别前31个字符。 建议使用有一定含义的英文单词作标识符,以提高可读性;另外尽量不用下划线或双下划线打头,以免与系统定义的关键字冲突。 ok 21
标识符 例: 判断下面哪些是合法的标识符: MyFile 94Salary Salary 94 Salary94 amount $amount void f3.5 Num_of_Student 22
1.3.4 标点符号 标点符号: #、( )、{}、 ,、 :、 ;、"、'等。 int main(){ double r,h,v; double pi=3.14; std::cout<<"Input r and h:"; std::cin>>r>>h; v=pi*r*r*h; std::cout<<"the volume is "<<v<<" cbccm"<<std::endl; return 0; } 标点符号的作用: 有一定的语法意义。如字符和字符串常量分别用' '和 " "引起来。 'a',"hello" 对语法符号起分隔作用。如 ;等 23
1.4 C++中的数据类型 整 型 int 红色本章重点 字符型 char 内置数据类型 实 型 float 双精度型 double 实型 逻辑型 bool C++的数据类型 无值型 void 数组 type [ ] 指针 type * 结构 struct 联合 union 枚举 enum 类 class 其他数据类型 图2-1 C++的数据结构 四要素: 1.名字 2.内存空间 3.范围 4.操作 ok 24
内置数据类型: C++基本数据类型称为内置数据(Build-In)类型,内置数据类型不仅定义了数据类型,还定义了常用操作。本节仅介绍各种基本数据类型的定义,常用操作将在后面介绍。 整型,integer(int,4B^):用来存放整数,整数(有符号的整数在内存中存放的是它的补码,无符号数没有符号位,存放的就是原码)。 注意课本表述不准确: C++为强类型语言,所有数据的使用严格遵从“先定义(非说明或声明)后使用”的原则,以便编译器进行编译(检查语法,分配内存空间)。 25
补充知识 原码、反码和补码 1.原码 • 符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制: [+1]原 = 0000 0001[-1]原 = 1000 0001 • 第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是: [1111 1111 , 0111 1111]即[-127 , 127]
补充知识 2. 反码 • 正数的反码是其本身 • 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反. [+1] = [00000001]原 = [00000001]反 [-1] = [10000001]原 = [11111110]反
补充知识 3. 补码 • 正数的补码就是其本身 • 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1) [+1]= [00000001]原 = [00000001]反 = [00000001]补 [-1] = [10000001]原 = [11111110]反 = [11111111]补
例:int i=-10; 1 1 0 1 1 0 … … … 1 0 1 0 1 1 1 1 0 0 1 1 0 1 0 1 1 0 0 1 1 1 0 0 补充知识 10/2=5 余数0 5/2=2 余数1 2/2=1 余数0 1/2= 0 余数1 10的二进制:1010 10的原码 取反 再加1,得10的补码
字符型(char,1B):用来保存字符,存储的是该字符的ASCII码,占用一个字节。如大写字母A的ASCII码为65,在对应的一个字节中存放的就是65。字符型数据从本质上说也是整数,可以是任何一个8位二进制整数。字符型(char,1B):用来保存字符,存储的是该字符的ASCII码,占用一个字节。如大写字母A的ASCII码为65,在对应的一个字节中存放的就是65。字符型数据从本质上说也是整数,可以是任何一个8位二进制整数。 实型:单精度(float,4B)和双精度型(double,8B)都用来存放实数,两者表示的实数的范围和精度不同。实数在内存中以规范化的浮点数存放,包括尾数、数符和阶码。 30
逻辑型(bool):也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++6.0中为1个字节。布尔型在运算中可以和整型相互转化,false对应为0,true对应为1或非0逻辑型(bool):也称布尔型,其取值为true(逻辑真)和false(逻辑假),存储字节数在不同编译系统中可能有所不同,VC++6.0中为1个字节。布尔型在运算中可以和整型相互转化,false对应为0,true对应为1或非0 无值型(void):主要用来说明函数的返回值类型和空指针,将在函数一章中具体介绍。 基本数据类型还可以加上一些修饰词,包括:signed(有符号)、unsigned(无符号)、long(长)、short(短)。参见下表: 31
unsigned (int) 占用字节数 取 值 范 围 bool 布尔型 1 true, false (signed) char 有符号字符型 1 -128 127 4 unsiged char 1 0 255 (signed) short (int) 有符号短整型 2 -32768 32767 unsigned short (int) 无符号短整型 2 0 65535 (signed) int (signed) 无符号字符型 无值 名 称 有符号整型 类 型 实型 0 (232-1) (signed) long (int) 有符号长整型 4 -231(231-1) unsigned long (int) 无符号长整型 4 0 (232-1) float 无符号整型 -231(231-1) -1038 1038 double 双精度型 8 -1030810308 long double 长双精度型 8 -1030810308 void 无值型 4 0 4 VC++中所有基本数据类型 ? 32
作业2 • 完成课程主页实验二 3.1, 利用sizeof运算符输出基本数据类型所占的字节数,程序如下(查找资料或课本p19,学习使用sizeof运算符)
1.5 常量和变量 • 在程序中,常量和变量是用来存储数据的; • 常量又分为字面常量、常变量; 1.5.1 变 量 1.5.2 文字常量 ok 1.5.3 常变量 34
1.5.1 变 量 思考:变量的两个要素有什么意义? • 变量/对象,在程序中是指可以改变值的量; • 变量必须用标识符进行标识,称为变量名; • 变量有类型之分,如整型变量、字符变量等; • 任何变量都必须先定义后使用;一是便于编译程序为变量分配空间,二是便于编译时进行语法检查; • 变量使用的第一步,是给变量赋初始值; ok 2 变量初始化值 1 变量说明 35
变量定义 小提示: 把课本中的"说明"改成"定义" 变量定义的一般格式(二要素)为: 类型说明符 变量名1《,变量名2, ,变量名n》; 判断下面变量定义是否合法: 1 int 1a; 2 inti,k; 3 int main; 4 int i;k; 5 int i, 例: int i, j, k;//定义三个整型变量i, j, k float x, y, z;//定义三个单精度实型变量x, y, z char c1, c2;//定义两个字符型变量c1, c2 double dx; //定义一个双精度型变量dx 36
变量初始化 赋初值: 定义变量时即给变量一个值称为变量初始化或给变量赋初值 例如: int a=3, b(4), c=5; float x(3.0); 建议:变量初始化可以避免引用到随机值。 小提示: int ival(4);//直接初始化 效率高,灵活 int ival=4;//复制初始化 效率低,不灵活 37
深入讨论 变量名的本质 内存条 char c='A'; //思考:编译器做了哪些事情? cout<<c<<endl; // 通过变量名找到字符'A'所在的存储单元的首地址,从而获取其值'A' 变量名本质:变量值所在的存储单元的首地址,是和地址的一对一的直接映射 内存 地址 c 'A'
补充知识 定义和声明 • 变量定义(definition): 为变量分配存储空间,初始化。每个变量有且仅有一个定义 • 变量声明(declaration):关键字extern 告诉编译器变量的类型和名字,没有分配存储空间,实质是告诉编译器变量已经在别处定义过。每个变量可以有多次声明。定义即为声明,但声明!=定义 int i; //declares and defines i extern int i; // declares but does not define i 思考: 程序中有如下两个语句是否有问题? int i; extern int i=5; extern int i=5; int i; //error 变量i已经定义过 //error 声明不能赋值
1.5.2 字面值常量 小提示:literal constant 翻译成字面值常量更为合适 • 字面值常量(literal constant):指程序中直接给出的量 • 常量的值在程序执行过程中保持不变;并且存储在程序区,而非数据区; • 根据取值和表示方法的不同,可分为以下几种: 1. 整型常量 2. 实型常量 ok 3. 字符型常量 5.布尔常量: true和false 4. 字符串常量 40
整型常量 • 整型常量表示方法: 十进制表示法 八进制表示法 默认为int类型 十六进制表示法 ok 其他表示法 41
整数的十六进制表示 十六进制以0X(大小写均可)开始,由数字09和字母AF(大小写均可)组成,用来表示一个十六进制数。 例: 0x32A //十六进制数32A,即十进制数810 -0x2fe0 //十六进制数-2fe0,即十进制数-12256 int i=0x30; ok 42
整数的十进制表示方法 十进制表示与我们熟悉的书写方式相同。 例: 15 -24 int i=30; ok 43
整数的八进制表示 八进制表示以数字0开始,由数字07组成,用来表示一个八进制数。 例: 012 //八进制数12,即十进制数10 -0655 //八进制数-655,即十进制数-429 int i=030; ok 44
整数的其他表示方法 长整型常量和无符号整型常量: 长整型常数以 L或 l结尾,无符号常整数以 U或 u结尾,以 U L或 L U(大小写均可)结尾则可表示无符号长整型常数。 例如: -84L //十进制长整数-84 026U //八进制表示的无符号整数26 0X32LU //十六进制表示的无符号长整型数32。 int i=026UL 45
实型常量 • 包含小数点和10的幂的数为实型常量 • 表示方法: (1)一般形式与平时书写形式相同,由数字 0 9和小数点组成。例如: 0.23 -125.76 0.(与0的区别).46 -35.0 (2) 指数形式(也称为科学表示法)表示为尾数乘以10的次方形式,由尾数、E或e和阶数组成。指数形式要求在E或e前面的尾数部分必须有数字,后面的指数部分必须为整数。 例 : 判断下列表示是否合法 123E12 1.43E3.5 46 E4 -.34e-2
字符型常量 字符常量: 用单引号引起来的单个字符。在内存中保存的是字符的ASCII码值。在所有字符中,可显示字符通常就用单引号引起来表示: 'a' //字符a ASCII值为97 '@' //字符@ '4' //字符4 ' ' //空格字符 特殊情况字符,如不可显示的字符等,c++使用转义序列表示方法(详见表1-3,此处略): '\n' //换行 '\\' //字符\ 课下作业: 'b', \142, 和\x62分别代表什么?其ASCII值是多少? 如何输出 "和' ? 47
4. 字符串常量 \0 'a' 'a' 字符串常量与字符型常量的区别: • 字符串常量: • 用双引号引起来的若干个字符。 • 例如: • "I am a Chinese.","123", "a" ," " 字符串常量 "a" 占两个字节,存放'a'和'\0',值为0x6100 字符型常量 'a' 占一个字节,存放'a',值为0x61 48
1.5.3 常变量 • 标识符常量: • 用常量说明符const给字面值常量起的名字(标识符),因为其说明和引用形式很像变量,所以也称常变量; • 例如: • const float PI=3.14159; • const int Number_of_Student=100; • 常变量必须也只能在定义时进行初始化; • 常变量初始化之后,不允许再被赋值; • 常变量必须先定义后使用; • C++建议使用常变量,而不要使用字面值常量。 const int i; //error i=10; //error 49
作业3 • 1. unsigned 和signed 类型有什么区别? • 2. int,long和short类型有什么区别? • 3. 当给16位unsigned short对象赋值100000时,赋的值是多少? • 4.查找资料下列哪些是(如果有)非法的? a).L"who goes with F\145rgus?\012" b)3.14e1L c)"two" L"some" d)1024f e)'\581' f)'\x0H'