2009-7-29 -1-
C++大学基础教程第 2章 基本数据类型与表达式
2009-7-29 -2-
程序中最基本的元素是 数据类型,
根据数据类型可以为 变量 或 常量 分配内存空间,将变量、常量和 运算符 结合在一起组成 表达式,进行复杂的运算和处理。
2009-7-29 -3-
第 2章 基本数据类型与表达式
2.1 词法记号和标识符
2.2 基本数据类型
2.3 变量和常量
2.4 运算符和表达式
2.5 基本输入输出
2009-7-29 -4-
2.1 词法记号和标识符
2009-7-29 -5-
2.1 词法记号和标识符
1,C++字符集英文字母,A~Z,a~z
数字字符,0~9
特殊字符,
+ - * / % ^ = < > !
# & | _ ~ \ ‘? ;,
,( ) [ ] { } 空格
2009-7-29 -6-
2.1 词法记号和标识符
1、什么是关键字?
预先定义好的标识符,C++编译器对其进行特殊处理。
2、如何识别关键字?
使用 VC++ 6.0的编辑环境时,缺省是 蓝色 的字符即为关键字。
2009-7-29 -7-
2.1 词法记号和标识符
3、标识符标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名,变量名,类名,对象名等 。 C++标识符的构成规则如下:
1,不能是 C++的关键字;
2,第一个字符必须是大写,小写字母或下划线;
3,不包含空格和? +,-,;? 等特殊字符;
4,为方便输入,长度一般不超过 31个字符 。
2009-7-29 -8-
2.1 词法记号和标识符例如:
合法的标识符:
apple,_Student,_123,No1,max_num
不合法的标识符:
51job,max num,-abc
注意:
C++的表示符是大小写敏感的,即 abc≠ABC 。
2009-7-29 -9-
2.1 词法记号和标识符
4、分隔符分隔符用于分隔程序中的正文,在 C++中使用下列字符作为分隔符:
( ) { },,;
这些分隔符不表示实际的操作,仅用于构造程序 。 比如? ;?,用来作为一句完整语句的结束 。
2009-7-29 -10-
2.1 词法记号和标识符
5、空白在 C++语句中经常出现空白 ( 制表符,空格,空行 ) 等,通常都忽略不计 。
2009-7-29 -11-
2.2、基本数据类型什么是数据类型?
数据是程序处理的对象,数据根据其本身的特点进行分类,从而形成不同的数据类型。
例如:数学中有自然数、整数、实数
2009-7-29 -12-
2.2、基本数据类型基本数据类型整型,int
字符型,char,wchar_t
实型,float,double
逻辑型,bool
2009-7-29 -13-
2.2、基本数据类型自定义数据类型数组,type[]
指针,type*
引用,type&
空类型,void
结构,struct
联合,union
枚举,enum
类,class
2009-7-29 -14-
2.2、基本数据类型修饰符在 C++中描述为了更加准确的描述数据类型,
提供了 4个关键字用来修饰基本的数据类型:
1、长型 long
2,短型 short
3,有符号 signed
4,无符号 unsigned
2009-7-29 -15-
1,short:
仅用来修饰 int,称为短整型,占 2字节内存,也可直接简写为 short;
2,long:
仅修饰 int和 double,因为在不同的编译环境中使用
long修饰的数据所占内存不同,这里列出的是在
VC++6.0的环境下的 。
3,unsigned:
用来修饰 char,short和 int,表示该数据类型为无符号数 。
4,signed:
用来修饰 char,short和 int,表示该数据类型为有符号数,为缺省设置 。
2009-7-29 -16-
2.2、基本数据类型数据类型和内存空间不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,
因而其所能表示的数值范围也不尽相同。
内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。
2009-7-29 -17-
2.2、基本数据类型注意整型 int的长度等于机器的字长:
16位机,int=2字节;
32位机,int=4字节 。
但是 short和 long表示的数据长度是固定的,
任何支持标准 C++的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为 short或 long。
2009-7-29 -18-
2.2、基本数据类型例题编写一个程序,输出基本数据类型 char,int,
float,double,bool的长度。
提示:
使用 sizeof(数据类型 ) 能够获取不同数据类型的长度。
2009-7-29 -19-
//输出基本数据类型的长度
#include <iostream>
using namespace std;
void main()
{
cout<<“char,,<<sizeof(char)<<“字节 \n";
cout<<"int,"<<sizeof(int)<<"字节 \n";
cout<<"float,"<<sizeof(float)<<"字节 \n";
cout<<"double,"<<sizeof(double)<<"字节 \n";
cout<<"bool,"<<sizeof(bool)<<"字节 \n";
}
2009-7-29 -20-
2.3 变量和常量
2009-7-29 -21-
2.3 变量和常量概述程序所处理的数据不仅分为不同的数据类型,
而且每种类型的数据还分为变量和常量。程序在运行中就是通过这些变量和常量来操作数据的。
什么是变量?
在 C++中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。
2009-7-29 -22-
2.3 变量变量定义的格式:
数据类型 变量名 1,变量名 2,… 变量名 n;
例如:定义各种类型的变量
int num;
float f;
char ch;
short s;
double area,length;
2009-7-29 -23-
2.3 变量说明在创建或定义变量时,需要指明该变量的数据类型 和 名称 。
数据类型:决定变量的存储方式和可以进行的操作;
变量名称:用来区分不同的变量 。
变量一旦被定义,则系统自动为其分配应占的内存。
2009-7-29 -24-
2.3 变量变量名称的定义遵循标识符定义的规则,实际上变量名称就是其中一种标识符 。 常用的命名约定有三种:
1,Unix环境常用的命名法
my_age,num_of_student
2,驼峰式命名法
myAge,numOfStudent
3,匈牙利标记法
iMyCar,bIsRight
2009-7-29 -25-
2.3 变量赋值使用赋值运算符? =? 可以将一个值赋给变量 。
例如:
unsigned short age;
age = 18;
或者
unsigned short age = 18;
2009-7-29 -26-
2.3 变量我们可以一次定义多个相同数据类型的变量,也可以一次为多个变量初始化:
char ch1=?a?,ch2=?b? ;
int height=10,width=6,area ;
特性:
变量可以被多次赋值,但每次赋值后,
原值都会被新值覆盖。
2009-7-29 -27-
例 2.2:赋值运算符的使用
#include <iostream>
using namespace std;
void main(){
int myAge = 18;
cout<<“myAge=”<< myAge<<endl;
myAge = 20;
cout<<“myAge=”<< myAge<<endl;
}
运行结果:
myAge=18
myAge=20
2009-7-29 -28-
2.3 变量
typedef
为已有的数据类型定义一个同义词,或者叫做别名。
例如:
typedef unsigned int UINT;
关键字 数据类型 别名赋值注意:
使用 typedef定义同义词时并不分配内存空间。
2009-7-29 -29-
2.3 常量严格来说,常量又分成符号常量和常数 。
符号常量,
代表一个固定不变值的名字;
常数,
程序中使用的具体的数据 。
2009-7-29 -30-
2.3 常量符号常量
C++中提供了一个关键字 const,用来区分常量和变量。并且由于常量代表一个固定的值,
并且该值在程序运行过程中不能够被改变,所以要求 常量在定义的时候必须进行初始化 。
例如:
const int i=10 ;
关键字 数据类型 常量名 =初始值;
2009-7-29 -31-
2.3 常量
define关键字在 C语言中使用预编译指令 #define也能够定义常量。
例如:
#define PI 3.1415927
关键字 常量名 值该语句属于预编译指令,不属于 C++语句,因而行尾不需要使用分号 。 并且由于 C++是向下兼容的,因而 C语言的程序能够在 C++的编译器下顺利运行 。 但是在 C++编程中,建议使用 const替代 #define定义常量 。
2009-7-29 -32-
2.3 常量整型常数十进制数,100
8进制数,0144
16进制数,0x64
用 U或 u表示无符号 整型,如 65535U 。
用 L或 l表示长 整型。
默认的是 int型。
2009-7-29 -33-
2.3 常量实型常数
1 小数形式例如,0.123,23.12
2 指数形式例如,123e5或 123E5 =123*105
注意,e前面必须有数字,e后面必须是整数实常数默认为 double型可用后缀 F( f) 表示实数常数为 float型。
2009-7-29 -34-
2.3 常量字符常数
1、用单引号扩起来的一个字符,
例如,‘ a?,。
2,转义字符以 \开头的字符序列,代表特殊的意义。
例如,\n,\t,\”
2009-7-29 -35-
\a 0x07 bell( 响铃)
\n 0x0A 换行
\r 0x0D 回车
\t 0x09 制表符
\v 0x0B 垂直跳格
\b 0x08 Backspace
\\ 0x5C?\?
\" 0x22 双引号
\‘ 0x27 单引号
\ddd 1-3位 8进数
\xhh 1-2位 16进数
2009-7-29 -36-
例 2.3:打印特殊字符
#include <iostream>
using namespace std;
void main()
{
cout<<“输出字母,? <<‘ a?<<?\a?<<endl;
cout<<“输出字母,? <<‘ n?<<?\n?;
} 运行结果:
输出字母,a (蜂鸣器响一声 )
输出字母,n (换行 )
2009-7-29 -37-
2.3 常量反斜杠还可以和八进制数或十六进制结合起来表示相应的 ASCII码 。 表示形式如下:
\ddd,1~3位八进制数
\xhh,1~2位十六进制数我们知道在十六进制的 ASCII码表中,字母 ’ a?~?z?的 ASCII值是 61H~7AH,因此我们也可以使用如下两句代码替代例 2.3中的输出,达到同样的结果 。
cout<<“输出字母,? << ‘ \x61?<<?\x07?<<endl;
cout<<“输出字母,? << ‘ \x6E?<<?\x0A?;
2009-7-29 -38-
2.3 常量字符变量
char ch1=?a?,ch2=97,ch3=?\064?
原因:
在内存中,字符数据以 ASCII码存储,即以整数表示,所以,C++中字符数据和整数可以相互赋值。
2009-7-29 -39-
例 2.4:字符数据和整型数据的转换
#include <iostream>
using namespace std;
void main()
{
int n=?a?;
char ch = 97;
cout<<”输出内容,? <<n<<endl;
cout<<”输出内容,? <<ch<<endl;
}
运行结果:
输出内容,97
输出内容,a
注意:变量在输出时,根据其本身的数据类型进行输出 。
2009-7-29 -40-
2.3 常量字符串常量由一对双引号括起来的字符序列,
例如,? how do you do?”
“hello world!”
2009-7-29 -41-
2.3 常量字符和字符串的区别
1,字符常量和字符串常量是不同的,字符串常量以 ‘ \0?结尾。
例如:字符串 Hello在内存中的形式:
2,? a”不等于 ‘ a?,”a”占 2个字节,‘ a?1个字节
H e l l o \0
a \0 a
2009-7-29 -42-
2.3 常量字符串变量
char a[20]=“Hello world\n”;
char b[5]=“a”;
char c=?a?;
思考字符串? \x07Operating\tsystem” 有几个字符?显示结果如何?
2009-7-29 -43-
2.3 常量逻辑常数逻辑型常数只有两个,false( 假 ) 和 true
( 真 ) 。 在显示器上显示为 0和 1。
2009-7-29 -44-
2.4 运算符和表达式
2009-7-29 -45-
2.4 运算符和表达式
1、表达式
2、语句和块
3、运算符赋值运算符、算术运算符、关系运算符、
逻辑运算符、位运算符、条件运算符、逗号运算符
2009-7-29 -46-
2.4 运算符和表达式表达式变量,常量是存放数据的地方,那么在 C++
语言中这些数据是如何处理和计算的呢?
在 C++语言中将变量,常量和运算符有机结合在一起组成的就是 表达式,利用表达式
C++可以进行复杂的运算和处理 。
2009-7-29 -47-
例如:
3.2 //简单表达式,值为 3.2
2+3 //常量表达式,值为 5
a //简单表达式,值为变量 a的值
x=(a+b)*c; //较为复杂的表达式表达式是可以嵌套的,比如 y=x=a+b,该表达式先将 a和 b进行相加,然后将结果赋值给
x,再将 x=a+b的值赋给 y。
2.4 运算符和表达式
2009-7-29 -48-
2.4 运算符和表达式表达式定义:
表达式是 操作符,操作数 和 标点符号 组成的序列。
操作符,+ - * / 等操作数:变量、常量、数组等标点符号:空格、回车等
2009-7-29 -49-
2.4 运算符和表达式语句和块
C++中所有的操作运算都通过表达式来实现 。 由表达式和结尾的? ;? 组成一个 C++语句;多条 C++语句通过大括号 {}括起来,组成一个块语句,例如:
{
int temp = x;
x = y;
y = temp;
}
一般来说属于同一个逻辑关系的多条语句组成块语句 。
2009-7-29 -50-
2.4 运算符和表达式运算符运算符具有 优先级 和 结合性 。
优先级:
级别高的先运算,级别低的后运算。例如,*
/ 高于 + -
结合性:
自左向右结合还是自右向左结合。例如,1+2+3,
+自左向右结合。
2009-7-29 -51-
2009-7-29 -52-
2.4 运算符和表达式运算符根据运算符对操作数的要求不同,分成:
一元运算符:
仅需要一个操作数的运算符,例如 ++等二元运算符:
需要两个操作数的运算符,例如,+,-,*,/等,
形如? 操作数 1 运算符 操作数 2?
三元运算符:
需要三个操作数的运算符,只有条件运算符:? 。
2009-7-29 -53-
2.4 运算符和表达式赋值运算符
1,赋值运算符就是? =?
例如,float f=3.15
2,左值,可以合法的放在? =? 左边的操作数右值,可以合法的放在? =? 右边的操作数常量都是右值,所以不能够放在? =? 的左边被赋值;
变量既是左值又是右值,可以放在任何位置 。
2009-7-29 -54-
2.4 运算符和表达式算术运算符
C++提供的算术运算符包括? +,-,*,/,%,
++,--?
1,二元运算符:
+(加 ),-(减 ),*,/,%
2,一元运算符:
+(正号 ),-(负号 ),++,--
2009-7-29 -55-
2.4 运算符和表达式算术运算符注意:
1,? /? 根据操作数不同,运算规律也不同,
整型数为整除运算:例如 5/2=2;
浮点数为通常意义的除法:即 5.0/2.0=2.5。
2,? %? 取余数运算符,只能对整型数进行操作,不允许对浮点数进行操作 。
2009-7-29 -56-
2.4 运算符和表达式算术运算符
C++中提供了两个特殊的运算符,++,--表示将操作数减 1。
++,--运算符根据操作数的位置不同,又称为前置
( ++i)和后置 (i++)
1,前置 ( ++i),
先自身加 1,然后再将加 1的值作为 ( ++i) 表达式的值;
2,后置 ( i++),
将 i作为 ( i++) 表达式的值,然后自身再加 1。
2009-7-29 -57-
例 2.6:自增运算符的使用
#include <iostream>
using namespace std;
void main()
{
int i =1;
cout<<”i=”<<i<<endl;
cout<<”i++:,<<i++<<endl;
cout<<”i=”<<i<<endl;
cout<<” ++i:,<<++i<<endl;
cout<<”i=”<<i<<endl;
}
1
1
2
3
3
2009-7-29 -58-
2.4 运算符和表达式算术运算符在 C++中可以将算术运算符和赋值运算符结合在一起进行运算,因此 C++还提供 5种复合的赋值运算符 +=,
-=,*=,/= 和 %=。
例如:
x+=y 相当于 x = x+y
x-=y 相当于 x = x-y
x*=y 相当于 x = x*y
x/=y 相当于 x = x/y
x%=y 相当于 x = x%y
2009-7-29 -59-
例如:
#include <iostream>
using namespace std;
void main()
{
int x=2,y=3;
x*=y+8;
cout<<x<<endl;
}
原因,x*=y+8 等价于 x=x*(y+8)
//显示 22
2009-7-29 -60-
2.4 运算符和表达式算术运算符这些运算符的优先级由高到低依次为:
1,+(正号 ),-(负号 ),++,--
2,*,/,%
3,+,-
4,=,+=,-=,*=,/=,%=
2009-7-29 -61-
2.4 运算符和表达式注意在进行算术运算时,很可能出现溢出,溢出是指在给一个变量赋值时超出了其数据类型表示的范围 。 溢出不会引起编译错误的,但运行结果会出现偏差 。
例如:
short int i=40000;
cout<<i<<endl;
输出结果,-25536
2009-7-29 -62-
2.4 运算符和表达式关系运算符关系运算符有 ==,!=,>=,>,<=,<六种;
这些运算符的优先级由高到低依次为:
1,>=,>,<=,<
2,==,!=
由关系运算符将两个表达式连接起来,就是关系表达式;关系表达式的结果类型为 bool,
值只能为 true或 false,屏幕显示为 1或 0。
2009-7-29 -63-
例如
int a=1,b=2,c=3;
cout<<(a==b)<<endl;
cout<<(a!=b)<<endl;
cout<<(a>=b)<<endl;
cout<<(a<b)<<endl;
d=a>b==c>a+5;
cout<<d<<endl; 结果 true,输出为 1
结果 false,输出为 0
结果 true,输出为 1
结果 true,输出为 1
结果 false,输出为 0
2009-7-29 -64-
2.4 运算符和表达式逻辑运算符逻辑运算符有 &&,||,! 三种;这些运算符的优先级由高到低依次为
1,!
2,&&
3,||
除了逻辑非,逻辑运算的级别低于关系运算。
逻辑表达式的结果类型也为 bool,值只能为
true或 false,屏幕显示为 1或 0。
2009-7-29 -65-
2.4 运算符和表达式注意如果多个表达式用 && 或 || 连接,为了提高判断效率,只要能够确定表达式的结果了,运行就不再继续 。
例如:
int a=1,b=2;
if (a>b && b++)
cout<<”b的值没有被改变 。 <<endl;
cout<<b<<endl; 运行结果,2
2009-7-29 -66-
2.4 运算符和表达式位运算符一般高级语言,byte
C语言,bit
C++语言中提供了六个位运算符,可以对整数进行位操作,分别是按位与 ( &),按位或 ( |),按位异或 ( ^),按位取反 ( ~),左移位 ( <<),右移位 ( >>) 。
2009-7-29 -67-
2.4 运算符和表达式按位与 ( &)
按位与操作的作用是将两个操作数对应的每一位分别进行 逻辑与 操作 。
例如:计算 3 & 5
3,0 0 0 0 0 0 1 1
5,0 0 0 0 0 1 0 1
3 &5,0 0 0 0 0 0 0 1
例如:
将 char a;的最低位置 0:
取 int a;的低字节:
a=a & 0376;
char c= a & 0377;
2009-7-29 -68-
2.4 运算符和表达式按位或 ( |)
按位或操作的作用是将两个操作数对应的每一位分别进行逻辑或操作 。
例如:计算 3 | 5
3,0 0 0 0 0 0 1 1
5,0 0 0 0 0 1 0 1
3 |5,0 0 0 0 0 1 1 1
例如:
将 int a;的低字节置 1,a = a | 0xff;
2009-7-29 -69-
2.4 运算符和表达式按位异或 ( ^)
按位异或操作的作用是将两个操作数对应的每一位分别进行异或操作 。
具体运算规则:
1^1=0,0^0=0,1^0=0^1=1
例如:计算 3^5
3,0 0 0 0 0 0 1 1
5,0 0 0 0 0 1 0 1
3 ^5,0 0 0 0 0 1 1 0
2009-7-29 -70-
2.4 运算符和表达式按位异或 ( ^)
例如:
如果使 8位二进制数 01111010的后四位翻转?
可以将该二进制数与 00001111进行异或操作:
0 1 1 1 1 0 1 0
( ^) 0 0 0 0 1 1 1 1
0 1 1 1 0 1 0 1
2009-7-29 -71-
2.4 运算符和表达式按位取反 ( ~)
按位取反是一个一元运算符,它的作用是将两个操作数对应的每一位分别进行取反操作 。
具体运算规则,~1=0,~0=1。
例如:计算 ~5
5,0 0 0 0 0 1 0 1
~5,1 1 1 1 1 0 1 0
2009-7-29 -72-
2.4 运算符和表达式左移 <<:
按照指定的位数将一个二进制数值向左移动 。 左移后,低位补 0,移出的高位舍弃 。
右移 >>:
按照指定的位数将一个二进制数值向右移动,右移后,移出的低位舍弃 。
如果是 无符号数则高位补 0,如果是有符号数则高位补符号位或 0,在 VC++6.0环境下 高位补符号位 。
2009-7-29 -73-
例子
char a= -8;
a =a>>2;
cout<<”a=”<<(int)a<<endl;
2009-7-29 -74-
例子
char a=2;
a =a<<1;
cout<<”a=”<<(int)a<<endl;
2009-7-29 -75-
2.4 运算符和表达式位运算符在 C++中可以将位运算符和赋值运算符结合在一起进行运算,因此 C++还提供另外 5种运算符 &=,|=,^=,
<<=和 >>=。
例如:
x&=y 相当于 x = x&y
x|=y 相当于 x = x|y
x^=y 相当于 x = x^y
x<<=y 相当于 x = x<<y
x>>=y 相当于 x = x>>y
2009-7-29 -76-
2.4 运算符和表达式位运算符这些位运算符的优先级由高到低依次为:
1,~
2,<<,>>
3,&
4,^
5,|
6,&=,|=,^=,<<=和 >>=
2009-7-29 -77-
2.4 运算符和表达式条件运算符条件运算符语法格式为:
表达式 1? ( 表达式 2),( 表达式 3) ;
运算的结果是:如果表达式 1的值为真,则返回表达式 2的值,否则返回表达式 3的值 。
例 1,x = a<b? a,b;
例 2:
int x=0,y=1;
cout<<(x>y?x:y)<<endl;
2009-7-29 -78-
2.4 运算符和表达式逗号运算符逗号表达式的语法格式为:
表达式 1,表达式 2,……,表达式 n;
C++顺序计算表达式 1,表达式 2,……,
表达式 n的值,并将最后一次计算的结果作为逗号表达式的结果 。
例如:
int a,b,c;
a=1,b=2,c=a+b;
2009-7-29 -79-
例子
int a,b,c,d;
d=(a=1,b=2,c=a+b,a+b+c);
cout<<d<<endl;
6
2009-7-29 -80-
2.4 运算符和表达式数据类型转换当表达式中出现多种数据类型的混合运算时,往往需要进行类型转换 。 表达式中的类型转换分成两种:
1,隐式类型转换
2,强制类型转换 。
2009-7-29 -81-
2.4 运算符和表达式
1,隐式类型转换各种二元运算符在进行运算时都要求两个操作数的数据类型一致 。 如果类型不一致,则系统自动对数据进行转换 ( 隐式类型转换 ) 。
转换的基本原则,
将精度较低,范围较小的类型转换成精度较高,范围较大的类型 。
char → short → int → long → float → double
2009-7-29 -82-
2.4 运算符和表达式
1,隐式类型转换对于同一种精度的无符号数和有符号数,
在进行算术运算中,有符号数向着无符号数方向进行隐式类型转换:
signed → unsigned。
例如:
int a=100;
unsigned int i=99;
cout<<i - a<<endl;
思考一 下,如 果将
unsigned int i=99;改为
unsigned short i=99;结果如何?
2009-7-29 -83-
2.4 运算符和表达式
1,隐式类型转换逻辑运算符要求参与运算的操作数为 bool类型,如果是其他类型,则系统自动将其转换成 bool类型,转换规则,0为 false,非 0为 true。
赋值运算符要求? =? 左右两边的操作数数据类型相同,如果类型不一致,则自动将右边的操作数类型向着左边的操作数类型转换 。
例如:
int i=3.15;
cout<<i<<endl;
2009-7-29 -84-
2.4 运算符和表达式
2,强制类型转换强制类型转换通过是类型说明符和括号来实现的显式转换,其语法格式为:
( 数据类型名 ) 表达式或 数据类型名 ( 表达式 )
例如:
int i=97;
cout<<(char)i<<endl;
float f=3.75;
cout<<(int)f<<endl;
2009-7-29 -85-
2.5 I/O流控制
2009-7-29 -86-
2.5 I/O流控制在 iostream库中包含有一个标准输入流对象 cin和一个标准输出流对象 cout,分别用来实现从键盘读取数据,以及将数据在屏幕输出。
1,cin
2,cout
3,I/O流的格式控制
2009-7-29 -87-
2.5 I/O流控制
1,标准输入流 cin
cin负责从键盘读取数据,使用提取操作符? >>?
就可以将键盘键入的数据读入到变量中 。 语法格式为:
cin>>变量 1>>变量 2… >>变量 n;
例如:
int a,b;
char ch;
cin>>a>>b>>ch;
2009-7-29 -88-
2.5 I/O流控制
2,标准输出流 cout
cout负责将变量或常量中的数据输出到屏幕,
使用插入操作符? <<? 就可以将变量或常量的数据显示在屏幕上 。
例如:
cout<<”Hello world!\n”;
cout能够自动识别? <<? 后面的数据类型并进行显示,并且可以从左到右一次显示多个变量 。
2009-7-29 -89-
例子
#include <iostream>
using namespace std;
void main()
{
int a,b;
char ch;
cout<<”请按顺序输入 2整数和 1字符,\n”;
cin>>a>>b>>ch;
cout<<”a=”<<a<<” b=”<<b<<” ch=”<<ch<<endl;
}
2009-7-29 -90-
2.5 I/O流控制
3,IO流的格式控制库文件 iomanip
常用控制符:
setfill(c) 设置填充字符
setw(n) 设置域宽为 n
2009-7-29 -91-
2.5 I/O流控制设置输出宽度和填充字符
setw(n)
设置域宽,即设置? <<? 符号后面的数据占用的屏幕宽度。
setfill(c)
设置填充字符,即? <<? 符号后面的数据长度小于域宽时,使用什么字符进行填充。
2009-7-29 -92-
setw(n) 和 setfill(c)
例 1:
cout<<setw(8)<<?a?<<setw(8)<<?b?<<endl;
输出结果:
例 2:
cout<<setfill(?*?)<<setw(5)<<?a?<<endl;
输出结果:
_ _ _ _ _ _ _a_ _ _ _ _ _ _b
****a
2009-7-29 -93-
#include <iostream>
#include <iomanip>
using namespace std;
void main(){
cout<<setfill('*')
<<setw(2)<<'\n'
<<setw(3)<<'\n'
<<setw(4)<<'\n'
<<setw(5)<<'\n'
<<setw(6)<<'\n'
<<setw(7)<<'\n'
<<setw(8)<<'\n';
}
*
**
***
****
*****
******
*******
2009-7-29 -94-
2.5 I/O流控制注意 1
除了 setw()控制符外,其他控制符一旦设置,
则对其后的所有输入输出产生影响。而 setw()
控制符只对其后输出的第一个数据有效,对其他数据没有影响,所以如下代码:
cout<<setw(8) <<?a?<<?b?<<endl;
输出结果,_ _ _ _ _ _ _ab
2009-7-29 -95-
2.5 I/O流控制注意 2
setw()的默认为 setw(0),意思是按实际输出 。
如果输出的数值占用的宽度超过 setw(int n)设置的宽度,则按实际宽度输出 。
例如:
float f=0.12345;
cout<<setw(3)<<f<<endl; 0.12345
2009-7-29 -96-
2.5 I/O流控制
3,I/O流的格式控制
C++默认输出浮点数的有效位为 6位,那么要想控制输出的 数据的长度,该如何呢?
比如,float f=3.1234567;如何让显示结果为 3.12?
C++提供了 setprecision(int n)可以控制显示浮点数的有效位 。
2009-7-29 -97-
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float f=17/7.0;
cout<<f<<endl;
cout<<setprecision(0)<<f<<endl;
cout<<setprecision(1)<<f<<endl;
cout<<setprecision(2)<<f<<endl;
cout<<setprecision(3)<<f<<endl;
cout<<setprecision(6)<<f<<endl;
cout<<setprecision(8)<<f<<endl;
}
2.42857
2.42857
2
2.4
2.43
2.42857
2.4285715
2009-7-29 -98-
2.5 I/O流控制
3,I/O流的格式控制如何控制小数的位数?
setiosflags(ios::fixed)控制符是用定点方式表 示 浮 点 数,将 setprecision(int n) 和
setiosflags(ios::fixed) 结合,可 以 使 用
setprecision(int n)控制小数点右边小数的个数 。
2009-7-29 -99-
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float f=17/7.0;
cout<<setiosflags(ios::fixed);
cout<<setprecision(0)<<f<<endl;
cout<<setprecision(2)<<f<<endl;
cout<<setprecision(3)<<f<<endl;
cout<<setprecision(4)<<f<<endl;
}
2
2.43
2.429
2.4286
2009-7-29 -100-
2.5 I/O流控制
3,I/O流的格式控制如何控制指数表示的小数个数?
setiosflags(ios::scientific)控制符使用指数方式显示浮点数,将 setprecision(int n)和
setiosflags(ios::scientific)结合,可以使用
setprecision(int n)控制指数表示法的小数位数。
2009-7-29 -101-
#include <iostream>
#include <iomanip>
using namespace std;
void main()
{
float f=17/7.0;
cout<<setiosflags(ios::scientific);
cout<<setprecision(2)<<f<<endl;
cout<<setprecision(3)<<f<<endl;
cout<<setprecision(4)<<f<<endl;
}
2.43e +000
2.429e +000
2.4286e +000
2009-7-29 -102-
总结
1、基本数据类型有哪些?
2、如何定义和使用变量和常量?变量和常量的异同?
3、运算符的优先级?
4、数据类型如何转化?
5,I/O流的使用技巧