890 likes | 1.12k Views
第二章 c++ 基础知识. 2.1 变量和赋值 2.2 输入与输出 2.3 数据类型与表达式 2.4 简单控制流程 2.5 程序风格 作业. 课时安排:第一次课: 2.1~2.3 ; 第二次课: 2.4~2.5. 2.1 变量和赋值. #include<iostream.h> void main() { int number_of_5,total_cents,number_of_25,number_of_10; cout<<" 请输入 25 美分硬币的个数: <br>"; cin>>number_of_25;
E N D
第二章 c++基础知识 • 2.1 变量和赋值 • 2.2 输入与输出 • 2.3 数据类型与表达式 • 2.4 简单控制流程 • 2.5 程序风格 • 作业 课时安排:第一次课:2.1~2.3; 第二次课:2.4~2.5
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; • }
程序数据与内存 图2-1数据与内存
问题: • 1.程序中的数据怎样存入内存? • 2.怎样到内存(条中)中去取出来?
x total_cents 字节1 0000 85 1234.5 字节2 0001 字节3 0002 字节4 0003 字节5 0004 01000001 0009 • 内存单元与变量 图2-2 内存与变量
number_of_pods 10 变量名 变量对应着内存单元 变量值 2.1.1 变量的概念 • 变量是容纳数据的量,一个变量对应一个(套)内存单元。
2.1.2 变量声明 • 所有变量都必须在使用之前先声明 • 变量的说明格式 • <类型说明符> <变量名表> [=<表达式>]; 变量名 例 int number_of_25, number_of_10, number_of_5; double total_cents=0;; 初值 类型名
变量说明实际完成的工作——本质意义 • 一旦在程序中说明了一个变量,系统在编译时实际上做了下面几方面的工作: • (1) 命名:为变量赋与一个名称,即标识符(规则); • (2) 定类型:指定其类型(int,double,char…); • (3) 长度与值:按系统指定的类型,确定在内存中为其分配的字节个数(长度)和取值范围。并给它一个当前值(初值)。想一想,未给初值,有没有值? • (4) 分配内存地址:分配与其类型匹配的若干内存空间,并将变量的名字作为该内存的符号地址,与该内存的数字地址相关联。
x 内存数据区 … 0f01 0f10 0f11 … 地址 00000000 00000011 变量值为3 (二进制11) 标识符 符号位 • 例 short int x=3; 大小长度:2B 值集:-32768—32767 (-215——215 –1) 变量的本质就是内存单元!
(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)使用之前
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;
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"; • }
垃圾数据(不给变量赋值,会怎么样?) • 将计算豌豆粒数的程序中接收数据的cin语句去掉,做演示,观察结果,思考原因?
思考? • 执行下述语句之后,变量a,b的值是多少? • int a=1,b=2; • a=b; • b=a; • cout<<a<<b;
1.数据输入 输入豆夹数、每个豆荚的粒数 2.数据加工 计算豌豆总数 3.数据输出 输出计算结果 2.2 输入与输出任何一个程序都包含有三个基本的部分,这三个部分的核心是:数据处理. • 数 • 据 • 处 • 理
C++的输入与输入流 • cin>>x cout<<x
2.2.1 使用cout进行输出 插入运算符 输出项 • cout<<total_cents ; 显示器
1.输出项的类型 • (1)变量:cout<<total; • (2)字符串:cout<<"请输入25美分硬币的个数:\n"; • (3)常量:cout<<5 ; • (4)表达式:cout<<number_of_25*25 • (5)嵌套(连续)输出(流): • cout<< “现总共有" <<total_cents<< "美分。\n";
2.转义序列 • 若在一个字符前加上字符\,\之后的字符具有特殊的意义,这样的一个字符序列称为转义序列。 • cout<<"请输入25美分硬币的个数:\n "; • 下面是C++定义的常用的转义序列: • \n 换行符 • \t 水平制表符(横向跳格) • \a 响铃 • \\ 反斜杠 • \’’双引号
使用转义字符控制输出 演示硬币金额的程序,输出(cout)语句中
使用转义字符 • 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;
3.带小数点的格式化输出(科学计数)运行2_输出格式.cpp3.带小数点的格式化输出(科学计数)运行2_输出格式.cpp 系统默认为科学计数法。
带小数点的格式化输出(定点计数)程序2_输出格式.cpp中增加cout.setf(ios::fixed);带小数点的格式化输出(定点计数)程序2_输出格式.cpp中增加cout.setf(ios::fixed); 程序设置为定点计数法。
带小数点的输出代码实现 • 魔法配方: • cout.setf(ios::fixed); • cout.setf(ios::showpoint);//可省略 • cout.precision(2);
2.2.2 用cin进行输入 输入项 提取运算符 • cin>>number_of_25 ; 键盘
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;
问题:输入的数据类型与变量类型不一致,会怎么样?演示例子:输出格式.cpp在屏幕显示“请输入25美分硬币的个数:”时,键盘输入:“张鹏祥”后回车,观察结果!问题:输入的数据类型与变量类型不一致,会怎么样?演示例子:输出格式.cpp在屏幕显示“请输入25美分硬币的个数:”时,键盘输入:“张鹏祥”后回车,观察结果!
1.数据输入 输入豆夹数 2.数据处理与存储 计算豌豆数 3.数据输出 输出计算结果 总结 • 数 • 据 • 处 • 理
2.3 数据类型与表达式 • 数据类型是程序设计语言的一个重要概念,每一个语言都有一个原始(标准)数据类型集,此外也应提供定义新数据类型的机制。 • C++有着丰富的数据类型。 整型数据 int a,b,sum; float total_cents; double number_of 25; 单精度实型数据 双精度实型数据
整 型 int 字符型 char 基本数据类型 实 型 float 双精度型 double 实 型 逻辑型 bool C++的数据类型 空值型 void 数组 指针 结构 struct 联合 union 枚举 enum 类 class 非基本数据类型 C++中的数据类型
1.数据类型的重要属性 • (1)类型标识符,每种数据类型系统都定义一个确定的名称,如整型是 int,单精度型是float. • (2)长度(大小),例如短整型的字长为2个字节,以限定了它的取值范围是-32768_32767之间 • (3)值集,如布尔型的值集为{true,false}; • (4)运算集,一定的数据类型允许对其施加一定的运算。 • 注意:一个确定的数据对象不可以没有类型!
2.基本数据类型属性 • 下面我们来分别介绍这5种基本数据类型的属性。 • 1)整数类型(int) • 2)实数类型(float/double) • 3)字符类型(char) • 4)字符串类型(string导出) • 5)布尔类型(bool) • 6)枚举类型 (enum)
1) 整数类型 • 简称整型,用来描述整型数值数据。其值域(值的集合)为整数集的子集。 • (1)实例 123、678、10000,均是整型常量; int a,b,c; //a,b,c均被说明为整型变量。 • (2)分类 • 依据其是否具有符号位,分为有符号(signed)和无符号(unsigned)两种表示形式;依据其存储位数的不同又分为:标准整型(int)、短整型(short int)和长整型(long int)。
(3)长度和表示范围(P43见图2.2) • 名称 字节数 长度 大小范围 • short:2B -32768~32767 (-215~215-1) • int :4B -2147483648~2147483648 (-231~231-1) • (4)操作集 • 允许对整型数据对象进行算术运算、关系运算、位运算以及赋值操作。 例如:1+5,a>3。 算术运算 关系运算
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++中长双精度与双精度一样)。
(3)长度和表示范围,参见p43,图2.2 • 长度 大小范围 精度 • float: 4b 10-38~1038 7位 • double: 8b 10-308~10308 15位 • (4)操作集 • 允许对实型数据对象进行算术运算、关系运算和赋值操作等。
3)字符类型 简称字符型,定义以单个字符作为其值的数据对象。其值域是由语言定义的与标准字符集有关的枚举集,例如ASCII字符集。 (1)实例 'a'、'A'、‘x’均是字符常量; char c1,c2;//c1,c2被说明为字符变量。 (2) 分类 • 依据是否具有符号位,分为有符(signed)和无符(unsigned)两种表示形式。
(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。
4) 字符串型(string) 它不是C++的基础数据类型,必须在程序头部包含: #include<string> using namespace std; 定义以多个字符作为其值的数据对象。 (1)实例 “name”、”Zhangswn”、“x”均是字符串常量; string str1,str2;//str1,str2被说明为字符串变量。 • (2)长度不定,范围: 所有可输入的字符(ASCⅡ码字符及汉字等(见附录3))
(3)操作集 许对字符数据对象进行连结(+)、关系运算和赋值操作等。关系运算的比较依据就是“字符集的对照排序”,按字典排序法比较大小(后者为大)。例如 “ab”<“ba”,运算结果为真。str1=“computer”; str2=str1+”系统” ; str2的值为字符串“computer系统”。 • 注意:双引号是字符串定界符,不是字符串的一部分 • cin>>str2>>str2;//输入时,以空格作为间隔标志。5)布尔类型(bool)简称布尔型,也称为逻辑型。布尔型数据对象的取值无非就是“真”(True)和“假”(False)。C++沿用C的习惯,通常使用0和非0这样的整数值来表示关系运算和逻辑运算结果,因此很少使用布尔类型。
6)枚举类型 • 简称枚举型,是一种特殊的数据类型,它的值集仅包含有限个元素(可枚举),可以由用户自行定义,因此枚举类型又属于自定义类型。 • 实例 Weeks: Sunday, Monday,Tuesday,Wednesday,Thursday, Friday,Saturday Color: Red,Blue,Green,White,Black。 Weeks中的元素是可枚举的(一周的七天)。 Color集的颜色也是可枚举的(五种颜色)。 对于程序中的这样一些特殊的数据对象,我们可以用枚举类型来描述。
(1)定义枚举类型 枚举类型是非标准数据类,需要程序员自行定义,其语法如下:enum <枚举类型名 >{<值表>}将“星期”定义成枚举类型,其类型名为Weeks。enum Weeks{ • Sunday,Monday,Tuesday,Wednesday,Thursday, Friday,Saturday}; 类型名 值表 标识符
算术运算符 关系运算符 逻辑运算符 位运算符 条件运算符 逗号运算符 字长提取符 指针运算符 函数调用符 动态分配符 数组下标运算符 限定运算符 成员选择符 2.3.2 算术运算和表达式C++有着丰富的运算:
2.3.2.1 算术运算 • 1.基本的算术运算 • +:加,-:减,*:乘,/:除,%:求余。 • +、-、* 与通常意义的运算一致 • /:如果除数和被除数是整型数,则进行整数除法(商为整数),如果除数和被除数是实型数则表示通常意义的除法运算。 例 cout<<4/3 ;//输出商为1 cout<< 4.0/3.0 ;//输出商为1.33333 %:只能作用于整型数,其意义为取余数。 例 cout<<100%2;//输出余数为0。
思考: • 下面语句的输出结果是什么? • cout<<250*(4/5);
2.增量运算(++)和减量(--)运算 • 另外,C++还有单目的算术运算 “++”、“--”。 • 增量运算(++)和减量运算都有两种形式: • 前缀增量:++(运算分量); • 后缀增量 :(运算分量)++; • 前缀减量:--(运算分量); • 后缀减量 :(运算分量)--; • n++; // n=n+1;此表达式常用作循环控制的累加器。 • ++n; // n=n+1 • n--; // n=n-1 • --n; // n=n-1
前缀增量(减量)与后缀 的区别: • 注意下面的例子 • 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++ 是右值。相当于 对常数进行++运算,出错时显然的.
3. 带算术运算的赋值运算 • 事实上, C++有更丰富的赋值运算行式。若按参加运算的对象分量的个数不同可分为 : • 单目运算 • 双目运算 • 三目运算和多目运算 • 赋值运算是C++的一种双目运算,其运算格式为:<变量名>=<表达式> • 右运算量:表达式; • 运算符 := ; • 左运算量:变量。
观察如下程序段: • 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; 赋值运算是右结合的。
左值与右值 • 左值:能够出现在赋值表达式左边的表达式,左值有系统分配的内存空间。 • 右值:能够出现在赋值表达式左边,它没有分配存储空间。 • (b=1)=c+1; // 赋值运算是左值。 • 3=a;// 出错,常量 3 是右值。没有空间内存存放数据结果。 • 注意:大多数程序语言都用赋值语句来描述赋值操作,但C++却用赋值操作符来描述赋值操作,也即给变量赋值是通过表达式实现的而不是通过语句实现的。