C++语言程序设计
第 2讲,C++简单程序设计
/5
C++语言概述
? C++是从 C语言发展演变而来的,首先是一个更
好的 C。
?引入了类的机制,最初的 C++被称为, 带类的 C”。
? 1983年正式取名为 C++。
?从 1989年开始 C++语言的标准化工作。
?于 1994年制定了 ANSI C++标准草案。
?于 1998年 11月被国际标准化组织( ISO)批准为
国际标准,成为目前的 C++。
C++的特点
?全面兼容 C
?它保持了 C的简洁、高效和接近汇编语言等特
点。
?对 C的类型系统进行了改革和扩充。
?支持面向对象的方法
?C++支持 面向过程 的程序设计,但不是一个纯
正的面向对象的语言。
C++程序实例 — 例 2-1
//2_1.cpp
#include <iostream>
using namespace std;
int main()
{
cout<<"Hello!\n";
cout<<"Welcome to c++!\n";
}
运行结果,
Hello!
Welcome to c++!
数据类型
—— 常量与变量
#include <iostream>
using namespace std;
#define PI 3.14159
int main()
{
const int PRICE=30;
int num,total;
float v,r,h;
num=10;
total=num*PRICE;
cout << total << endl;
r=2.5;
h=3.2;
v=PI*r*r*h;
cout << v << endl;
}






先声明,
后使用
数据类型 — 整型数据及取值范围
类型 说明符 位数 数值范围
布尔 bool false,true
字节 char 8 -128~ 127
短整数 short 16 -32768~ 32767
-215~( 215-1)
长整数 long 32 -231~ (231-1)
无符号
byte 8 0~ 256
unsigned short 16 0~ 65535( 216-1)
unsigned [int] 32 0~ (232-1)
unsigned long 32 0~ (232-1)
数据类型 — int 类型
? int 类型
? 与操作系统 有关 。
? Windows 3.0 内核,为 16位
? Win32 内核,为 32位
? 未来 64系统中( Vista),将为 64位
? int 有关的数据类型
? int
? unsigned int
数据类型 — 浮点数据及取值范围
? float 32位
? #define FLT_MAX 3.402823466e+38F /* max value */
? = 3.402823466 × 1038
? F表示单精度浮点数:保证小数点后 7位精度
? double 64位
? #define DBL_MAX 1.7976931348623158e+308
? = 1.7976931348623158 × 10308
? 双精度数:保证小数点后 15位精度
数据类型的转换
?整数间转换
byte a = 100;
unsigned long b
=(unsigned long)a; // 强制类型转换
byte c = (byte) b;
// 需要注意精度损失的问题
?浮点数与整数转换
float a = 3.1415926f;
int b=(int)a; // b = 3
?如何实现四舍五入?
? int b=(int)(a+0.5f);
变量的存储类型
?auto
?属于一时性存储,其存储空间可以被若干变量多次覆盖使用。
?register
?存放在通用寄存器中。
?extern
?在所有函数和程序段中都可引用。
?static
?在内存中是以固定地址存放的,在整个程序运行期间都有效。
关系运算与关系表达式
?关系运算是比较简单的一种逻辑运算,优先
次序为,
< <= > >= == !=
优先级相同(高) 优先级相同(低)
?关系表达式是一种最简单的逻辑表达式
其结果类型为 bool,值只能为 true 或 false。
?例如,a > b,c <= a+b,x+y == 3
逻辑运算与逻辑表达式
?逻辑运算符
!(非 ) &&(与 ) ||(或 )
优先次序,高 → 低
? 逻辑表达式
例如,(a > b) && (x > y)
其结果类型为 bool,值只能为 true 或 false
条件运算符与条件表达式
?一般形式
表达式 1? 表达式 2, 表达式 3
表达式 1 必须是 bool 类型
?执行顺序
? 先求解 表达式 1,
? 若 表达式 1的值为 true,则求解 表达式 2,表达式 2
的值为最终结果
? 若 表达式 1的值为 false,则求解 表达式 3,表达式 3
的值为最终结果
?例,x = (a>b)? a, b;
sizeof 运算符
? 语法形式
sizeof (类型名 )
或 sizeof (表达式 )
? 结果值,
“类型名”所指定的类型或“表达式”的结果类
型所占的字节数。
? 例,
sizeof(short)
sizeof(x)
位运算 —— 按位与( &) AND
?运算规则
? 将两个运算量的每一个位进行逻辑 与 操作
?举例:计算 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
?用途,
? 将某一位置 0,其他位不变。例如,
将 char型变量 a的最低位置 0,a=a&0376;
? 取指定位。
例如:有 char c; int a;
取出 a的低字节,置于 c中,c=a&0377;
位运算 —— 按位或( |) OR
?运算规则
?将两个运算量的每一个位进行逻辑 或 操作
?举例:计算 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
?用途,
?将某些位置 1,其他位不变。
例如:将 int 型变量 a 的低字节置 1,
a = a | 0xff;
位运算 —— 按位异或( ^) XOR
?运算规则
?两个操作数进行异或,
若对应位 相同,则结果该位为 0,
若对应位 不同,则结果该位为 1,
?举例:计算 071^052
071,0 0 1 1 1 0 0 1
052,(^) 0 0 1 0 1 0 1 0
071^052, 0 0 0 1 0 0 1 1
位运算 —— 按位异或( ^) XOR
?用途,
?使特定位翻转(与 0异或保持原值,与 1异或
取反)
例如:要使 01111010 低四位翻转,
0 1 1 1 1 0 1 0
(^) 0 0 0 0 1 1 1 1
0 1 1 1 0 1 0 1
位运算 —— 取反 (~) NOT
单目运算符,对一个二进制数按位取反。
例,025,0000000000010101
~025,1111111111101010
位运算 —— 移位 SHIFT
?左移运算( <<) 左移后,低位补 0,高位舍弃。
例,83 << 3 ? 0x53 << 3 ? 0101 0011 << 3
?1001 1000 ? 0x98 ? 152
?右移运算( >>) 右移后,低位舍弃,高位补 0或补
“符号位”
?例,152>>4 ? 0x98>>4 ? 1001 1000 >>4
? 0000 1001 ? 9
高位舍弃
低位舍弃
低位补 0
高位补 0
运算符分类
1,算术运算符 加 (+)、减 (-)、乘 (*)、除 (/)、求余 (或称模运
算,%)、自增 (++)、自减 (--)共七种。
2,关系运算符 大于 (>)、小于 (<)、等于 (==),大于等于 (>=)、
小于等于 (<=)和不等于 (!=)六种。
3,逻辑运算符 与 (&&)、或 (||)、非 (!)三种。
4,位操作运算符 位与 (&)、位或 (|)、位非 (~)、位异或 (^)、左
移 (<<)、右移 (>>)六种。
5,赋值运算符 赋值 (=)、复合算术赋值 (+=,-=,*=,/=,%=)和复
合位运算赋值 (&=,|=,^=,>>=,<<=)三类共十一种。
6,条件运算符 用于条件求值 (?:)。
7,逗号运算符 用于把若干表达式组合成一个表达式 (,)。
8,指针运算符 用于取内容 (*)和取地址 (&)二种运算。
9,求字节数运算符 用于计算数据类型所占的字节数 (sizeof)。
10,特殊运算符 有括号 (),下标 [],成员 (->,.)等几种。
运算符优先级
括号
++,--,sizeof
*,/,%
+,-
==,!=
位运算
&&
||
,
赋值运算 =
逗号运算,
思考,
int x=1,y=0;
bool z = !x&&x+y&&++y;


