1 / 76

Visual C++ 与面向对象程序设计教程

Visual C++ 与面向对象程序设计教程. 第 3 章 基本数据类型 计算机教学实验中心 西安交通大学. 教学目标. C++ 语言的基本数据类型 整型、实型 C++ 的构造类型 数组 C++ 语言的数据(形式) 常数、变量. 学习要求. 掌握常量与变量、整型数与实型数的概念。 掌握字符型数据与字符串型数据的概念以及二者的区别。 掌握各种类型的变量说明及其初始化。 掌握各种数组类型的使用方法 进一步熟悉 C++ 程序的编辑、编译、连接、运行的过程。. 授 课 内 容. 3.1 数据类型 3.2 常量 3.3 变量 3.4 数组

doane
Télécharger la présentation

Visual C++ 与面向对象程序设计教程

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Visual C++与面向对象程序设计教程 第3章 基本数据类型 计算机教学实验中心 西安交通大学

  2. 教学目标 • C++语言的基本数据类型 • 整型、实型 • C++的构造类型 • 数组 • C++语言的数据(形式) • 常数、变量

  3. 学习要求 • 掌握常量与变量、整型数与实型数的概念。 • 掌握字符型数据与字符串型数据的概念以及二者的区别。 • 掌握各种类型的变量说明及其初始化。 • 掌握各种数组类型的使用方法 • 进一步熟悉C++程序的编辑、编译、连接、运行的过程。

  4. 授 课 内 容 • 3.1 数据类型 • 3.2 常量 • 3.3 变量 • 3.4 数组 • 3.5 字符型数组和字符串处理库函数 • 调试技术 • 程序设计举例

  5. 3.1、数据类型 • 计算机能够做许多事情。但是,归根到底计算机只能处理数据。 • 大千世界丰富多彩。为表现不同性质的事物,要用不同的数据类型。 • 在计算机中,为方便数据处理,采用两种基本形式存放数据。

  6. 数据 • 是对认识的事实性记载 • 是用来表示客观事物的符号 • 是指能够由计算机处理的数字、字母、符号、声音、图象、影视信息等。 • 是程序的必要组成部分和程序处理的对象。

  7. 数的表示 • 在计算机中为了区别不同的数,使用了不同的表示 方法。包括: • 整数的表示 • 实数的表示 • 字符数据的表示 • 数组的表示

  8. 数据类型 • 计算机只能存放二进制数据。不同类型的事物如何区分和描述?由此产生数据类型。 • 不同类型的数据占据不同长度的存储单元。 • 不同类型的数据对应不同的值域范围。 • 不同类型的数据对应不同的操作(运算)及规则。 • 数据类型越丰富,求解能力越强大。

  9. 图3.1 C++数据类型的分类

  10. 3.2、基本数据类型 • C语言的基本数据类型: 数据类型 类型说明浮 占用字节 • 字符型 char 1个 • 短整数 short 2个 • 整型 int 4个 • 浮点型 float 4个 • 双精度型 double 8个

  11. 数据在计算机中的存放 • 数据在计算机中采用二进制存放;一个字节8个二进制位,示意图如下: 0 7 数的表示范围:-2^7~2^7-1(-128~127) 显然,一个字节表示数的范围是有限的。要表示更大范围内的数,就要使用多个字节。

  12. 整数的存储格式 0 7 • 字符型 • 短整型   短整数表示范围为:-2^15~2^15-1(-32768~32767) • 长整型 长整数表示范围为:-2^31~2^31-1 15 8 7 0 31 24 23 16 15 8 7 0

  13. 实数的表示 • 实数也称为浮点数,用于表示小数;有两种表示形式: • 十进制形式:xxxxx.xxxx • 指数形式:xxx.Exx 24 23 16 15 8 7 31 0 指数部分 尾数部分 一般浮点数的可以达到7位有效数字。例如1234.567。双精度浮点数的有效位数可以达到15~16位。

  14. 常数和变量 • 变化的量称变量; • 不变化的量称常量; • 常量和变量是计算机语言中数据的两种基本形式。

  15. 3.2 常量 • 整型常量 • 0, 1, 2, 637, 32767, 32768, … • 0L, 1L, 2L, 637L, 32767L, 32768L, … • 实型常量 • 0.0, 1.0,  2.68, 3.141593, 637.312, … • 0.0E0, 6.226e4, 6.226E4, 1.267E20, … • 字符常量 • 'a', 'A', '1', ' ', '+', … • '\n'(换行), '\r'(回车), '\t'(横向跳格), '\''(单引号), … • 字符串常量. • "Visual C++", "12.34", "This is a string.\n", …

  16. 常数 • 符号常数 • 整型常数 • 实型常数 • 字符型常数 • 8进制常数 • 16进制常数

  17. (1)符号常数 • 用#define定义的常数;类似变量,但不是变量。 例如: #define PI 3.1415926 #define MAXNUM 10000 • 可以出现在表达式中; f1= r * r * PI; • 但是不能作左值,下列用法是错误的: PI = PI*PI ; • 用const定义的常数 const double pi=3.1415926;

  18. (2)整、实型常数 • 整型常数的表示范围是:-32768~32767 例如: 128 ,256 • 实型常数的表示范围是:10-38~1038 例如: 2.7198 , 1.034e14

  19. (3)、字符型常数 • 由单引号括起来的单个字符。 例如,‘A’,‘b’,‘C’

  20. (4)、8进制常数 • 8进制常数是以0打头的8进制数组成。 合法的8进制数: 072,0777,0100 非法的8进制数: 0800,7600,0776

  21. (5)、16进制常数 • 16进制常数是以0x打头的16进制数组成。 合法的16进制常数: 0x10001,0xABC,0xffff 非法的16进制常数: FFFF,aaaa,0xgggg

  22. 文字数据表示 • 文字数据有两种: • 单个字符, 例如,‘A’、‘\0’ 、‘ ‘ 等 • 字符串,例如,“This is a string .” • 计算机中的文字使用ASCII字符,总共有128个: • 10个阿拉伯数字 • 52个英文字母 • 32控制字符(非显示字符) • 34个特殊字符 • ASCII码对应的字符: • ‘A’的值65、‘a’的值97(差是32) • ‘0’的值48 • 回车键的值13、ESC键的值27 • 问号‘?’的值63、‘*’的值42

  23. 例3.1 VC0301.CPP • 将大写字母转换为小写字母。 转换公式: ch = ch - ‘A’+‘a’ • 算法分析: • 输入一个字符,判别是否是字母; • 是字母将其转换为小写 • 否则,跳过 • 按转换公式进行转换 • 输出转换结果值

  24. 转换子函数lower()程序 //Example3.1: 将大写字母转换为小写字母*/ int lower(int ch) { if(ch>='A' && ch<='Z') ch = ch-'A'+'a'; return ch; }

  25. VC0301.CPP主函数 #include <iostream.h> main() { char s[100] = "Hello, C!"; int i= 0, c; while(s[i]!=0) { c = lower(s[i]); s[i]=c; i = i+1; } cout<<s; }

  26. 数据基本形式 • 在实际数据处理过程中,有些数据经常变化(大批量),而有些数据不变化(个别)。 • 变化的量称变量,不变化的量称常量。常量和变量是计算机语言中数据的两种基本形式。 • 常量和变量的运算规则是有区别的。

  27. 3.3 变量 • C++的数据变量说明语句的格式为: <类型说明符> <变量名1> ; • 4种C++整数数据类型的说明符分别为: • char c1, c2; // 说明了2个字符型变量 • int i, j, k; // 说明了3个整型变量 • long len; // 说明了1个长整型变量 • 说明浮点类型和双精度类型的变量 • float average, sum; // 说明了两个浮点类型的变量 • double distance, weight; // 说明了两个双精度类型的变量

  28. 1、变量 • 变量定义 • 变量命名规则 • 变量使用规则 • 变量初始化 • 变量引用 • 类型修饰符

  29. (1)变量定义 • 用基本数据类型描述符说明的对象是定义的变量。 • 例如: • int i,j,k,*p; • float eps,f0,f1[5]; • char c0,c1,c2[100]; • double array[10][10];

  30. (2)变量(标识符)命名 命名规则: (1)变量名只能由字母、数字或下划线组成; (2)变量名的第一个字符必须是字母或下划线; (3)变量名长度不超过32个字符(TC); (4)不要用保留字定义变量名(有32个保留字)。 合法变量名: a、 b1、 _area、employee_name 不合法变量名: 1-name、 max one 、float 、*account

  31. (3)变量使用规则 • 先定义,后使用; 例如: int a,b,c; a=1;b=2; c= a+b; 下列用法是错误的: b=a+c; printf( “max=%d\n”,max); • 不能用保留字作变量名 例如: sin=1.0; printf= “Print Formatting.”;

  32. (4)变量初始化 • 变量初始化就是给变量赋初值;有两种形式: • 先定义,再赋初值; 例如: int sum,fac; sum=0;fac=1; • 定义时赋值 例如: char c=‘A’; int count = 0;

  33. (5)变量引用 • 作为“左值”,出现在赋值语句左边; 例如: i=i+1; sum=sum+i; • 出现在表达式中; 例如: x1 = (x0 + x / x0)/ 2 ; • 作为函数的参数; 例如: printf(“max=%d\n”,max(a,b)); • 作为数组的下标表达式; 例如: c[i][j]=a[i][k]*a[k][j];

  34. (6)类型修饰符 • 在基本数据类型前加类型修饰符,可以改变数据表示的范围。常用的有: • unsigned —— 无符号 • long —— 长型 • short —— 短型 例如: unsigned char 表示范围变为0~255 unsigned int 表示范围变为0~65535

  35. 例3.2 VC0301.CPP • 用牛顿迭代法求平方根。迭代公式为: 迭代结束的条件为: • 算法分析: 定义两个变量X0、X1 X1取初值1.0 循环执行:迭代公式 判别X0和X1的相对误差eps • 若大于eps,继续执行 • 否则,得到结果的根;结束循环。

  36. 程序逻辑功能框图 输入成绩X X1=1.0 X0 = X1 X1 = ( X0+X / X0 ) / 2 |(X0-X1)/X1|>=eps? 是 否 打印结果X1

  37. 程序模块结构 主函数main() 子函数求平方根 newton_sqrt( )

  38. 求平方根子函数newton_sqrt( ) // Example3.2: 用牛顿迭代公式求平方根 #include <iostream.h> #include <math.h> #define EPS 1.0e-10 double newton_sqrt(double x) { double x0, x1; x1 = 1.0; if(x>0.0) { do { x0 = x1; x1 = (x0+x/x0)/2; } while(fabs((x0-x1)/x1)>=EPS); return x1; } else return x; }

  39. 求平方根程序主函数main() // 用于计算平方根的主函数 main() { double x, y; cout<<"Please input the value : "; cin>>x; y = newton_sqrt(x); if(y<0) cout<<"Negative Value have not square root !”<<endl; else cout<<"The square root of”<<x<<“ is “<<y<<endl; }

  40. 字符和字符串的区别 • 字符是用单引号括起来的单个字符,它在存储器中占1个字节; • 字符串是用双引号括起来的一串字符,它在存储器中占n+1个字节,即字符串的结束符‘\0’也占1个字节的位置。 • ‘A’和“A”是有区别的;前者是字符常数,后者是字符串常数。

  41. 3.4、数组 • 问题的引出: • 实际应用的程序设计中,只用几个变量的情况是极少的;更多的情况是处理大批量的相同类型或不同类型的数据。 • 相同类型数据举例:统计交大15,000学生英语4级统考成绩; • 不同类型数据举例:管理交大15,000学生学籍信息记录,包括:姓名、学号、出生日期、班级、各科成绩等。 • 用什么样的数据结构来描述这类应用更简洁?

  42. 应用举例: 例:输入100个实数,按相反的次序 每5个为一行打印出来。 分析: 按前边所学内容,应设置100个实型变量,如果用读数cin ,每行读入5个数,需要20个cin语句;用cout输出,同样也需要20个。 结论: 若用“数组”形式的数据结构,这类应用就简单多了。

  43. 数组定义 • 具有相同类型的数据的集合被称为数组。 • 和简单变量类似,数组用数组名来标识。一个数组名用来表示一组同类型的数据;这批同类型的数据被称为数组元素或分量。 • 数组描述的是顺序数据结构;即数组元素在逻辑上相邻,在物理也相邻。在内存中它们是连续存放的。 • 数组和变量一样,必须先定义,后使用。

  44. 数组说明 • 数组必须先说明,才能使用。说明的一般格式: 类型说明符 数组名[常数表达式][……][,…..] • 说明: • 类型说明符可以是任意类型(例如char、int) • 常数表达式的值是数组元素的个数 • 数组可以是一维、二维或多维数组;是几维数组,数组名右边就有几对方括号,分别确定各维的长度(元素个数); • 举例: char a[10],str[10][80];/*10行80列的字符数组*/ int s1[100][10],i1[1000];

  45. 存贮结构 • 存贮结构也称物理结构;它描述数据在计算机中的表示(又称映象)。 • 逻辑结构和存贮结构的区别: (1)逻辑结构是从逻辑关系(某种顺序)上观察数据,它是独立于计算机的;可在理论上、形式上进行研究、运算。 (2)存储结构是逻辑结构在计算机中的实现,它是依赖于计算机的;离开计算机,则无法进行任何操作。 (3)任何一个算法的设计取决于选定的数据逻辑结构;而算法的最终实现依赖于采用的存储结构。

  46. 一维数组存储结构 • 逻辑结构: 由一串数据构成的向量表,每个元素的下标值确定了各元素在此数据表中的位置。例如, A[5]排序次序为: A[0],A[1],A[2],A[3],A[4] • 存贮结构: 数组元素存放为一片连续的存储单元,其元素在内存中的存放顺序与逻辑结构是一致的;即所谓“逻辑上相邻,物理上也相邻”。A[5]的存储结构为: A[0] A[1] A[2] A[3] A[4]

  47. 二维数组存储结构 • 逻辑结构: 二维数组恰似一张表格(或矩阵)。数组元素中的第一个下标值表示该元素在表格中的行号,第二个下标为列号。M[3][3]具有如下逻辑结构: M[0][0] M[0][1] M[0][2] M[1][0] M[1][1] M[1][2] M[2][0] M[2][1] M[2][2] • 存贮结构: 二维数组在内存中按一维数组存放、占据一片连续的存贮单元;是“按行顺序”在内存中分配存贮单元。M数组在内存中排列如下: m01 m02 m10 m11 m12 m20 m21 m22 m00

  48. 三维数组存储结构 • 三维数组可以看成是若干个二维数组;在内存中也按一维数组存放。C[2][3][3]的数组元素排列如下: • 三维数组元素在内存中 的排列顺序为: C000、 C001 、 C002、 C010、 C011、 C012、 C020、 C021、 C022、 C100、 C101、 C102、 C110、 C111、 C112、 C120、 C121、 C122。 C100 C101 C102 C110 C110 C112 C120 C121 C122 C000 C001 C002 C010 C010 C012 C020 C021 C022

  49. 例3.3 找出数组中的最大数 算法分析: 1、假设数组中第1个元素最大,令max=a[0] 2、将a[i](0<= i < n)与max进行比较, • 若a[i] < max ,i=i+1,再执行2 • 否则,令max=a[i],i=i+1,再执行2 3、循环结束,求出最大元素并输出max。

  50. 程序逻辑功能框图 max=a[0] 否 i < n ? 是 max=a[i] i = i + 1 打印结果max

More Related