




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
C++大学基础教程第2章基本数据类型与表达式
北京邮电大学信通院 网络搜索中心2023/2/1北京邮电大学电信工程学院计算机技术中心-2-问题1、一个程序一般需要有3个部分输入从键盘、文件读取数据,保存在内存中处理将内存中的数据进行计算或逻辑分析输出将结果显示在屏幕上或输出到文件中cincout2023/2/1北京邮电大学电信工程学院计算机技术中心-3-举例1、从键盘任意输入两个整数,并求和。2、从键盘任意输入两个实数,并求和。程序中使用的数据保存在内存中,
1、分配多大的空间存储数据?
2、如何标识数据在内存的地址?
3、如何进行复杂的运算?数据类型变量和常量变量、常量和运算符组成的表达式第2章基本数据类型与表达式2.1词法记号和标识符2.2基本数据类型2.3变量和常量2.4运算符和表达式2.5基本输入输出2.1词法记号和标识符
2023/2/1北京邮电大学电信工程学院计算机技术中心-7-2.1词法记号和标识符1、C++字符集英文字母:A~Z,a~z数字字符:0~9特殊字符:+-*/%^=<>!#& |_~ \‘“;. ,()[] {}空格2023/2/1北京邮电大学电信工程学院计算机技术中心-8-2.1词法记号和标识符单词关键字:系统预定义的单词标示符:用户自定义的单词注意:
C++的表示符是大小写敏感的,即abc≠ABC。2023/2/1北京邮电大学电信工程学院计算机技术中心-9-2.1词法记号和标识符4、分隔符
分隔符用于分隔程序中的正文,在C++中使用下列字符作为分隔符:
(){} , : ;5、空白在C++语句中经常出现空白(制表符、空格、空行)等,通常都忽略不计。2.2基本数据类型
2023/2/1北京邮电大学电信工程学院计算机技术中心-11-2.2、基本数据类型基本数据类型
整型: int
字符型:char、wchar_t
实型: float、double
逻辑型:bool自定义数据类型
2023/2/1北京邮电大学电信工程学院计算机技术中心-12-2.2、基本数据类型修饰符
进一步准确描述数据的大小和类型
1、长型long2、短型short3、有符号signed4、无符号unsigned2023/2/1北京邮电大学电信工程学院计算机技术中心-13-2.2、基本数据类型问题[-128,127] 范围的整数?char[-32768,32767]范围内的整数?short[-231,231-1] 范围内的整数?intlong[0,232-1] 范围内的整数?unsignedint2023/2/1北京邮电大学电信工程学院计算机技术中心-14-2.2、基本数据类型注意
整型int的长度等于机器的字长:16位机:int=2字节;32位机:int=4字节。但是short和long表示的数据长度是固定的,任何支持标准C++的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为short或long。2023/2/1北京邮电大学电信工程学院计算机技术中心-15-2.2、基本数据类型例题
编写一个程序,输出基本数据类型char,int,float,double,bool的长度。提示:使用sizeof(数据类型)能够获取不同数据类型的长度。//输出基本数据类型的长度#include<iostream>usingnamespacestd;voidmain(){ 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";}2.3变量和常量
2023/2/1北京邮电大学电信工程学院计算机技术中心-18-2.3变量和常量 什么是变量?
在C++中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。变量和常量的区别变量中的数据可以改变,而常量不行。2023/2/1北京邮电大学电信工程学院计算机技术中心-19-2.3变量变量定义:
inta,b,c;int a=0; floatf1,f2; charch;常量定义:
constinta=10;例2.2:赋值运算符的使用
#include<iostream>
usingnamespacestd;
voidmain(){
intx,y;cin>>x>>y;//输入3、5cout<<x+y<<endl;cin>>x>>y;//输入6、8cout<<x+y<<endl;}运行结果:8142023/2/1北京邮电大学电信工程学院计算机技术中心-21-2.3关键字typedef
为已有的数据类型定义一个同义词,或者叫做别名。例如:
typedefunsignedintUINT;
关键字数据类型别名赋值注意:
使用typedef定义同义词时并不分配内存空间。2.3关键字define在C语言中使用预编译指令#define定义常量。例如:
#definePI3.1415927
关键字常量名值
该语句属于预编译指令,不属于C++语句,因而行尾不需要使用分号。功能同constdoublePI=32/1北京邮电大学电信工程学院计算机技术中心-23-2.3常量整型常数十进制数:1008进制数:
014416进制数:0x64实型常数0.123、23.12123e5或123E5(表示123*105)
2023/2/1北京邮电大学电信工程学院计算机技术中心-24-2.3常量字符常数1、例如:‘a’、‘?’。2、转义字符例如:\n、\t、\a字符串常量由一对双引号括起来的字符序列,例如:“howdoyoudo?”“helloworld!”\a 0x07 bell(响铃)\n 0x0A 换行\r 0x0D 回车\t 0x09 制表符\v 0x0B 垂直跳格\b 0x08 Backspace\\ 0x5C ‘\’\" 0x22 双引号\‘ 0x27 单引号\ddd1-3位8进数\xhh1-2位16进数例2.3:打印特殊字符#include<iostream>usingnamespacestd;voidmain(){cout<<“输出字母:”<<‘a’<<’\a’<<endl;cout<<“输出字母:”<<‘n’<<’\n’;}运行结果:输出字母:a(蜂鸣器响一声)输出字母:n(换行)2023/2/1北京邮电大学电信工程学院计算机技术中心-27-2.3常量字符变量
charch1=‘a’,ch2=97,ch3=0x61;
原因:在内存中,字符数据以ASCII码存储,即以整数表示,所以,C++中字符数据和整数可以相互赋值。例2.4:字符数据和整型数据的转换#include<iostream>usingnamespacestd;voidmain(){charch=’a’;charch1=97;cout<<”输出内容:”<<ch<<endl;cout<<”输出内容:”<<ch1<<endl;}运行结果:输出内容:97输出内容:a注意:变量在输出时,根据其本身的数据类型进行输出。例2.4:分析下面的输出?#include<iostream>usingnamespacestd;voidmain(){intn=’a’;intn1=97;cout<<”输出内容:”<<n<<endl;cout<<”输出内容:”<<n1<<endl;}运行结果:输出内容:?输出内容:?2023/2/1北京邮电大学电信工程学院计算机技术中心-30-2.3常量字符和字符串的区别
1、字符常量和字符串常量是不同的,字符串常量以‘\0’结尾。例如:字符串Hello在内存中的形式:
2、“a”不等于‘a’,”a”占2个字节,‘a’1个字节Hello\0a\0a2023/2/1北京邮电大学电信工程学院计算机技术中心-31-2.3常量字符串变量
chara[20]=“Helloworld\n”;charb[5]=“a”;
charc=‘a’;思考
字符串“\x07Operating\tsystem”
有几个字符?显示结果如何?
2023/2/1北京邮电大学电信工程学院计算机技术中心-32-2.3常量逻辑常数逻辑型常数只有两个:false(假)和true(真)。在显示器上显示为0和1。2.4运算符和表达式例如:
inta=3,b=5,c=6;
intx=(a+b)*c//表达式
2.4运算符和表达式2023/2/1北京邮电大学电信工程学院计算机技术中心-35-2.4运算符和表达式语句和块
表达式和结尾的“;”组成一个C++语句;多条C++语句通过大括号{}括起来,组成一个块语句,例如:
{
inttemp=x; x=y; y=temp; }
2023/2/1北京邮电大学电信工程学院计算机技术中心-36-2.4运算符和表达式根据功能划分1、算术运算符(+-*/++--+=…)2、关系运算符(><>=<=!===)
3、逻辑运算符(!&&||)4、位运算符(<<>>~|&^)5、特殊运算符:条件运算符、逗号运算符2023/2/1北京邮电大学电信工程学院计算机技术中心-37-2.4运算符和表达式赋值运算符1、赋值运算符就是“=”例如:floatf=3.152、左值:可以合法的放在“=”左边的操作数右值:可以合法的放在“=”右边的操作数常量都是右值,所以不能够放在“=”的左边被赋值;变量既是左值又是右值,可以放在任何位置。2023/2/1北京邮电大学电信工程学院计算机技术中心-38-2.4运算符和表达式算术运算符
C++提供的算术运算符包括“+,-,*,/,%,++,--”1、二元运算符:
+(加),-(减),*,/,%2、一元运算符:
+(正号),-(负号),++,--2023/2/1北京邮电大学电信工程学院计算机技术中心-39-2.4运算符和表达式算术运算符
注意:1、“/”根据操作数不同,运算规律也不同: 整型数为整除运算:例如5/2=2; 浮点数为通常意义的除法:即5.0/2.0=2.5。2、“%”取余数运算符,只能对整型数进行操作,不允许对浮点数进行操作。2023/2/1北京邮电大学电信工程学院计算机技术中心-40-2.4运算符和表达式算术运算符
C++中提供了两个特殊的运算符:++,--表示将操作数减1。++、--运算符根据操作数的位置不同,又称为前置(++i)和后置(i++)1、前置(++i):先自身加1,然后再将加1的值作为(++i)表达式的值;2、后置(i++):将i作为(i++)表达式的值,然后自身再加1。
例2.6:自增运算符的使用
#include<iostream>usingnamespacestd;voidmain(){ inti=1; cout<<”i=”<<i<<endl; cout<<”i++:”<<i++<<endl; cout<<”i=”<<i<<endl; cout<<”++i:”<<++i<<endl; cout<<”i=”<<i<<endl;}112332023/2/1北京邮电大学电信工程学院计算机技术中心-42-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例如:#include<iostream>usingnamespacestdvoidmain(){ intx=2,y=3;x*=y+8;cout<<x<<endl;}原因:x*=y+8等价于x=x*(y+8)//显示222023/2/1北京邮电大学电信工程学院计算机技术中心-44-2.4运算符和表达式算术运算符这些运算符的优先级由高到低依次为:
1、+(正号),-(负号),++,--2、*,/,%3、+、-4、=、+=、-=、*=、/=、%=2023/2/1北京邮电大学电信工程学院计算机技术中心-45-2.4运算符和表达式注意
在进行算术运算时,很可能出现溢出,溢出是指在给一个变量赋值时超出了其数据类型表示的范围。溢出不会引起编译错误的,但运行结果会出现偏差。 例如:
shortinti=65536; cout<<i<<endl;输出结果:02023/2/1北京邮电大学电信工程学院计算机技术中心-46-习题voidmain(){ unsignedshortinti=-1;cout<<i<<endl;}运行结果:655352023/2/1北京邮电大学电信工程学院计算机技术中心-47-2.4运算符和表达式关系运算符
关系运算符有==、!=、>=、>、<=、<六种;这些运算符的优先级由高到低依次为:
1、>=、>、<=、<2、==、!=由关系运算符将两个表达式连接起来,就是关系表达式;关系表达式的结果类型为bool,值只能为true或false,屏幕显示为1或0。例如inta=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,输出为02023/2/1北京邮电大学电信工程学院计算机技术中心-49-2.4运算符和表达式逻辑运算符
逻辑运算符有&&、||、!三种;这些运算符的优先级由高到低依次为
1、!2、&&3、||除了逻辑非,逻辑运算的级别低于关系运算。逻辑表达式的结果类型也为bool,值只能为true或false,屏幕显示为1或0。2023/2/1北京邮电大学电信工程学院计算机技术中心-50-2.4运算符和表达式注意
如果多个表达式用&&或||连接,为了提高判断效率,只要能够确定表达式的结果了,运行就不再继续。例如:
inta=1,b=2;if(a>b&&b++)cout<<”b的值没有被改变。”<<endl;cout<<b<<endl;
运行结果:22023/2/1北京邮电大学电信工程学院计算机技术中心-51-2.4运算符和表达式位运算符
一般高级语言:byteC语言:
bitC++语言中提供了六个位运算符,可以对整数进行位操作,分别是按位与(&),按位或(|),按位异或(^),按位取反(~),左移位(<<),右移位(>>)。2023/2/1北京邮电大学电信工程学院计算机技术中心-52-2.4运算符和表达式按位与(&)
按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。例如:计算3&5 3:00000011
5:000001013&5:00000001例如:将chara;的最低位置0:
取inta;的低字节:a=a&0376;charc=a&0377;2023/2/1北京邮电大学电信工程学院计算机技术中心-53-2.4运算符和表达式按位或(|)
按位或操作的作用是将两个操作数对应的每一位分别进行逻辑或操作。例如:计算3|5 3:00000011
5:000001013|5:00000111例如:将inta;的低字节置1:a=a|0xff;2023/2/1北京邮电大学电信工程学院计算机技术中心-54-2.4运算符和表达式按位异或(^)
按位异或操作的作用是将两个操作数对应的每一位分别进行异或操作。具体运算规则:
1^1=0,0^0=0,1^0=0^1=1例如:计算3^5 3:00000011
5:000001013^5:000001102023/2/1北京邮电大学电信工程学院计算机技术中心-55-2.4运算符和表达式按位异或(^)
例如:如果使8位二进制数01111010的后四位翻转?可以将该二进制数与00001111进行异或操作:01111010
(^)00001111 011101012023/2/1北京邮电大学电信工程学院计算机技术中心-56-2.4运算符和表达式按位取反(~)
按位取反是一个一元运算符,它的作用是将两个操作数对应的每一位分别进行取反操作。具体运算规则:~1=0,~0=1。例如:计算~5 5:00000101~5:111110102023/2/1北京邮电大学电信工程学院计算机技术中心-57-2.4运算符和表达式左移<<:按照指定的位数将一个二进制数值向左移动。左移后,低位补0,移出的高位舍弃。右移>>:按照指定的位数将一个二进制数值向右移动,右移后,移出的低位舍弃。如果是无符号数则高位补0,如果是有符号数在VC++6.0环境下高位补符号位。例子chara=-8;a=a>>2;cout<<”a=”<<(int)a<<endl;例子chara=2;a=a<<1;cout<<”a=”<<(int)a<<endl;2023/2/1北京邮电大学电信工程学院计算机技术中心-60-2.4运算符和表达式位运算符
在C++中可以将位运算符和赋值运算符结合在一起进行运算,因此C++还提供另外5种运算符&=,|=,^=,<<=和>>=。例如:
x&=y相当于 x=x&y
x|=y 相当于 x=x|y
x^=y 相当于 x=x^yx<<=y相当于 x=x<<yx>>=y相当于 x=x>>y2023/2/1北京邮电大学电信工程学院计算机技术中心-61-2.4运算符和表达式位运算符这些位运算符的优先级由高到低依次为:1、~2、<<,>>3、&4、^5、|6、&=,|=,^=,<<=和>>=2023/2/1北京邮电大学电信工程学院计算机技术中心-62-2.4运算符和表达式条件运算符
条件运算符语法格式为:
表达式1?(表达式2):(表达式3);运算的结果是:如果表达式1的值为真,则返回表达式2的值,否则返回表达式3的值。
例1:x=a<b?a:b;例2:
intx=0,y=1;cout<<(x>y?x:y)<<endl;2023/2/1北京邮电大学电信工程学院计算机技术中心-63-2.4运算符和表达式逗号运算符
逗号表达式的语法格式为:
表达式1,表达式2,……,表达式n;C++顺序计算表达式1,表达式2,……,表达式n的值,并将最后一次计算的结果作为逗号表达式的结果。例如:
inta,b,c;a=1,b=2,c=a+b;
例子inta,b,c,d;d=(a=1,b=2,c=a+b,a+b+c);cout<<d<<endl;62023/2/1北京邮电大学电信工程学院计算机技术中心-65-2.4运算符和表达式数据类型转换
当表达式中出现多种数据类型的混合运算时,往往需要进行类型转换。表达式中的类型转换分成两种:1、隐式类型转换2、强制类型转换。2023/2/1北京邮电大学电信工程学院计算机技术中心-66-2.4运算符和表达式1、隐式类型转换
各种二元运算符在进行运算时都要求两个操作数的数据类型一致。如果类型不一致,则系统自动对数据进行转换(隐式类型转换)。
2023/2/1北京邮电大学电信工程学院计算机技术中心-67-1、隐式类型转换转换的基本原则:将精度较低、范围较小的类型转换成精度较高、范围较大的类型。
doublefloat
long unsigned intchar,short高低2023/2/1北京邮电大学电信工程学院计算机技术中心-68-例子voidmain(){ chara=100; unsignedchari=99; cout<<i-a<<endl;}输出结果:-12023/2/1北京邮电大学电信工程学院计算机技术中心-69-1、隐式类型转换1、逻辑运算:逻辑运算要求是bool型,系统自动将其他类型转换成bool类型,转换规则:0为false,非0为true。2、赋值运算:
“=”要求左右两边的数据类型相同,如果类型不一致,则自动将右边的操作数类型向着左边的操作数类型转换。例如:
inti=3.15; cout<<i<<endl;2023/2/1北京邮电大学电信工程学院计算机技术中心-70-2.4运算符和表达式2、强制类型转换
强制类型转换通过是类型说明符和括号来实现的显式转换,其语法格式为:
(数据类型名)表达式或数据类型名(表达式)例如:
inti=97;cout<<(char)i<<endl;//输出’a’floatf=3.75;cout<<(int)f<<endl;//输出32.5I/O流控制2023/2/1北京邮电大学电信工程学院计算机技术中心-72-2.5I/O流控制
在iostream库中包含有一个标准输入流对象cin和一个标准输出流对象cout,分别用来实现从键盘读取数据,以及将数据在屏幕输出。1、cin2、cout3、I/O流的格式控制2023/2/1北京邮电大学电信工程学院计算机技术中心-73-2.5I/O流控制1、标准输入流cin
cin负责从键盘读取数据,使用提取操作符“>>”就可以将键盘键入的数据读入到变量中。语法格式为:
cin>>变量1>>变量2…>>变量n;例如:
inta,b; charch; cin>>a>>b>>ch;2023/2/1北京邮电大学电信工程学院计算机技术中心-74-2.5I/O流控制2、标准输出流cout
cout负责将变量或常量中的数据输出到屏幕,使用插入操作符“<<”就可以将变量或常量的数据显示在屏幕上。例如:
cout<<”Helloworld!\n”;
cout能够自动识别“<<”后面的数据类型并进行显示,并且可以从左到右一次显示多个变量。例子#include<iostream>usingnamespacestd;voidmain(){ inta,b; charch; cout<<”请按顺序输入2整数和1字符:\n”;cin>>a>>b>>ch; cout<<”a=”<<a<<”b=”<<b<<”ch=”<<ch<<endl;}2023/2/1北京邮电大学电信工程学院计算机技术中心-76-2.5I/O流控制3、IO流的格式控制
库文件iomanip
常用控制符:
setfill(c)
设置填充字符
setw(n)
设置域宽为n
2023/2/1北京邮电大学电信工程学院计算机技术中心-77-2.5I/O流控制设置输出宽度和填充字符setw(n)
设置域宽,即设置“<<”符号后面的数据占用的屏幕宽度。
setfill(c)
设置填充字符,即“<<”符号后面的数据长度小于域宽时,使用什么字符进行填充。
setw(n)和setfill(c)例1:
cout<<setw(8)<<’a’<<setw(8)<<’b’<<endl;输出结果:
例2:
cout<<setfill(‘*’)<<setw(5)<<’a’<<endl;输出结果:_______a_______b****a#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){cout<<setfill('*') <<setw(2)<<'\n' <<setw(3)<<'\n' <<setw(4)<<'\n' <<setw(5)<<'\n' <<setw(6)<<'\n' <<setw(7)<<'\n' <<setw(8)<<'\n';}
****************************2023/2/1北京邮电大学电信工程学院计算机技术中心-80-2.5I/O流控制注意1
除了setw()控制符外,其他控制符一旦设置,则对其后的所有输入输出产生影响。而setw()控制符只对其后输出的第一个数据有效,对其他数据没有影响,所以如下代码:
cout<<setw(8)<<’a’<<’b’<<endl;输出结果:_______ab2023/2/1北京邮电大学电信工程学院计算机技术中心-81-2.5I/O流控制注意2
setw()的默认为setw(0),意思是按实际输出。如果输出的数值占用的宽度超过setw(n)设置的宽度,则按实际宽度输出。例如:
floatf=0.12345;cout<<setw(3)<<f<<endl;0.123452023/2/1北京邮电大学电信工程学院计算机技术中心-82-2.5I/O流控制3、I/O流的格式控制
C++默认输出浮点数的有效位为6位,那么要想控制输出的数据的长度,该如何呢?比如:floatf=3.1234567;如何让显示结果为3.12?
C++提供了setprecision(intn)可以控制显示浮点数的有效位。#include<iostream>#include<iomanip>usingnamespacestd;voidmain(){ floatf=17/7.0; cout<<f<<endl; cout<<setprecision(0)<<f<<endl; cout<<setp
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025葡萄酒采购合同范本
- 科技项目合同书
- 重庆面试真题及答案解析
- 2 姓氏歌 教学课件
- 教资面试培训
- 风筝教学设计说明
- 甘肃庆阳公开招聘农村(村务)工作者笔试题含答案2024年
- 护理疑难病例讨论操作指南
- 浙江温州公开招聘农村(村务)工作者笔试题含答案2024年
- 山庄餐饮租赁合同协议
- 2024年山东省科创集团有限公司招聘笔试真题
- 冷却塔维修施工方案
- 航天发射场智能化-深度研究
- 信息时代背景下班主任提升班级管理工作效率的策略研究
- 旅游业员工工资保障措施建议
- 班组长、员工安全生产责任制考核记录表
- 老年康体指导职业教育79课件
- 北京市建设工程施工现场安全生产标准化管理图集(2019版)
- 2025年江苏省江宁城建集团招聘笔试参考题库含答案解析
- 大学生就业与创业指导知到智慧树章节测试课后答案2024年秋辽宁广告职业学院
- 高钛渣及其产品深加工项目的可行性研究报告
评论
0/150
提交评论