第二章 C++基础知识
2,1 C++ 的 词 法 单 位
2,5 运算符、表达式和语句
2,6 简 单 的 输 入 输 出
2,4 数 组 与 字 符 数 组
2,3 常 量 和 变 量
2,2 C++ 中 的 数 据 类 型
2.1 C++的词法单位
2,1,1 C++ 的 字 符 集
2,1,2 关 键 字
2,1,3 标识符 ( ID,identifier)
2,1,4 标 点 符 号
2.1.1 C++的字符集
26个小写字母
abcdefghijklmnopqrstuvwxyz
26个大写字母
ABCDEFGHIJKLMNOPQRSTUVWXY
Z
10个阿拉伯数字
0123456789
其他符号 + - * / =,,_,;? \ " ' ~ | ! # % & () [] {} ^ < > 空格
2.1.2 关 键 字数据类型说明符与修饰符
bool char wchar_t class const double enum float
int long short signed struct union unsigned void
volatile
存储类型说明符 auto extern inline register static
访问说明符 Friend private protected public
其它说明符 asm operator template this typedef virtual
语句与标号 break case catch continue default do elsefor goto if return switch throw try while
运算符及逻辑值 delete false new sizeof true
表 2-1 C++常用关键字及分类
2.1.2 关 键 字
VC++中还有一些专用的关键字,它们都以双下划线开头:
_ _asm _ _based _ _cdecl _ _emit _ _export
_ _far _ _fastcall _ _fortran _ _huge
_ _interrupt _ _loadds _ _multipile_inheritance
_ _near _ _pascal _ _saveregs _ _segment
_ _self _ _signal_inheritance _ _stdcall
_ _virtual_inheritance
2.1.3 标识符合法标识符 由字母或下划线开始,由字母、数字、下划线组成,其有效 长度为 1~ 31个字符,长度超过 31个字符者只识别前 31个字符,VC++标识符长度为 1~ 247个字符 。
例,判断下面哪些是合法的标识符:
MyFile 94Salary
Salary94 Salary 94
amount $amount
void f3.5
Num_of_Student
2.1.4 标点符号标点符号包括
#,( ),{}、,,:,;,",'等。
2.2 C++中的数据类型图 2-1 C++的数据结构
C++的数据类型基本数据类型非基本数据类型数组 type []
指针 type *
结构 struct
联合 union
枚举 enum
类 class
整 型 int
字符型 char
逻辑型 bool
无值型 void
实 型 float
双精度型 double实 型类 型 名 称 占用字节数取 值 范 围
bool 布尔型 true,false
(signed) char 有符号字符型
1 -128? 127
unsiged char 无符号字符型
1 0? 255
(signed) short
(int)
有符号短整型
2 -32768?32767
unsigned short
(int)
无符号短整型
2 0? 65535
(signed) int 有符号整型 4 -231?( 231-1)
unsigned (int) 无符号整型 4 0?( 232-1)
(signed) long
(int)
有符号长整型
4 -231?( 231-1)
unsigned long
(int)
无符号长整型
4 0?( 232-1)
float 实型 4 -1038? 1038
double 双精度型 8 -10308?10308
long double 长双精度型 8 -10308?10308
void 无值型 0 无值
2.3 常量和变量
2.3.1 变 量
2.3.2 字面变量
2.3.3常变量及常量说明符 const
2.3.1 变 量
1 变量说明
2 变量赋初值
1 变量说明在 C++中,变量说明的一般格式为:
[存储类型 ] <数据类型 > <变量名 1> [,<变量名 2>,?,<变量名 n>];
下面是变量说明的几个例子:
int i,j,k; //说明三个整型变量 i,j,k
float x,y,z; //说明三个实型变量 x,y,z
char c1,c2; //说明两个字符型变量 c1,c2
double dx; //说明一个双精度型变量 dx
2 变量赋初值给变量赋初值称为初始化,有两种方法:
( 1) 变量说明时直接赋初值 。
例如:
int a=3,b=4,c=5;
float x=3.0;
( 2) 用赋值语句赋初值 。
例如:
float x,e;
x=3.5;
e=2.71828;
2.3.2 字面常量
1,整型常量
4,字符串常量
3,字符型常量
2,实型常量
1,整型常量十进制八进制十六进制其他十进制十进制表示与我们熟悉的书写方式相同 。