bool z = (!x)&&(x+y)&&(++y);
? (!1)&&(1+0)&&(1)
? 0
#include <iostream>
using namespace std;
int main()
{ int year;
bool IsLeapYear;
cout << "Enter the year,";
cin >> year;
IsLeapYear = (( year % 4 == 0 &&
year % 100 != 0)||(year % 400 == 0));
if (IsLeapYear)
cout << year << " is a leap year,<< endl;
else
cout << year << " is not a leap year,<< endl;
}
例 2-2,输入一个年份,判断是否闰年
运行结果,
Enter the year,2000
2000 is a leap year
#include <iostream>
using namespace std;
int main()
{ int day;
cin >> day;
switch (day)
{ case 0,cout<<"Sunday"<<endl; break;
case 1,cout<<"Monday"<<endl; break;
case 2,cout<<"Tuesday"<<endl; break;
case 3,cout<<"Wednesday"<<endl; break;
case 4,cout<<"Thursday"<<endl; break;
case 5,cout<<"Friday"<<endl; break;
case 6,cout<<"Saturday"<<endl; break;
default,
cout<<"Day out of range Sunday,,Saturday"<<endl;
break;
}
}
例 2-4, 输入一个 0~ 6的整数,转换成星期
运行结果,
2
Tuesday
例 2-7, 用 do-while 语句编程
程序 1,
#include<iostream>
using namespace std;
int main()
{ int i,sum(0);
cin>>i;
while(i<=10)
{ sum+=i;
i++;
}
cout<<"sum="<<sum
<<endl;
}
程序 2,
#include<iostream>
using namespace std;
int main()
{ int i,sum(0);
cin>>i;
do{
sum+=i;
i++;
}while(i<=10);
cout<<"sum="<<sum
<<endl;
}
break 和 continue 语句
? break 语句
使程序从 循环体 和 switch语句 内跳出,继续执行
逻辑上的下一条语句。不宜用在别处。
? continue 语句
结束本次循环,接着判断是否执行下一次循环。
C++编译器
?Microsoft Visual C++ 6.0
?bloodshed dev-c++,使用 gnugcc 编译,
可以和 cygwin等基于 gcc的编译器。
?正式版本最新 4.9.9.2
?http://www.bloodshed.net/devcpp.html
?