1 / 55

大学 C++ 程序设计教程

大学 C++ 程序设计教程. 西安交通大学 计算机教学实验中心 http://ctec.xjtu.edu.cn. 第 3 章 基本数据类型. 本章目标 C++ 语言的基本数据类型 整型、实型 C++ 语言的数据 ( 形式 ) 常数、变量. 授 课 内 容. 3.1 数据类型 3.2 常量 3.3 变量 3.4 枚举类型 3.5 typedef 语句 3.6 类型修饰符 3.7 八进制和十六进制常量 程序设计举例 编程提示. 3.1 数据类型.

Download Presentation

大学 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. 大学C++程序设计教程 西安交通大学 计算机教学实验中心http://ctec.xjtu.edu.cn

  2. 第3章 基本数据类型 • 本章目标 • C++语言的基本数据类型 • 整型、实型 • C++语言的数据(形式) • 常数、变量

  3. 授 课 内 容 • 3.1 数据类型 • 3.2 常量 • 3.3 变量 • 3.4 枚举类型 • 3.5 typedef语句 • 3.6 类型修饰符 • 3.7 八进制和十六进制常量 • 程序设计举例 • 编程提示

  4. 3.1数据类型 • 程序的主要任务是对数据进行处理,而数据有多种类型,如数值数据、文字数据、图像数据以及声音数据等,其中最基本的、也是最常用的是数值数据和文字数据。 • 不同类型的数据在存储器中存放的格式也不相同 • 程序中对各种数据进行处理之前都要对其类型 (也就是存储格式) 预先加以说明,这样做一是便于为这些数据分配相应的存储空间,二是说明了程序处理数据时应采用何种具体运算方法。 • 数值数据,其存储格式又可以分为整型、长整型、浮点型和双精度型等几种类型; • 文字数据也可以分为单个字符和字符串。

  5. 数据的表示 • C++的数据有两种:常量和变量。 • 常量通过本身的书写格式就说明了该常量的类型; • 变量必须先说明其类型,否则程序无法为该变量分配存储空间。 • 在计算机中为了区别不同的数,使用了不同的表示 方法。包括: • 整数的表示 • 实数的表示 • 字符数据的表示 • 数组的表示

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

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

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

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

  10. 整数的存储格式 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

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

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

  13. 3.2 常量 • 整型常量 • 2进制常量,例10011101B,10B • 8进制常量,例04400,0777,0100 • 10进制常量,例2304 • 16进制常量,0x900,0xABC,0xffff • 实型常量 • 0.0, 2.68, 3.141593, 637.312, 32767.0, 32768.0,… • 0.0E0, 6.226E4, 1.267E20, … • 字符型常量 • 符号常量,例#define PI 3 • 字符常量,例'a', 'A', '1', ' ', '+', • 转义常量 '\n'(换行), '\r'(回车), '\t'(横向跳格), '\''(单引号), … • 字符串常量 • "Visual C++", "12.34", "This is a string.\n", … • CONST常量 CONST DOUBLE PI=3.1415926;

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

  15. (2)文字数据表示 • 文字数据有两种: • 单个字符, 例如,‘A’、‘\0’ 、‘ ‘ 等 • 字符串,例如,“This is a string .” • 计算机中的文字使用ASCII字符,总共有128个: • 10个阿拉伯数字 • 52个英文字母 • 32控制字符(非显示字符) • 34个特殊字符

  16. ASCII码对应的字符: • ‘A’的值65、‘a’的值97(差是32) • ‘0’的值48 • 回车键的值13、ESC键的值27 • 问号‘?’的值63、‘*’的值42

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

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

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

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

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

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

  23. 整型数据的溢出 • void main() • { short a,b; • a=32767; b=a+1; • printf("%d,%d",a,b); • } • 运行结果为: 32767,-32768

  24. 例3.1 VC0301.CPP • 用牛顿迭代法求平方根。迭代公式为: 迭代结束的条件为: • 算法分析: 定义两个工作变量x0和x1; x1 = 1; // 迭代初值取1 do { x0 = x1; }while(x1与x0的相对误差大于控制参数ε);

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

  26. // 3-1:用迭代公式求平方根 • #include <iostream.h> • #include <math.h> • #define EPS 1.0e-10 • int main() • { double x, y; • cout << "Please input the value : "; • cin >> x; • double x0, x1; x1 = 1.0;

  27. if(x>0.0) • { do {x0 = x1; • x1 = (x0+x/x0)/2; • } while(fabs((x0-x1)/x1)>=EPS); //fabs()函数为求绝对值的库函数 • y= x1; • } • else • y= x;

  28. 求平方根程序主函数main() • if(y<0) • cout << "Negative Value have not square root !" << endl; • else • cout << "The square root of " << x << " is " << y << endl; • return 0; • }

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

  30. 例3-2根据键盘输入的首字符选择对应颜色 • 算法 • 枚举类型颜色的符号值可以通过读入其前一个或两个字符来区分,可以先从键盘上读入两个字符,然后用选择结构将对应的值找出来并赋给变量,对该变量再一次使用选择结构打印输出正确的符号值。

  31. // Example 3-2:选择颜色 #include <iostream.h> int main() {//定义枚举类型颜色并同时声明一个该类型的变量 enum Colors{ blue, brown, green, red, white, yellow} choose; char ch1, ch2; cout<<"Please input the first two letters of the colors you have choosed:"<<endl; cin>>ch1>>ch2; //输入两个字符 //判断键盘输入字符所对应的枚举类型值 switch(ch1) { case 'b': if(ch2=='l') choose=blue;

  32. // Example 3-2:选择颜色 else choose=brown; break; case 'g': choose=green; break; case 'r': choose=red; break; case 'w': choose=white; break; case 'y': choose=yellow; break; default: cout<<"Illegal input!"<<endl; }

  33. // Example 3-2:选择颜色 //输出枚举类型值 switch(choose) {case blue: cout<<"The color you chosen is blue"<<endl; break; case brown: cout<<"The color you chosen is brown"<<endl; break; case green: cout<<"The color you chosen is green"<<endl; break;

  34. case red: cout<<"The color you chosen is red"<<endl; break; case white: cout<<"The color you chosen is white"<<endl; break; case yellow: cout<<"The color you chosen is yellow"<<endl; } return 0; }

  35. 程序设计举例 • 例3-3 编写程序制作九九乘法表 • 例3-4 计算1!+2!+3!+4!+......+10! • 例3-5 求  的近似值 • 例3-6 根据三边长求三角形面积 • 例3-7 输入一个四位无符号整数,反序输出这四位数的四个数字字符 • 例3-8 编写一个可以打印任何一年的日历的程序

  36. // Example 3-3:制作乘法表 #include <iostream.h> int main() { int i,j; for(i=1; i<10; i=i+1) { for(j=1; j<=i; j=j+1) cout << j <<"*"<< i <<"="<<i*j <<"\t"; cout << endl; } return 0; }

  37. 九九乘法表输出 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54

  38. // Example 3-4:求阶乘的和 #include <iostream.h> int main() { int sum = 0, u = 1; for(int i=1; i<=10; i=i+1) { u = u*i; sum = sum+u; } cout<<"sum = "<<sum<<endl; return 0; }

  39. 例3-5 求  的近似值 • 算法 利用公式: • 计算,直到最后一项的绝对值小于104为止。

  40. // Example 3-5:求π的近似值 #include <iostream.h> #include <math.h> int main() { int s = 1; double n = 1.0, u = 1.0, pi = 0.0; while(fabs(u)>=1e-4) { pi = pi+u; n = n+2; s = -s; //符号位的生成 u = s/n; } cout << "pi = " << 4*pi << endl; return 0; }

  41. 例3-6根据三边长求三角形面积 算法 利用海伦公式: 其中a, b, c分别为三角形三条边的长度。

  42. // Example 3-6:求三角形面积 • #include <iostream.h> • #include <math.h> • int main() • { double a, b, c, s, area; • cout << "please input a, b, c =?"; • cin >> a >> b >> c; • s = (a+b+c)/2; • area = sqrt(s*(s-a)*(s-b)*(s-c)); • cout << "area = " << area << endl; • return 0; • }

  43. 例3-7 输入一个四位无符号整数 • 算法:从输入的无符号整数n中依次分解出个位数字,十位数字,百位数字,千位数字并依次存放到变量c1,c2,c3,c4中, • 将n%10的值即个位数字存入c1中 • 将n/10%10的值即十位数字存入c2中 • 将n/100%10的值即百位数字存入c3中 • 将n/1000的值即千位数字存入c4中 • 再将各数字值+'0'则转为对应的数字字符。

  44. // Example 3-7 #include <iostream.h> int main() { unsigned int n; char c1,c2,c3,c4; cout<<"Please input one integer between 1000 and 9999: "<<endl; cin>>n; cout<<"Before inverse the number is: "<< n <<endl; c1=n%10+'0'; //分离个位数字 c2=n/10%10+'0'; //分离十位数字 c3=n/100%10+'0'; //分离百位数字 c4=n/1000+'0'; //分离千位数字 cout<<"After inverse the number is: "<<c1<<c2<<c3<<c4<<endl; return 0; }

  45. 例3-8 打印年历 算法分析: 1、确定闰年 year%4=0 且 year%100!=0 或 year%400=0 2、确定元旦是星期几 • 平年一年是52(52x7=354)个星期多一天 。所以平年元旦的星期数是上一年元旦星期数加1。 • 闰年又多一天,所以闰年元旦的星期数是上一年元旦星期数加2。 • 1900年的元旦是星期一,所以year的星期几可以根据下列方法计算 n = year -1900 [相差n年 ] n = n +(n - 1 )/4 +1 [n年多n天,(n-1)/4个闰年数,再加1900年元旦的星期序号1] n = n % 7[求出最后的星期数 ]

  46. 程序逻辑功能框图 输入年year 调用isleap()判断是否闰年 调用子函数求元旦是星期几 week_of_newyear_day() Month=1 否 Month<=12? month=month+1 是 打印当前月日历

  47. 打印当前月处理框图 30天 小月 31天 大月 28天 平2月 29天 闰2月 月天数 = 确定当月1日的位置 确定月天数 len_of_month day =1 day<=月天数? 否 是 打印当前日期 day= day+1 否 是否7天? 是 换行

  48. 程序模块结构 主函数main() 子函数求元旦的星期数 week_of_newyears_day() 子函数判别闰月 Isleap()

  49. 确定闰年子函数程序 #include <iostream.h> #define YES 1 // 定义符号常数"是" #define NO 0 // 定义符号常数"否" // 函数 isleap(): 判断某年是否闰年 int isleap(int year) { int leap=NO; if(year%4==0&&year%100!=0||year%400==0) leap=YES; return leap; }

  50. 求元旦是星期几子函数 // 函数 week_of_newyears_day(): 求元旦是星期几 int week_of_newyears_day(int year) { int n = year-1900; n = n+(n-1)/4+1; n = n%7; return n; }

More Related