15 -24
八进制八进制表示 以 0打头,由数字 0?7组成,用来表示一个八进制数 。
如:
012 //八进制数 12,即十进制数 10
-0655 //八进制数 -655,即十进制数 -429
十六进制十六进制 以 0X( 大小写均可 ) 打头,由数字
0?9和字母 A?F( 大小写均可 ) 组成,用来表示一个十六进制数 。
以下使一些常整数的例子:
0x32A //十六进制数 32A,
即十进制数 810
-0x2fe0 //十六进制数 -2fe0,
即十进制数 -12256
其 他整数常量还可以表示长整数和无符号整数 。 长整型常数以 L或 l结尾,无符号常整数以 U或 u结尾,以
UL或 LU( 大小写均可 ) 结尾则可表示无符号长整型常数 。
例如:
-84L //十进制长整数 -84
026U //八进制表示的无符号整数 26
0X32LU //十六进制表示的无符号长整型数 32。
2,实型常量
(1)一般形式与平时书写形式相同,由数字 0? 9和小数点组成 。 例如:
0.23 -125.76 0.0,46 -35.
(2) 指数形式(也称为科学表示法)表示为 尾数乘以 10的次方形式,由尾数,E或 e和阶数组成 。指数形式要求在 E或 e前面的尾数部分必须有数字,后面的指数部分必须为整数。
例,判断下列表示是否合法
123E12
-.34e-2 E4
1.43E3.5
3,字符型常量字符常量是用单引号引起来的单个字符 。 在内存中保存的是字符的 ASCII码值 。 在所有字符中,有些是可显示字符,通常就用单引号引起来表示 。
如:
′ a′ //字符 a
′ @′ //字符 @
′ 4′ //字符 4
′ ′ //空格字符
4.字符串常量用双引号引起来的若干个字符称为字符串常量 。
例如:
″I am a Chinese.″,″123″,″a″,″ ″
字符串常量与字符型常量的区别字符串常量
″a″//占两个字节,
存放 ′a′和 ′\0′,
值为 0x6100
字符型常量
′a′ // 占 一 个 字节,
存放 ′a′
值为 0x61\0
a a
2.3.3 常变量及常量说明符 const
2.4 数组与字符数组
2.4.1 数 组
2.4.2 字 符 数 组
2.4.1 数组定义一个一维数组的一般格式为:
[存储类型 ] <数据类型 > <数组名 > <[常量 ]>;
一般格式为,<数组名 > <[表达式 ]>,表达式用来计算下标值 。
C++中规定数组第一个元素的下标为 0。
以下是定义数组的例子:
int m[5]; //定义数组 m,其中有 5个整数,分别为
m[0],m[1],… m[4]
const int N=3;
float x[N]; //数组 x中有 3个实数,分别为
x[0],x[1],x[2]
2.4.1 数组下列定义是 非法 的:
int count;
float s[count] //数组个数不能是变量,
必须在定义时指明
const float Num=3;
int n[Num] //数组个数不能是实数
2.4.1 数组
【 例 2,1】 一个使用数组的简单例子 。
# include <iostream.h>
void main(){
int int_array[4];
int_array[0]=1;
int_array[1]=1;
int_array[2]=2;
int_array[3]=int_array[1]+int_array[2];
cout<<int_array[3]<<′\n′;
}
Array[3]=
Array[2]=
Array[1]=
Array[0]= 1
1
2
1+2=3
3
输出 1
1
2
3
2.4.2 字符数组如果数组中的元素为字符,就成为字符数组 。
例如:
char string1[10] //可用来保存 10个字符的字符数组
char city_name1[]={′N′,′a′,′n′,
′j′,′i′,′n′,′g′}
2.4.2 字符数组
【 例 2,2】 字符数组和字符串处理函数的应用 。
# include <iostream.h>
# include <string.h>
void main() {
char s1[]=”Hello C++”;
char s2[10],s3[20];
s2[0]=′B′; s2[1]= ′e′; s2[2]= ′g′;
s2[3]= ′i′; s2[4]= ′n′;s2[5]= ′\0′;
//对字符串处理非常重要
strcpy(s3,s2);
cout<<”The length of \’’”<< s1<<”\” is:”<<strlen(s1)<< ′\n′;
cout<<s2<<′\t′<<s3<<′\n′;
}
2.5 运算符、表达式和语句
2,5,1运算符、优先级和结合性
2,5,2 表达式
2,5,3 算术类型转换和赋值类型转换
2,5,4 强制类型转换运算符
*2,5,5 求值次序与副作用
2,5,6 语句
2.5.1 运算符、优先级和结合性
1 算术运算符
2 关系运算符和逻辑运算符
3 位运算符
4 赋值运算符
5 自增、自减运算
6 sizeof( )运算符
1.算术运算符优先级 运算符 名 称
3 + 正,单目
- 负,单目
5 * 乘,双目
/ 除,双目
% 求余,双目
6 + 加,双目
- 减,双目
2.关系运算符和逻辑运算符优先级运算符 名 称 语 义
2 ! 逻辑非,单目 操作数的值为真,则结果为假
12 && 逻辑与,双目 当两个操作数全为真时,结果为真,否则为假
13 || 逻辑或,双目 两个操作数中有一个为真,则结果为真,
表 2-6 逻辑运算符
3,位运算符
( 1)按位取反运算符,~”
( 2)左移运算符,<<”
( 3)右移运算符,>>”
( 4)按位与运算符,&”
( 5)按位或运算符,|”
( 6)按位异或运算符,^”
4.赋值运算符例如下面的赋值运算是错误的:
3.1415926=pi //左值不能是常数
x+y=z //左值不能是表达式
const int N=30;
N=40 //左值不能是常变量
5.自增自减运算例如:
int i=5,j=5,m,n;
m=i++; //相当于 m=i; i=i+1;
结果 i的值为 6,m的值为 5
n=++j; //相当于 j=j+1;n=j;
结果 j的值为 6,n的值为 6
6,sizeof( ) 运算符用于计算一个操作数类型或一个变量的字节数 。
一般格式为:
sizeof (<数据类型 >)
或 sizeof(<变量名 >)
例如:
sizeof(int) //值为 4
sizeof float //值为 4
double x;
sizeof x //值为 8
2.5.2 表达式
1 算术表达式
2 关系表达式
3 逻辑表达式和逻辑表达式求值的优化
4 赋值表达式与复合赋值表达式
5 逗号表达式
1.算术表达式
2.关系表达式例如:
a>b>c //等同于 (a>b)>c,先求 a>b 的值,
再将结果 0或 1与 c比较大小
a+b>c+d //等同于 (a+b)>(c+d),
结果为 0或 1
y=a>b //计算 a>b的值 0或 1
赋给 y,y的值为 0或 1
3.逻辑表达式和逻辑表达式求值的优化例如,求下列逻辑表达式的值:
int a=10,b=20,c=30;
float x=1.8,y=2.4;
a<b&&x>y||a<b-!c
根据 优先级,该表达式等同于
(a<b)&&(x>y)||(a<(b-(!c)))
求值顺序 为:先求 a<b,值为 1,再求出 x>y,值为 0,再求
1&&0,值为 0;下面求 !c,值为 0,再求 b-0,值为 20,再求 a<b,
值为 1;最后求 0||1,值为 1。
所以整个 表达式的值 为 1。
4.赋值表达式与复合赋值表达式赋值表达式的格式为:
<变量 > = <表达式 >
复合赋值运算符的要求与格式与赋值运算符完全相同,表示为:
<变量 > <复合赋值运算符 > <表达式 >
它等同于
<变量 > = <变量 > <运算符 > ( <表达式 >)
5,逗号表达式
C++中,逗号既是分隔符,又是运算符,用逗号连接起来的表达式称为逗号表达式 。
一般格式为:
<表达式 1>,<表达式 2>,…,<表达式 n>
2.5.3算术类型转换和赋值类型转换
1 不同类型数据的混合运算
2 赋 值 类 型 转 换
1.不同类型数据的混合运算
char
short
int
long
unsigned char
unsigned short
unsigned int
unsigned long
float
double
long double
图 2.2 数据类型转换方向
2.赋值类型转换
2.5.4 强制类型转换运算符其格式为:
(<type>) <表达式 > //对某个表达式作强制类型转换或
<type> (<表达式 >) //对整个表达式作强制类型转换
*2.5.5 求值次序与副作用
2.5.6 语句
1 表达式语句
2 空语句
3 复合语句
4 函数调用语句
5 流程控制语句
2.6 简单的输入输出
2.6.1 C++的输入输出
2.6.2 C语言的输入输出
2.6.1 C++的输入输出
cin用来在程序执行期间给变量输入数据,
一般格式为:
cin >> <变量名 1>[>> <变量名 2> >>… >> <变量名 n>];
cout实现将数据输出到显示器的操作,
一般格式为:
cout<< <表达式 1> [<< <表达式 2> <<… << <表达式 n>];
1,字符的输入输出
cin 与 cinget( )的区别
1.字符的输入输出
( 1) cin
例如,
char c1,c2,c3;
cin>>c1; //A
cin>>c2>>c3;
程序执行到 A行时,等待用户输入数据 。 若输入:
Abc <CR>,则 cin分别将字符 A,b,c赋给变量 c1、
c2,c3。
1.字符的输入输出
( 2) cinget( )
例如:
char c1,c2,c3,c4;
cin.get (c1); //B
cin.get (c2);
cin.get (c3);
程序执行到 B行时,若输入:
A b<CR>
则执行结果是,字符 ′A′、空格、字符 ′b′分别赋给变量 c1,c2、
c3;输入行中仍保留回车符。
2,字符串常量的输出请看下例:
char c1,c2,c3;
cout<<”Input c1,c2,c3:”<<endl;
cin>>c1<<c2<<c3; //C
cout<<”c1 is,<<c1<<′\t′<<”c2 is,
<<c2<<′\t′<<”c3 is,<<c3<<endl;
3,十进制数据的输入输出请看下例:
int i,j;
float x,y;
cout<<”Input i,j,x,y:”<<endl;
cin>>i>>j; //D
cin>>x>>y;
cout<<”i=”<<i<<′\t′<<”j=”<<j<<endl;
cout<<”x+y=”<<x+y<<endl;
4,输入输出的格式控制
( 1)其他进制数据的输入输出
( 2)设置数据间隔
( 3)实数的输出格式
( 1)其他进制数据的输入输出例如:
int i,j,k,l;
cout<<”Input i(oct),j(hex),k(hex),l(dec):”<<endl;
cin>>oct>>i; //输入为八进制数
cin>>hex>>j; //输入为十六进制数
cin>>k; //输入仍为十六进制数
cin>>dec>>l; //输入为十进制数
cout<<”hex:”<<”i=”<<hex<<i<<endl;
cout<<”dec:”<<”j=”<<dec<<j<<′\t′<<”k=”<<k<<endl;
cout<<”oct:”<<”l=”<<oct<<l;
cout<<dec<<endl; //恢复十进制输出状态
( 2)设置数据间隔例如:
int i=2,j=3;
float x=2.6,y=1.8;
cout<<setw(6)<<i<<setw(10)<<j<<endl;
cout<<setw(10)<<i*j<<endl;
cout<<setw(8)<<x<<setw(8)<<y<<endl;
输出结果为:
2 3
6
2.6 1.8
( 3)实数的输出格式形式为:
cout,precision(<表达式 >);
例如,
float pi=3.1415926,x=25.61876;
cout.precision(2);
cout<<”pi=”<<pi<<′\t′;
cout.precision(4);
cout<<”x=”<<x<<endl;
执行后输出:
pi=3.14 x=25.6188
( 3)实数的输出格式指明按定点方式输出的语句为:
cout.setf(ios::fixed,ios::floatfield);
例如:
float x=3.4,y=42.136,z=8.5;
cout<<setw(8)<<x;
cout.setf(ios::scientific,ios::floatfield);
cout<<setw(15)<<y<<setw(8)<<z<<endl;
cout.setf(ios::fixed,ios::floatfield);
执行后输出:
3,4 0.42136e2 8.5
使用 setw(),cout.precision()和 cout.setf()必须在程序的开始处增加:
#include <iomanip.h>
2.6.2 C语言的输入输出
C的输入输出分别通过函数 scanf()和 printf()
实现 。
一般格式为:
scanf(格式控制串,地址项序列 );
printf(格式控制串,输出项序列 );
2.6.2 C语言的输入输出
Input three sides a,b,c:
3.5 2.0,4.5
a=
b=
c=
s=
area=
3.5
2.0
4.5
5.0
11.25
s=(a+b+c)/2
寄存器
area=sqrt(s*(s-a)*(s-b)*(s-c))
寄存器输出,
【 例 2,3】 输入三角形三边长 ( 假定能够构成三角形 ),计算三角形的周长和面积 。
程序如下:
# include <stdio.h>
main() {
float a,b,c;
float s,area;
printf(“Input three sides a,b,c:\n”);
scanf(“%d%d%d”,&a,&b,&c);
s=(a+b+c)/2;
area=sqrt(s*(s-a)*(s-b)*(s-c));
printf(“a=%10.2f,b=%10.2f,c=%10.2f\n”,a,b,c);
printf(“s=%10.2f,area=%10.2f\n”,s,area); }