第二章 C++简单程序设计
2.1 C++语言概述
C++是从C语言发展演变而来的,所以在描述C++语言之前可以先描述C语言的特点。
C语言的优点:语言简洁灵活、运算符和数据结构丰富、具有结构化控制语句、程序执行效率高,而且同时具有高级语言和汇编语言的优点。
与高级语言相比,C语言可以直接访问物理地址;与汇编语言相比,C语言具有良好的可读性和可移植性。
C语言的不足之处在于,它仍然是面向过程的编程语言,因此与其他面向过程的编程语言一样,已经不能满足运用面向对象方法开发软件的需求。
C++语言的主要特点表现在两个方面,一是尽可能的兼容C语言,二是支持面向对象的方法,对C的类型系统进行了改革和扩充,因此C++比C更安全。正是因为C++兼容了C,所以导致C++与纯面向对象语言Java不同,它是一个既支持面向过程,又支持面向对象的编程语言。
下面通过一个面向过程的简单程序,来了解程序是如何控制计算机的操作
#include <iostream>
using namespace std;
int mian(){
cout<<"helloword"<<endl;
return 0;
}
其中,main是主函数名,函数体用大括号包括,C++程序中,必须有且只能有一个名为main的函数,它表示了程序执行的起点。mian函数之前的int
表示这个函数的返回值类型为int型。
#include <iostream>表示编译器在对程序进行预处理时,需要将iostream中的代码嵌入到程序中该指令所在的地方,#include表示的是预处理指
令,文件iostream中声明了程序中需要的输入输出操作的有关信息。 using namespace std 是针对命名空间的指令。
标识符:标识符是程序员定义的单词,它命名程序正文中的一些实体,如函数名、变量名、类名和对象名等。构成规则如下:
- 以大写字母、小写字母或下划线开始(数字不能打头)。
- 可以由大写字母、小写字母、下划线或数字组成。
- 大写字母和小写字母表示不同的标识符。
- 不能是C++关键字。
2.2 基本数据类型和表达式
在人们的日常生活中,会产生各式各样的数据,所以对于计算机程序想要解决问题时,数据就会作为程序处理的对象,不同的数据对应不同的处理方式,从而通过各种表达式进行计算最终得到用户看的懂得答案。
基本数据类型
类型名 | 长度(字节) | 取值范围 |
---|---|---|
bool | 1 | false,true |
char | 1 | -128~127( − 2 7 -2^7 −27 ~ 2 7 − 1 2^7 -1 27−1) |
signed char | 1 | -128~127( − 2 7 -2^7 −27 ~ 2 7 − 1 2^7 -1 27−1) |
unsigned char | 1 | 0~255( 0 0 0 ~ 2 8 − 1 2^8 -1 28−1) |
short(signed short) | 2 | -32768~32767( 2 15 2^{15} 215 ~ 2 15 − 1 2^{15} -1 215−1) |
unsigned short | 2 | 0~65535( 0 0 0 ~ 2 16 − 1 2^{16} -1 216−1) |
int(signed int) | 4 | -2147483648~2147483647( 2 31 2^{31} 231 ~ 2 31 − 1 2^{31} -1 231−1) |
unsigned int | 4 | 0~4294967295( 0 0 0 ~ 2 32 − 1 2^{32} -1 232−1) |
long(signed long) | 4 | -2147483648~2147483647( 2 31 2^{31} 231 ~ 2 31 − 1 2^{31} -1 231−1) |
unsigned long | 4 | 0~4294967295( 0 0 0 ~ 2 32 − 1 2^{32} -1 232−1) |
float | 4 | 3.4 ∗ 1 0 − 38 3.4*10^{-38} 3.4∗10−38 ~ 3.4 ∗ 1 0 38 3.4*10^{38} 3.4∗1038 |
double | 8 | 1.7 ∗ 1 0 − 308 1.7*10^{-308} 1.7∗10−308 ~ 1.7 ∗ 1 0 308 1.7*10^{308} 1.7∗10308 |
long double | 8 | 1.7 ∗ 1 0 − 308 1.7*10^{-308} 1.7∗10−308 ~ 1.7 ∗ 1 0 308 1.7*10^{308} 1.7∗10308 |
从上面的表格可以看出来,C++的基本数据类型分别是bool(布尔型)、char(字符型)、int(整型)、float(浮点型)以及double(双精度浮点型)。表格中可以看出各种数据类型所占得字节数,而在计算机中1字节等于8位,所以可以算出不同数据类型的取值范围是多少。其中关键字short和long,以及关键字signed和unsigned称为修饰符。
short修饰int是可以省略,long可以修饰int和double
signed和unsigned可以修饰int和char,分别表示有符号和无符号。有符号的整数在计算机中以二进制补码的形式进行存储,最高位表示符号位。无符号的整数只能是正数,在计算机类以绝对值存放。
常量
所谓常量就是在程序运行过程中始终不能发生改变的量。
- 整型常量:十进制(0-9)、八进制(0-7)和十六进制(0-9,A-F)。十进制的数字前面应该带有正负号,而八进制中数字部分要以0开头,十六进制则是以0x开头。整型常量可以用l或L作为后缀,表示长整型,而后缀字母u或U则是无符号整型,也可以L和U同时带有。
- 实型常量:分为一般形式和指数形式,实型常数通常默认为double,如果后缀为f或F,那么该常数为浮点型
- 字符常量:以单引号括起来的一个字符。
- 字符串常量:是一对双引号括起来的字符序列。由于双引号是字符串的限定符,所以如果要将双引号表示出来则需要使用转义。在C++中字符串存放方式与Java中有些不同,就是存放时,按照字符串中字符的顺序,每一个字符站一个字节,并在末尾添加\0作为结束标识。所以在C++中字符串的长度要比Java的长一个字节。
- 布尔常量:布尔常量只有两个,true 或者 false。
变量
在程序执行过程中可以发生变化的量称为变量。我们在使用变量时应该首先声明其类型和名称,声明变量不一定会引起内存的分配,只是告诉编译器这个变量的有关信息,而在定义变量时需要给变量分配内存空间,用于存放对应类型的数据。大多数情况下,声明变量和定义变量是同时实现的,只有要声明外部变量时除外。
变量也具有存储方式,如下
- auto存储:采用堆栈式分配内存空间,属于暂时性存储,其存储空间可以被若干变量多次覆盖使用。一般来说在程序中没有特意的指定变量的存储类型的化默认为auto存储也就是自动存储,在函数调用结束后被释放。
- register存储:存放于通用寄存器中。通常变量存储于内存中,但是如果需要对变量频繁的读写是,那么会消耗存取时间。C++中可以将变量的值存放于cpu中的寄存器中,这样就不会去内存中调用变量的值,而是直接从寄存器中获取。
- extern存储:在所有函数和程序段中均可使用。也就是说可以在不同的源文件中调用这类存储的变量。
- static存储:在内存中以固定地址存档,在整个程序运行期间都有效。
表达式
- &&和||运算符具有短路特性。意思就是对于&&,如果前面的操作数值为false,那么就不会对后面的操作数求值。同样对于||时,第一个操作数求值为true,那么就不会对第二个操作数求值。
- 移位运算符,左移就是将一个数的二进制向左移指定位数,左移后低位补0,高位舍去,也就是移位后右边缺的部分补0,左边出去的部分舍去。(左移起到的效果就是乘 2 n 2^n 2n,其中n为移位的位数)。相反右移就是将高位补0,低位舍去。(右移则是相除)。
- 数据类型的转换,一般来说低类型数据转换为高类型数据,这是因为数据类型越高,表示的范围也越大,精度也越高,这样在类型转换上不会出现精度丢失。
算法的基本控制结构
- 选择结构: if…else… if …else if … switch(int or char or enum)
- 循环结构
while语句:while(表达式) 语句 —— 在循环体中包含有改变循环表达式条件的语句。
do…while语句:do 语句 while(表达式)——先执行循环体然后在判断while中的表达式。如果循环体中在最开始时为假,那么do…while还是会执行一次。
for语句:for(初始语句;表达式1;表达式2)
break出现在switch和循环语句中,使程序从switch或循环中跳出,继续执行逻辑上的下一条语句。
continue 作用于循环语句中,其作用是结束本次循环,接着开始判断是否执行下一次循环。
void allFactor(){
int n;
cout<<" Enter the number: ";
cin>>n;
cout<<" Number "<<n<<" factor ";
for(int i =1;i<=n;i++){
if(n%i==0)
cout<<i<<" ";
}
cout<<endl;
}
自定义数据类型(typedef和enum)
typedef 已有类型名 新类型名表;(其作用是为了将较长的类型名重新起一个较短的名称,简化程序)
typedef double Area, Volume;
typedef int Natural;
Area a;
Natural b;
enum 枚举类型名 {变量值列表};
enum Weekday {SUN, MON, TUE, WED, THU, FRI, SAT}; //枚举元素具有默认值,SUN=0,MON=1,...
enum Weekday {SUN=7, MON=1, TUE, WED, THU, FRI, SAT}; //可以再声明是另行定义枚举元素的值,定义SUN=7,MON=1,之后按顺序加1.
enum GameResult {WIN,LOSE,TIE,CANCEL};
void enum_Example(){
GameResult result;
GameResult omit = CANCEL;
for(int i = WIN;i<=CANCEL;i++){
result = GameResult(i);
if(result == omit)
cout<<" The game was canceled!"<<endl;
else{
if(result==TIE)
cout<<" The game was played! "<<endl;
if(result==WIN)
cout<<" The game was won! "<<endl;
if(result==LOSE){
cout<<" The game was lose! "<<endl;
}
}
}
}
2.3 总结
这一章是我们在使用C++语言进行编程之前需要了解的一些方法和基础知识。主要讲的是C语言和C++的优缺点以及不同点,然后描述在利用C++时需要知道的基本数据类型,以及在编写程序时的基本控制结构,包括顺序结构、选择结构和循环结构。最后,学习了我并不太了解的枚举方法。