1 / 89

第二章 c++ 基础知识

第二章 c++ 基础知识. 2.1 变量和赋值 2.2 输入与输出 2.3 数据类型与表达式 2.4 简单控制流程 2.5 程序风格 作业. 课时安排:第一次课: 2.1~2.3 ; 第二次课: 2.4~2.5. 2.1 变量和赋值. #include&lt;iostream.h&gt; void main() { int number_of_5,total_cents,number_of_25,number_of_10; cout&lt;&lt;&quot; 请输入 25 美分硬币的个数: <br>&quot;; cin&gt;&gt;number_of_25;

neona
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++基础知识 • 2.1 变量和赋值 • 2.2 输入与输出 • 2.3 数据类型与表达式 • 2.4 简单控制流程 • 2.5 程序风格 • 作业 课时安排:第一次课:2.1~2.3; 第二次课:2.4~2.5

  2. 2.1 变量和赋值 • #include<iostream.h> • void main() • { int number_of_5,total_cents,number_of_25,number_of_10; • cout<<"请输入25美分硬币的个数:\n"; • cin>>number_of_25; • cout<<"请输入10美分硬币的个数:\n"; • cin>>number_of_10; • cout<<"请输入5美分硬币的个数:\n"; • cin>>number_of_5; • total_cents=number_of_25*25+number_of_10*10 • +number_of_5*5; • cout<<"现总共有"<<total_cents<<"美分。"<<endl; • }

  3. 程序数据与内存 图2-1数据与内存

  4. 问题: • 1.程序中的数据怎样存入内存? • 2.怎样到内存(条中)中去取出来?

  5. x total_cents 字节1 0000 85 1234.5 字节2 0001 字节3 0002 字节4 0003 字节5 0004 01000001 0009 • 内存单元与变量 图2-2 内存与变量

  6. number_of_pods 10 变量名 变量对应着内存单元 变量值 2.1.1 变量的概念 • 变量是容纳数据的量,一个变量对应一个(套)内存单元。

  7. 2.1.2 变量声明 • 所有变量都必须在使用之前先声明 • 变量的说明格式 • <类型说明符> <变量名表> [=<表达式>]; 变量名 例 int number_of_25, number_of_10, number_of_5; double total_cents=0;; 初值 类型名

  8. 变量说明实际完成的工作——本质意义 • 一旦在程序中说明了一个变量,系统在编译时实际上做了下面几方面的工作: • (1) 命名:为变量赋与一个名称,即标识符(规则); • (2) 定类型:指定其类型(int,double,char…); • (3) 长度与值:按系统指定的类型,确定在内存中为其分配的字节个数(长度)和取值范围。并给它一个当前值(初值)。想一想,未给初值,有没有值? • (4) 分配内存地址:分配与其类型匹配的若干内存空间,并将变量的名字作为该内存的符号地址,与该内存的数字地址相关联。

  9. x 内存数据区 … 0f01 0f10 0f11 … 地址 00000000 00000011 变量值为3 (二进制11) 标识符 符号位 • 例 short int x=3; 大小长度:2B 值集:-32768—32767 (-215——215 –1) 变量的本质就是内存单元!

  10. (3)任意位置 • 3.变量声明的位置 • #include<iostream.h> • //int umber_of_pods,peas_per_pod,total_peas; • void main() • { • int number_of_pods,peas_per_pod; • cout<<"请输入豆夹数:\n"; • cin>>number_of_pods; • cout<<"输入一个豆夹中的豌豆数:\n"; • cin>>peas_per_pod; • int total_peas; • total_peas=number_of_pods*peas_per_pod; • cout<<"那么,你总共有"<<total_peas<<"粒豌豆\n"; • } (1)主函数首部 (2)使用之前

  11. 2.1.3 为变量赋值(赋值语句) • 1.定义时初始化变量 • int a=3;//int a(0); • 2.与用户交互的方式(利用键盘) • cin>>number_of_25; • cin>>x; • 3.赋值语句(赋值语句还承担着数据计算任务) • double x; • x=2.5; • x=a+3.0; • int n=0; • n=n+1;

  12. 4. 未初始化变量与垃圾数据 • #include<iostream.h> • void main() • { • int number_of_pods,peas_per_pod; • int total_peas; • total_peas=number_of_pods*peas_per_pod; • cout<<"那么,你总共有"<<total_peas<<"粒豌豆\n"; • }

  13. 垃圾数据(不给变量赋值,会怎么样?) • 将计算豌豆粒数的程序中接收数据的cin语句去掉,做演示,观察结果,思考原因?

  14. 思考? • 执行下述语句之后,变量a,b的值是多少? • int a=1,b=2; • a=b; • b=a; • cout<<a<<b;

  15. 1.数据输入 输入豆夹数、每个豆荚的粒数 2.数据加工 计算豌豆总数 3.数据输出 输出计算结果 2.2 输入与输出任何一个程序都包含有三个基本的部分,这三个部分的核心是:数据处理. • 数 • 据 • 处 • 理

  16. C++的输入与输入流 • cin>>x cout<<x

  17. 2.2.1 使用cout进行输出 插入运算符 输出项 • cout<<total_cents ; 显示器

  18. 1.输出项的类型 • (1)变量:cout<<total; • (2)字符串:cout<<"请输入25美分硬币的个数:\n"; • (3)常量:cout<<5 ; • (4)表达式:cout<<number_of_25*25 • (5)嵌套(连续)输出(流): • cout<< “现总共有" <<total_cents<< "美分。\n";

  19. 2.转义序列 • 若在一个字符前加上字符\,\之后的字符具有特殊的意义,这样的一个字符序列称为转义序列。 • cout<<"请输入25美分硬币的个数:\n "; • 下面是C++定义的常用的转义序列: • \n 换行符 • \t 水平制表符(横向跳格) • \a 响铃 • \\ 反斜杠 • \’’双引号

  20. 使用转义字符控制输出 演示硬币金额的程序,输出(cout)语句中

  21. 使用转义字符 • for(int i=0;i<10;i++) cout<<"\a"; • cout<<"\n\t硬币类型\t硬币个数\n"; • cout<<"=========================\n"; • cout<<"\t25\t\t"<<number_of_25<<endl; • cout<<"\t10\t\t"<<number_of_10<<endl; • cout<<"\t5\t\t"<<number_of_5<<endl; • cout<<"=========================\n"; • cout<<"\t现总共有"<<total_cents<<"美分"<<endl;

  22. 3.带小数点的格式化输出(科学计数)运行2_输出格式.cpp3.带小数点的格式化输出(科学计数)运行2_输出格式.cpp 系统默认为科学计数法。

  23. 带小数点的格式化输出(定点计数)程序2_输出格式.cpp中增加cout.setf(ios::fixed);带小数点的格式化输出(定点计数)程序2_输出格式.cpp中增加cout.setf(ios::fixed); 程序设置为定点计数法。

  24. 带小数点的输出代码实现 • 魔法配方: • cout.setf(ios::fixed); • cout.setf(ios::showpoint);//可省略 • cout.precision(2);

  25. 2.2.2 用cin进行输入 输入项 提取运算符 • cin>>number_of_25 ; 键盘

  26. 1.为数值型变量赋值 • double x,y,z; • cin>>x; • cin>>x>>y>>z; • 2.为字符型变量赋值 • char name1,name2; • cin>>name1>>name2; • 3.与cout配合使用,实现友好的人机界面 • cout<<"请输入25美分硬币的个数:"; • cin>>number_of_25;

  27. 问题:输入的数据类型与变量类型不一致,会怎么样?演示例子:输出格式.cpp在屏幕显示“请输入25美分硬币的个数:”时,键盘输入:“张鹏祥”后回车,观察结果!问题:输入的数据类型与变量类型不一致,会怎么样?演示例子:输出格式.cpp在屏幕显示“请输入25美分硬币的个数:”时,键盘输入:“张鹏祥”后回车,观察结果!

  28. 1.数据输入 输入豆夹数 2.数据处理与存储 计算豌豆数 3.数据输出 输出计算结果 总结 • 数 • 据 • 处 • 理

  29. 2.3 数据类型与表达式 • 数据类型是程序设计语言的一个重要概念,每一个语言都有一个原始(标准)数据类型集,此外也应提供定义新数据类型的机制。 • C++有着丰富的数据类型。 整型数据 int a,b,sum; float total_cents; double number_of 25; 单精度实型数据 双精度实型数据

  30. 整 型 int 字符型 char 基本数据类型 实 型 float 双精度型 double 实 型 逻辑型 bool C++的数据类型 空值型 void 数组 指针 结构 struct 联合 union 枚举 enum 类 class 非基本数据类型 C++中的数据类型

  31. 1.数据类型的重要属性 • (1)类型标识符,每种数据类型系统都定义一个确定的名称,如整型是 int,单精度型是float. • (2)长度(大小),例如短整型的字长为2个字节,以限定了它的取值范围是-32768_32767之间 • (3)值集,如布尔型的值集为{true,false}; • (4)运算集,一定的数据类型允许对其施加一定的运算。 • 注意:一个确定的数据对象不可以没有类型!

  32. 2.基本数据类型属性 • 下面我们来分别介绍这5种基本数据类型的属性。 • 1)整数类型(int) • 2)实数类型(float/double) • 3)字符类型(char) • 4)字符串类型(string导出) • 5)布尔类型(bool) • 6)枚举类型 (enum)

  33. 1) 整数类型 • 简称整型,用来描述整型数值数据。其值域(值的集合)为整数集的子集。 • (1)实例 123、678、10000,均是整型常量; int a,b,c; //a,b,c均被说明为整型变量。 • (2)分类 • 依据其是否具有符号位,分为有符号(signed)和无符号(unsigned)两种表示形式;依据其存储位数的不同又分为:标准整型(int)、短整型(short int)和长整型(long int)。

  34. (3)长度和表示范围(P43见图2.2) • 名称 字节数 长度 大小范围 • short:2B -32768~32767 (-215~215-1) • int :4B -2147483648~2147483648 (-231~231-1) • (4)操作集 • 允许对整型数据对象进行算术运算、关系运算、位运算以及赋值操作。 例如:1+5,a>3。 算术运算 关系运算

  35. 2) 实数类型 123.01、0.1E10等是双精度型常量,123.01采用十进制小数形式,0.1E10采用十进制指数形式(科学记数法); (1)实例 float a,b,c; //a,b,c均被说明为浮点(单精度)类型变量; double x,y,z;//x,y,z均被说明为双精度型变量; long double l1,l2; //l1,l2均被说明为长双精度型变量; • (2)分类 • 依据其存储表示位数的不同又分为:浮点型(float,4字节)、双精度型(double,8字节)(早期版本的C++有10字节的长双精度型(long double),Win32版本VC++中长双精度与双精度一样)。

  36. (3)长度和表示范围,参见p43,图2.2 • 长度 大小范围 精度 • float: 4b 10-38~1038 7位 • double: 8b 10-308~10308 15位 • (4)操作集 • 允许对实型数据对象进行算术运算、关系运算和赋值操作等。

  37. 3)字符类型 简称字符型,定义以单个字符作为其值的数据对象。其值域是由语言定义的与标准字符集有关的枚举集,例如ASCII字符集。 (1)实例 'a'、'A'、‘x’均是字符常量; char c1,c2;//c1,c2被说明为字符变量。 (2) 分类 • 依据是否具有符号位,分为有符(signed)和无符(unsigned)两种表示形式。

  38. (3)操作集 许对字符数据对象进行算术运算、关系运算和赋值操作等。关系运算的比较依据就是“字符集的对照排序”。例如‘a’<’b’的运算结果为真,因为字符a的ASCII码值是61而b的ASCII码值是62。注意:字符类型C++的字符量的值实际等同为一个整数值(ASCII码值),如字符‘a'等同数字61。(3)操作集 许对字符数据对象进行算术运算、关系运算和赋值操作等。关系运算的比较依据就是“字符集的对照排序”。例如‘a’<’b’的运算结果为真,因为字符a的ASCII码值是61而b的ASCII码值是62。注意:字符类型C++的字符量的值实际等同为一个整数值(ASCII码值),如字符‘a'等同数字61。

  39. 4) 字符串型(string) 它不是C++的基础数据类型,必须在程序头部包含: #include<string> using namespace std; 定义以多个字符作为其值的数据对象。 (1)实例 “name”、”Zhangswn”、“x”均是字符串常量; string str1,str2;//str1,str2被说明为字符串变量。 • (2)长度不定,范围: 所有可输入的字符(ASCⅡ码字符及汉字等(见附录3))

  40. (3)操作集 许对字符数据对象进行连结(+)、关系运算和赋值操作等。关系运算的比较依据就是“字符集的对照排序”,按字典排序法比较大小(后者为大)。例如 “ab”<“ba”,运算结果为真。str1=“computer”; str2=str1+”系统” ; str2的值为字符串“computer系统”。 • 注意:双引号是字符串定界符,不是字符串的一部分 • cin>>str2>>str2;//输入时,以空格作为间隔标志。5)布尔类型(bool)简称布尔型,也称为逻辑型。布尔型数据对象的取值无非就是“真”(True)和“假”(False)。C++沿用C的习惯,通常使用0和非0这样的整数值来表示关系运算和逻辑运算结果,因此很少使用布尔类型。

  41. 6)枚举类型 • 简称枚举型,是一种特殊的数据类型,它的值集仅包含有限个元素(可枚举),可以由用户自行定义,因此枚举类型又属于自定义类型。 • 实例 Weeks: Sunday, Monday,Tuesday,Wednesday,Thursday, Friday,Saturday Color: Red,Blue,Green,White,Black。 Weeks中的元素是可枚举的(一周的七天)。 Color集的颜色也是可枚举的(五种颜色)。 对于程序中的这样一些特殊的数据对象,我们可以用枚举类型来描述。

  42. (1)定义枚举类型 枚举类型是非标准数据类,需要程序员自行定义,其语法如下:enum <枚举类型名 >{<值表>}将“星期”定义成枚举类型,其类型名为Weeks。enum Weeks{ • Sunday,Monday,Tuesday,Wednesday,Thursday, Friday,Saturday}; 类型名 值表 标识符

  43. 算术运算符 关系运算符 逻辑运算符 位运算符 条件运算符 逗号运算符 字长提取符 指针运算符 函数调用符 动态分配符 数组下标运算符 限定运算符 成员选择符 2.3.2 算术运算和表达式C++有着丰富的运算:

  44. 2.3.2.1 算术运算 • 1.基本的算术运算 • +:加,-:减,*:乘,/:除,%:求余。 • +、-、* 与通常意义的运算一致 • /:如果除数和被除数是整型数,则进行整数除法(商为整数),如果除数和被除数是实型数则表示通常意义的除法运算。 例 cout<<4/3 ;//输出商为1 cout<< 4.0/3.0 ;//输出商为1.33333 %:只能作用于整型数,其意义为取余数。 例 cout<<100%2;//输出余数为0。

  45. 思考: • 下面语句的输出结果是什么? • cout<<250*(4/5);

  46. 2.增量运算(++)和减量(--)运算 • 另外,C++还有单目的算术运算 “++”、“--”。 • 增量运算(++)和减量运算都有两种形式: • 前缀增量:++(运算分量); • 后缀增量 :(运算分量)++; • 前缀减量:--(运算分量); • 后缀减量 :(运算分量)--; • n++; // n=n+1;此表达式常用作循环控制的累加器。 • ++n; // n=n+1 • n--; // n=n-1 • --n; // n=n-1

  47. 前缀增量(减量)与后缀 的区别: • 注意下面的例子 • a=n++; // (a=n;n=n+1;) • a=++n; // (n=n+1;a=n;) 其含义是不同的。 • ++(++a)// a=a+1;a=a+1;++a 是左值。 • ++(a++)// error, a++ 是右值。相当于 对常数进行++运算,出错时显然的.

  48. 3. 带算术运算的赋值运算 • 事实上, C++有更丰富的赋值运算行式。若按参加运算的对象分量的个数不同可分为 : • 单目运算 • 双目运算 • 三目运算和多目运算 • 赋值运算是C++的一种双目运算,其运算格式为:<变量名>=<表达式> • 右运算量:表达式; • 运算符 := ; • 左运算量:变量。

  49. 观察如下程序段: • int a,b=1,n=2; • float x,y=1.0,z=2.0; • char c; • c=b; • x=x*y+z; • c=‘a’ • n+=1; //复合运算符,相当于n=n+1或++n • n-=2; // n=n-2 • x*=y; //x=x*y • y/=x+Z; //y=y/(x+z) • a=b=3; //b=3;a=b; 赋值运算是右结合的。

  50. 左值与右值 • 左值:能够出现在赋值表达式左边的表达式,左值有系统分配的内存空间。 • 右值:能够出现在赋值表达式左边,它没有分配存储空间。 • (b=1)=c+1; // 赋值运算是左值。 • 3=a;// 出错,常量 3 是右值。没有空间内存存放数据结果。 • 注意:大多数程序语言都用赋值语句来描述赋值操作,但C++却用赋值操作符来描述赋值操作,也即给变量赋值是通过表达式实现的而不是通过语句实现的。

More Related