1.11k likes | 1.31k Views
第 2 章 基本数据类型与基本运算. 2.1 简单 C++ 程序 2.2 基本类型及其派生类型 2.3 说明语句 2.4 基本运算符. 2.1.1 求两个数的和与积. # include <iostream.h> void main(){ int a,b,sum,prod; a=3; b=15; sum=a+b; prod=a*b; cout<<"The sum is "<<sum<<endl; cout<<"The prod is "<<prod<<endl; }. 程序执行后的输出结果为:
E N D
第 2章 基本数据类型与基本运算 2.1 简单C++程序 2.2 基本类型及其派生类型 2.3 说明语句 2.4 基本运算符
2.1.1求两个数的和与积 #include <iostream.h> void main(){ int a,b,sum,prod; a=3; b=15; sum=a+b; prod=a*b; cout<<"The sum is "<<sum<<endl; cout<<"The prod is "<<prod<<endl; }
程序执行后的输出结果为: The sum is 18 The prod is 45
2.1.2计算圆面积与周长 #include <iostream.h> void main(){ const float pai=3.14; float radius; cout<<"Enter radius:"; cin>>radius; float area=pai*radius*radius; cout<<"\nThe area of circle is "; cout<<area<<endl; float circum=2*pai*radius; cout<<"The circum of circle is "<<circum<<endl; }
程序执行后的输出结果为: Enter radius:2.5 The area of circle is 19.625 The circum of circle is 15.7
简单实例程序中的语法点 1.main函数是所有C++程序所必须的。最简单的合法C++程序是: main(){} 它没有错误,但什么事都不做。 2. 以双斜杠('//')开头直到行末的全体(符号)称为注解。注解将被当作空格处理。C++还允许使用第二种注解方式:以有序双符号 '/*' 开始(往后), 直到第一次遇见有序双符号 '*/' 为止的全体(符号)也称为注解。第二种注解方式可以占一行至任意多行。
3. 程序中涉及的数据,以常量和变量的形式出现,变量的值在程序执行中可以被改变。常量又分为字面常量和有名常量,如3与15等都为字面常量,而通过“const float pai=3.14;”说明的pai则被称为有名常量, 它们的值在程序中均不可改变。 常量和变量都具有各自的数据类型。C++的四种基本数据类型为:int、float、char、void,它们分别代表整型(int),浮点型(float),字符型(char),以及无值型(void)。
程序中用到的所有变量以及有名常量都必须在使用前先说明其数据类型。通过如下格式的语句来说明一批(如n个)变量的数据类型: <数据类型名> <变量名1>, ... , <变量名n>; 变量名由用户任起,但要求满足以下C++标识符的语法:标识符是由字母或下划线开头的后跟0到任意多个字母、数字或下划线所组成的符号串。除变量名外,程序员为有名常量、用户自定义类型、函数及其参数、类、对象等各种成分所起的名字也都必须是一个标识符。
4. 每个C++程序都是一个符号的序列。C++语言的基本符号由数字(0--9)、大小写英文字母(A--Z,a--z)、以及包括空格在内的特殊符号组成。 由符号构成单词,由单词构成语句,由语句构成程序(相当于文章)。 特殊符号可充当运算符(如:+ - * / > < = ! 等)、分割符(如:, ; : { } 等)。另外,下划线、空格、句点等也属于特殊符号。
5. C++语言的单词主要分为以下五种:关键字(也称保留字,如,int、float、const等),标识符 (如,变量名及有名常量名等各种名字),字面常量(如,43、3.14等),运算符(如,+、=、* 等),分割符(如,{、 }、;等)。 每一个C++关键字(保留字)都具有自己特定的使用含义,用户程序中不可再将它们用作自定义标识符。C++预定义的关键字均由小写字母构成,今后将在不同章节陆续用到那些关键字(注意,对于某一个具体的编译实现来说,可能还会再扩充一些不同的关键字,使用时请留意)。请参看书p33的表2.2(其中列出了C++基本关键字)。
6. C++语言的基本语句主要分为以下几种:数据说明(定义)语句、赋值语句、表达式语句、流程控制语句、复合语句等。 如,语句“int a,b,sum,prod;”为数据说明(定义)语句,它说明a、b、sum及prod为4个int型(整型)变量,程序中可将它们当作4个整型数据来使用。而语句“sum=a+b;”则为赋值语句,负责算出a+b之值并把结果值赋给变量sum。
7. 数据的输入输出是每个实用程序必不可少的组成部分。“输入”向程序提供要加工的初始数据,而“输出”则将运算结果显示(或保存)到某个指定文件中。 C++含有两个特殊文件,一个为标准流对象cin,它代表键盘,是C++的标准输入设备;而另一个为标准流对象cout,它代表屏幕,是C++的标准输出设备。
往cout(即屏幕)上输出信息时,通过“插入”运算符“<<” (也称输出运算符) 来实现,如,语句“cout<<"The sum is "<<sum;”的执行将首先在屏幕上显示出字符串常量:“The sum is ”,而后显示sum变量的当前值。 从cin(即键盘)上输入信息时,通过“提取”运算符“>>”(也称抽取或输入运算符)来实现,如,语句“cin>>radius;”的执行将等待用户从键盘输入一个浮点数,而后系统将该数赋值给变量radius。
8. 字符串常量(简称为字符串)是由双引号括起来的字符序列。双引号为定界符, 不属于字符串常量的一部分。虽然字符串中的每个字符在内存中只占1个字节,但整个字符串所占内存的字节数却为字符串的长度加一。是因为系统自动在每个字符串常量的末字符后加上了一个“空字符”(作为结束标志)。系统使用转义字符‘\0’来表示“空字符”。注意,字符‘A’在内存占1个字节,而字符串“A”则占2个字节。 往cout(即屏幕)上输出字符串常量可以对用户起到提示作用。对字符串的处理通常与字符数组和指针有关。
2.2 基本数据类型及其派生类型 2.2.1 数据类型的概念 2.2.2 基本类型 2.2.3 基本类型的派生类型 2.2.4 enum类型 2.2.5 定点类型和浮点类型
2.2.1 数据类型概念 任何一个程序都可以分为三个部分:数据的输入,数据的加工,数据的输出,所以数据是程序运行的对象和结果,是程序设计的第一要素。
类型概念的几个要点是: (1)每一项数据应唯一地属于某种类型; (2)每一数据类型意味着一个有明确定义的值的集合; (3)同一类型的数据占有相同大小的存储空间; (4)同一类型的数据具有相同的(允许对其施加的)运算操作集。
类型的分类 1.基本类型 2.用户定义类型 3.导出类型
2.2.2 基本数据类型 -- C++预定义了五种最基本的数据类型:整型、浮点型(也称实型)、字符型、Bool型、无值型。整型数据说明符为int;浮点型又分为单精度浮点型float及双精度浮点型double;字符型用char;bool型bool ,而无值型使用void。
通过基本数据类型能够导出(或派生出)其它的数据类型。程序中用到的所有变量以及有名常量都必须在使用前先说明其数据类型。字面常量由系统自动将其归属于某种数据类型(从其“字面书写格式” 区分)。
1. int类型 表示整型数据。其值集(取值范围)为:-32768 ~ 32767。通常占用两个字节的存储空间(注意,在VC6下,int 等同于long int,占用四个字节的存储空间)。允许对其施加的运算(操作)有:算术运算(+、-、*、/、%等), 关系运算(<、<=、>、>=、==、!=)及一些其他运算。
int类型字面常量的“字面书写格式”为: (1) 十进制整数 与数学中的表示完全相同。如:5980,-123,0,32766。 组成十进制整数的基本字符为: 0, 1, ..., 9 (共10个)。 (2) 八进制整数 以数字0开头的整数为八进制整数。如:017,0321,-0777。组成八进制整数的基本字符为: 0, 1, ..., 7 (共8个)。 (3) 十六进制整数 以两个符号0x(或0X)开头的整数为十六进制整数。如:0x30,-0xA9f3,0X777。组成十六进制整数的基本字符为: 0, 1, ..., 9, A, B, C, D, E, F (共16个,6个字母也可以小写)。
2. float与double类型 表示实型数据。float值集(取值范围)为:-3.4E38~3.4E38,通常占用四个字节的存储空间。double值集(取值范围)为: -1.7E308~1.7E308,通常占用八个字节的存储空间。允许对其施加的运算(操作)有:算术运算(+, -, *, / 等), 关系运算(<, <=, >, >=, ==, !=)及一些其他运算。
实型数据字面常量的“字面书写格式”为: (1) 一般表示形式(也称定点表示法) 与数学中的实数表示法相同。如:45.6,-1279.23,0.5。 (2) 指数表示形式(也称科学表示法) 由尾数部分,字母E或e,后随指数部分构成。如:-592e12,12345.6E-2,0.123456e3。 其中后两个数都表示实数123.456。
3. char类型 表示字符数据。其值集即为ASCII码集(书P31,表2.1),也即C++使用的全部基本符号。1个字符数据表示1个基本符号,占用一个字节的存储空间。在内存中,字符数据以ASCII码存储,即是说,系统是以整数来表示字符数据的。从而那些可施加于整数的运算(如算术运算及关系运算等)也可施加于字符型数据。
char类型字面常量的“字面书写格式”为: (1) 用单引号括起一个基本符号 如:'A', 'a', '8', '+', '?'。单引号为定界符, 不属于字符型常量的一部分。 (2) 以反斜杠'\'开头的转义字符 -- 参看书p36 用于将反斜杠后面的一个特定字符或反斜杠后面的三个数字字符转变成另外的意义。表示的仍是一个字符。通常表示那些不可显示的或从键盘无法输入的字符,以及那些被指定为特殊用途的字符。
例如: '\n' -- 代表一个字符,表示“换行”; '\t' -- 代表一个字符,表示“制表符”,用于实现横向跳格; '\\' -- 代表一个字符,表示反斜杠字符本身; '\'' -- 代表一个字符,表示单引号; '\"' -- 代表一个字符,表示双引号; '\ddd' -- 代表一个字符,该字符的ASCII码值为八进制的ddd(其中的d表示0到7的一个数字字符);
'\xhh' -- 代表一个字符,该字符的ASCII码值为十六进制的hh(其中的h表示0到F的一个数字字符)。 可知,使用 '\ddd' 或 '\xhh' 的方式是可以表示任一个字符数据的,如,'\101','\x41',和 'A'均可用来表示字符常量A。 转义字符可以出现在字符串常量中,但仍代表一个字符。如,字符串常量 "\tNankai University\n"中就出现了两个转义字符,该字符串常量共含有19个字符,要占用20个字节的存储空间。
下面的程序说明char型与int型所具有的密切关系:下面的程序说明char型与int型所具有的密切关系: #include <iostream.h> void main() { char c1='A', c2='t', c3='\t', c4='!'; //'\t'为水平制表符,与't'表示不同的字符 cout<<"c1="<<c1<<", int(c1)="<<int(c1)<<", c1+1="<<c1+1<<endl; //int(c1)把char型的c1变为int型 cout<<"c2="<<c2<<", int(c2)="<<int(c2)<<'\n'; cout<<"c3="<<c3<<", int(c3)="<<int(c3)<<", 'A'+'a'="<<'A'+'a'<<endl; cout<<"c4="<<c4<<", int(c4)="<<int(c4)<<", c4+'0'="<<c4+'0'<<'\n'; //注意,'A'、'a'、'0'的ASCII码依次为65、97、48 }
输出结果: c1=A, int(c1)=65, c1+1=66 c2=t, int(c2)=116 c3= , int(c3)=9, 'A'+'a'=162 c4=!, int(c4)=33, c4+'0'=81
4. bool类型 bool型,仅有两个取值(一个常量值为标识符false,而另一个为标识符true)。其中的false代表逻辑值0(假),而true则代表逻辑值1(真)。
5. void类型 void类型称为无值类型,该类型的值集为一空集。void类型是一种较抽象的概念。 在C++语言中,没有返回值的函数应被说明为是返回void类型值的函数;而没有参数的函数,其形参表也应被说明为是void。另外,若某指针类型被说明为“void *”,则该指针可指向任一种数据类型。 不可用void类型来说明变量。
2.2.3 基本类型的派生类型 基本类型(除void外)经过简单的字长或范围的变更,可形成它们的简单派生类型。 派生类型说明符是通过在int、float、double 、char前面加上类型修饰符而构成的。类型修饰符包括:signed(有符号)、unsigned(无符号) 、short(短)和long(长)。
注意 signed和unsigned只能修饰char和int(意味着浮点型数据总是有符号的)。 较常用的简单派生类型有:unsigned char,取值范围为 0~255;unsigned int,取值范围为 0~65535;long int取值范围为 -2147483648~2147483647;unsigned long int 取值范围为 0~4294967295。
省略掉int而进行简写 当被修饰的是int时,允许省略掉int而进行简写,如,“long int”可简写为“long”,“unsigned int”可简写为“unsigned”,“unsigned long int”可简写为“unsigned long”等。
2.2.4 enum类型 -- enum类型又称枚举类型,它是一种由用户参与定义的类型。其定义格式如下: enum <枚举类型名> { <枚举值表> } <枚举变量表>; 其中的<枚举类型名>由用户任起,是一个标识符。<枚举值表>由一批<枚举值>构成,各<枚举值>间以逗号分割。而<枚举值>或者是一个标识符,或者以 <标识符>=<整型常量> 的格式出现。
说明枚举变量 <枚举变量表>可以缺省。不缺省时意味着在定义枚举类型的同时,又说明了一批枚举变量。缺省时,可通过如下两种方式之一来说明枚举变量: <枚举类型名> <枚举变量表>; 或: enum <枚举类型名> <枚举变量表>; 其中的<枚举变量表>中的每一表项可以是变量名,也可以同时赋初值。
例如: enum color { RED, YELLOW=3, BLUE } c1=YELLOW, c2; //定义了枚举类型名color;同时又说明了 //两个枚举变量c1与c2, 且给变量c1赋了初值 color a, b=BLUE, c, d=RED; //说明了4个color类型(枚举类型)的变量a,b,c,d, //且给变量b与d赋了初值
关于enum类型有以下几点说明: (1) 一个enum类型实际上是int型的一个子集,其每一个枚举值(标识符)都代表着一个int型常量值。 (2)n个枚举值(标识符)在定义时全没赋常量值时,它们自左至右分别与整数0,1,..., n-1对应。 (3) 若第i个枚举值(标识符)在定义时被赋于了整数m,则其未赋常量值的后续枚举值分别与整数m+1, m+2,...对应,直到下一个赋了值的枚举值或结束。 (4) 使用枚举量的主要优点是:既可增加程序的可读性,又可增加程序数据的安全性。增加程序可读性是显然的。由于枚举量的赋值范围被限定、且被说明的枚举量要进行类型检查,这样无疑会增加程序数据的安全性。
enum类型的示意性使用例子: #include <iostream.h> void main() { enum color{ RED,YELLOW=3,BLUE }c1=YELLOW,c2; color a, b=BLUE, c, d=RED; cout<<RED<<' '<<YELLOW<<' '<<BLUE<<endl; cout<<"c1="<<c1<<" b="<<b<<" d="<<d<<endl; }
输出结果及注意 程序执行后的输出结果为: 0 3 4 c1=3 b=4 d=0 注意: 定义了枚举类型名color。 指出类型color的常量值(取值范围)及各常量的大小:{ RED, YELLOW=3, BLUE }。 说明color类型的变量c1、c2(还为c1赋了初值)。 输出的并非标识符(名字),而是它代表的int型常量值。
2.2.5 定点类型和浮点类型-- 基本类型及其派生类型可以划分为两大类:整数类型(定点类型)和浮点类型(实数类型)。 • 整数类型包括:bool类型;enum类型;char类型及其派生类型;int类型及其派生类型;它们的值集合都是整数集合的子集。bool型,enum型的值用标识符表示,但输出为整数值 • 浮点类型包括:float 类型及其派生类型double, long double;它们的值集合都是实数集合的子集。 • 后面介绍的有些运算只允许整数类型(定点类型)参加。
2.3 说明语句 -- 2.3.1 语句 2.3.2 常量和变量 2.3.3 常量说明 2.3.4 变量说明 2.3.5 名字空间 2.3.6 类型说明
2.3.1 语句 -- 语句是C++程序中的基本功能单元。程序中的任何一个语句都意味着为完成某一任务而进行的某种处理动作。 语句可以分为四类: (1) 说明语句 (2) 表达式语句 (3) 控制语句 (4) 复合语句和空语句
2.3.2 常量和变量 C++程序中的数据可分为常量(constant)与变量(variable)两大类。在程序执行过程中其值不能被改变的数据称为常量,其值可以改变的称为变量。常量又分有名常量和字面常量。 • 有名常量和变量在程序中必须遵循“先声明,后使用”的原则,程序中出现的所有有名常量和变量都必须在使用前由常量说明语句和变量说明语句说明。 • 在程序中说明了一个变量,实际上是做了下面几项工作: ·赋给该变量一标识符作为其名; ·指定其类型; ·在内存中分配给它一片存放空间(其大小由类型决定); ·通过赋初值或赋值语句给它一个当前值
2.3.2 常量说明 const <类型名><常量名>=<表达式> 例子:const int N=2000; 预编译宏定义:类似于#include,在编译的时候由编译器自动替换 #define N 2000 区别:常量是一个分配独立内存空间的不可写的标识,宏只是为了程序员书写方便定义的助记符号,没有独立的存储空间
2.3.3 变量说明 变量定义: [<存储类>]<类型名或类型定义><变量名表> int size,high,temp= 37; 变量名表:列出该说明语句所定义的同一类型的变量及其初值,其格式为:变量名表:<变量名>[=<表达式>],<变量名表> char ch1 = 'e',ch2;
1 全局变量和局部变量 全局变量:其说明语句不在任何一个类定义、函数定义和复合语句(程序块)之内的变量。局部变量:其说明语句在某一类定义、函数定义或复合语句之内的变量。 • 全局变量所占用的内存空间在内存的数据区,在程序运行的整个过程中位置保持不变。局部变量占用的空间一般位于为程序运行时设置的临时工作区,以堆栈的形式允许反复占用和释放。
2 生存期和作用域量 • 变量a 的生存期是指从a被说明且分配了内存开始,直到该说明语句失去效力,相应内存被释放为止,称为该变量的生存期。 • 一个全局变量的生存期是指从它被说明(定义点)开始,直到程序结束。一个局部变量的生存期是指从它被说明(定义点)开始,直到包含它的最近的一个程序块的结束。 • 作用域:变量a的作用域是指标识符a可以代表该变量的范围。 • 一般作用域与生存期一致,但由于C++语言允许在不同程序部分为不同的变量取同一名字,因此一个变量名的作用域可能小于其生存期
3 变量存储类型 auto 自动 C++系统默认 register 寄存器,用于经常调用的变量 static 静态,任何静态变量的生存期将延续到整个程序的终止 extern 外部 存储在另外文件,编译的时候不检查,连结的时候检查