c++中信息的表达与数据运算(2016.5.21)_第1页
c++中信息的表达与数据运算(2016.5.21)_第2页
c++中信息的表达与数据运算(2016.5.21)_第3页
c++中信息的表达与数据运算(2016.5.21)_第4页
c++中信息的表达与数据运算(2016.5.21)_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、0西安交通大学西安交通大学计算机教学实验中心计算机教学实验中心http:/http:/2013.92013.9第2章 信息的表达与数据运算C+程序设计教程程序设计教程西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心内容提要 信息如何在程序中表示信息如何在程序中表示 数据类型、常量、变量、数组、字符串数据类型、常量、变量、数组、字符串 数据如何运算数据如何运算 运算符、表达式、赋值运算符、表达式、赋值 各种运算符、运算符的优先级各种运算符、运算符的优先级 混合运算混合运算 不同数据类型、不同运算不同数据类型、不同运算1西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心2.1

2、 信息的表达 信息在程序设计中的表达信息在程序设计中的表达 .1数据类型与常量数据类型与常量 已知距离已知距离6km,行驶时间为,行驶时间为5分钟,计算行驶速度。分钟,计算行驶速度。 数学算式数学算式:6(5.060.0)=72(km/小时小时) cout6/(5.0/60.0); 直接写出的数据是常量,直接写出的数据是常量,6是整数,是整数,60.0是实数是实数 1.基本数据类型基本数据类型与字面常量与字面常量 整型整型 int 5 长整型长整型long int 5L 浮点型浮点型 float 5.0f 双精度型双精度型double 5.0, 1.0E-5 字符字符 char

3、 a 字符串字符串 char s 21; string str; “char” 逻辑型逻辑型 bool true false 转意字符转意字符 n, t, , ”, 0 2西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-1】检查不同类型的数据在内存中占的字节数。编】检查不同类型的数据在内存中占的字节数。编写程序,显示整型、长整型、字符型、逻辑型、浮点型写程序,显示整型、长整型、字符型、逻辑型、浮点型和双精度型数据的类型名称和所占字节数。和双精度型数据的类型名称和所占字节数。 【问题分析问题分析】sizeof(),它计算括号中的类型、变量或表,它计算括号中的类型、变量或

4、表达式结果占的字节数达式结果占的字节数。 【算法描述】检查不同类型的数据在内存中占的字节【算法描述】检查不同类型的数据在内存中占的字节数。数。 输出字符串输出字符串int; 用用sizeof(int)计算整型数占的字节数计算整型数占的字节数n; 输出输出n; 将整型依次改为长整型、字符型、逻辑型、浮点型和将整型依次改为长整型、字符型、逻辑型、浮点型和双精度型重复双精度型重复3西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】/*example2-1 Bytes of data type */ /程序注释程序注释#include /包含基本输入输出库头文件包含基本输入输出库头

5、文件using namespace std; /使用名字空间使用名字空间 int main() /主函数主函数int n; /说明用说明用n表示整数表示整数n=sizeof(short int); /计算类型大小,将所占字节数赋值给计算类型大小,将所占字节数赋值给符号符号ncoutshort int nendl; /显示显示n=sizeof(int ); /整型整型coutint nendl;4西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心n=sizeof(long int); /长整型长整型coutlong int nendl; n=sizeof(char); /字符串字符串c

6、outchar nendl;n=sizeof(bool); /逻辑型(布尔型)逻辑型(布尔型)coutbool nendl;n=sizeof(float); /浮点型浮点型coutfloat nendl;n=sizeof(double); /双精度型双精度型coutdouble nendl;return 0;/程序结束,程序结束,5西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-2】以下列格式使用前面列出的】以下列格式使用前面列出的10种转义字符,看种转义字符,看得到什么效果。得到什么效果。cout1abcden#12345n; 其中,字符串常量中开头其中,字符串常量

7、中开头1是序号,以后要依次替换为是序号,以后要依次替换为2,3,410;中间的;中间的n是转义字符,以后依次换为是转义字符,以后依次换为r,t,f等。等。 【思路扩展】输出【思路扩展】输出9个大小不等的整数,分个大小不等的整数,分3行、行、3列输出列输出,要求每列的数据对齐,如何实现?,要求每列的数据对齐,如何实现?6西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.符号符号常量常量const =; const double PI=3.1415926; const int N=3,M=5; 行末有分号行末有分号 #define #define PAI 3.1415926行末无分

8、号行末无分号 用符号常量是编程的好习惯用符号常量是编程的好习惯7西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 4.4.字符和整数的关系字符和整数的关系 a,字符,内存中存,字符,内存中存 的数值是的数值是 97 1,字符,内存中存的数值是,字符,内存中存的数值是49 1, 整数,内存中存的数值是整数,内存中存的数值是 1 cout97; cout(char)97; ?结果怎样?结果怎样? Couta; Cout(int)a; ?结果怎样?结果怎样? Char c; C=57;cout|c|; ?结果怎样?结果怎样? C=9;cout|c|; ?结果怎样?结果怎样?8西安交通大学

9、计算机教学实验中心西安交通大学计算机教学实验中心 .2单项特征的表达单项特征的表达变量变量 1.变量的定义变量的定义int i,j,k; /定义三个整型变量定义三个整型变量double radius,area; /定义两个双精度型变量定义两个双精度型变量char c1,c2;/定义两个字符型变量定义两个字符型变量bool flag;/定义一个布尔型变量定义一个布尔型变量 2.变量的初始化变量的初始化int a=5*2; /复制初始化复制初始化int a(5*2);/直接初始化直接初始化9西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 变量的赋值和使用变量的赋值和使

10、用double length,width,area; /变量的定义变量的定义length=6.0;/变量的赋值变量的赋值width=3.2;/ 变量的赋值变量的赋值area=length*width;/ 表达式中使用表达式中使用变量变量,结果赋给变量,结果赋给变量areacoutarea;/area在表达式中被使用在表达式中被使用 变量:定义、赋值、使用变量:定义、赋值、使用 10西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【例2-3】说明下列程序中的错误之处/*example 2-3 finding error */ /程序注释程序注释#include /包含基本输入输出库头

11、文件包含基本输入输出库头文件using namespace std; /使用名字空间使用名字空间int main() /主函数主函数 double PI=3.1415926;double r; double area;area=PI*r*r;cinr;coutareatareaendl;return 0;/程序结束,程序结束,11西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.1.3 2.1.3 多个相同类型的特征的表示多个相同类型的特征的表示数组数组 一个变量表示一个事物的单个特征一个变量表示一个事物的单个特征 数组表示一组相同类型的特征数组表示一组相同类型的特征 1.向量

12、的表示向量的表示一维数组的定义的使用一维数组的定义的使用 一维数组的定义一维数组的定义 ; const int N=100,M=20;/定义两个整型常量定义两个整型常量N和和Mdouble length30, width30; /定义两个数组定义两个数组length和和width,int scoreN*M; /定义数组定义数组score,大小用常量表达式表示,大小用常量表达式表示,实实际大小为际大小为200double averageN;/定义数组定义数组average,大小用符号常量表示,大小用符号常量表示12西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 一维数组的使用一维数

13、组的使用 数组中的元素,下标,下标越界数组中的元素,下标,下标越界 int x30;/定义数组定义数组 int sum;/定义变量定义变量 x0=1;/将数组将数组x的第的第1个元素设置为个元素设置为1 x1=3;/将数组将数组x的第的第2个元素设置为个元素设置为3 x2=5;/将数组将数组x的第的第3个元素设置为个元素设置为5 sum=x0+x1+x2;/对数组的前三个元素求和对数组的前三个元素求和 coutsumx0 x1x2;/输入数组的前三个元素输入数组的前三个元素 sum=x0+x1+x2;/再次对数组的前三个元素求和再次对数组的前三个元素求和 coutx0 “ ”x1 “ ”x2

14、“n”;/输出三个元素,用空格隔开输出三个元素,用空格隔开,用,用n控制换行,与控制换行,与endl效果相同效果相同 coutsumlength;/错误,数组不能整体输入错误,数组不能整体输入cinlength10;/错误,下标超界。使用错误,下标超界。使用length-1也是错也是错误的误的width=length;/错误,数组不能整体赋值错误,数组不能整体赋值coutlength;/错误,数组不能整体输出错误,数组不能整体输出14西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 一维数组的初始化一维数组的初始化 =, , .;double a=11.2,b=21.7; / 定义

15、两个双精度变量并初始化定义两个双精度变量并初始化 double average30=21.0, 2012.7, 7.5+2.3,a*b; /定义数组并定义数组并初始化初始化,数据项有常量和表达式数据项有常量和表达式double room=401,402,403,404,405,606,407,408,409,411; 一维数组在内存中的存储一维数组在内存中的存储 按按2行存储(行优先)行存储(行优先)15西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2 2矩阵的表示矩阵的表示二维数组二维数组164510318672A 用一维数组表示矩阵?用一维数组表示矩阵? int M9=2,

16、7,6,8,1,3,10,5,4;int M9=2,7,6,8,1,3,10,5,4; MiMi* *3+j=Aij;3+j=Aij; MiMi* *N+j=Aij,NN+j=Aij,N为矩阵为矩阵A A的列数的列数西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 二维数组二维数组 ;int A55; /定义定义5行行*5列的二维数组,实际只用了列的二维数组,实际只用了3行行3列列int sum;A00=2;/为第为第1行第行第1列元素赋值列元素赋值A01=7;/为第为第1行第行第2列元素赋值列元素赋值A02=6;/为第为第1行第行第3列元素赋值列元素赋值A20=10;/为第为第3

17、行第行第1列元素赋值列元素赋值A21=5;/为第为第3行第行第2列元素赋值列元素赋值A22=4;/为第为第3行第行第3列元素赋值列元素赋值 sum=A00+ A11+ A22; /对角元素求和对角元素求和 coutA00 A11 A22 sumendl;17西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 二维数组初始化二维数组初始化 =,.;int a=9;int B33=a+1,a+2,a+3,a+4,a+5,a+6,a+7,a+8,a+9;/int A54=2,7,6,8,1,3,10,5,4;int A3=2,7,6,8,1,3,10,5,4;int A33=2,7,6,8

18、,1,3,10,5,4;int A33=2,7,8,1,10,5;18西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 3.3.多维数组多维数组int A543;/定义三维数组定义三维数组double B3456;/定义定义4维数组维数组19 思考题思考题 什么问题的表示用数组更方便什么问题的表示用数组更方便西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.1.4 2.1.4 文字信息的表达文字信息的表达字符串字符串 1.1.用字符数组表示字符串用字符数组表示字符串 【例【例2-42-4】用户从键盘输入一个四个小写字母组成的】用户从键盘输入一个四个小写字母组成的英文

19、单词,将其转换为大写,然后显示到屏幕上。英文单词,将其转换为大写,然后显示到屏幕上。 【算法】将长度为【算法】将长度为4 4的小写字母的单词转换为大写。的小写字母的单词转换为大写。用字符数组用字符数组str表示字符串。表示字符串。输入字符串输入字符串str。将将str的每个元素减去的每个元素减去32。输出字符串。输出字符串。20西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】将长度为4的小写字母的单词转换为大写#include /包含需要的头文件包含需要的头文件using namespace std;/名字空间名字空间int main() /主函数主函数 char str

20、5; /定义字符数组用于存放字符串定义字符数组用于存放字符串const int c=32;/定义常量,表示大小写字母的定义常量,表示大小写字母的ASCII值的差值的差cinstr;/输入字符串输入字符串str0=str0-c;/转换第转换第1个字母个字母str1=str1-c;/转换第转换第2个字母个字母str2=str2-c;/转换第转换第3个字母个字母str3=str3-c;/转换第转换第4个字母个字母coutstrendl;/输出字符串输出字符串return 0;21西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 字符、字符数组在内存中的存储字符、字符数组在内存中的存储 字

21、符、字符数组、字符串的联系与区别字符、字符数组、字符串的联系与区别 用字符数组存储的字符串可以整体输入、整体输入,但用字符数组存储的字符串可以整体输入、整体输入,但不能整体赋值不能整体赋值22西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.2.用用stringstring类型的类型的“变量变量”表示字符串表示字符串 包含头文件包含头文件stringstring ,.;string text1,text2; /定义两个对象定义两个对象text1=Sluice gates at Three Gorges Dam opened to discharge water.;/text2=

22、07-07-2012 09:04 BJT;/使用使用“=”号为对象赋值号为对象赋值 string text3(Heavy rains across southern China are pushing water levels at the Three Gorges Dam beyond the flood level limit.);23西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 使用成员函数对字符串进行操作使用成员函数对字符串进行操作.(); 【例【例2-52-5】使用】使用stringstring进行字符串的操作。进行字符串的操作。设有两个句子:设有两个句子:Heavy

23、 rains are pushing water levels beyond the limit.Sluice gates at Three Gorges Dam opened to discharge water.开始由两个符号表示,请将它们合并为一段文字,然后开始由两个符号表示,请将它们合并为一段文字,然后查找其中的查找其中的“Heavy”替换为替换为“Strong”,最后显示处,最后显示处理过的文本。理过的文本。24西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include /包含需要的头文件包含需要的头文件#include /使用使用string类需要包含头

24、文件类需要包含头文件stringusing namespace std;/名字空间名字空间int main()/主函数主函数 /定义并初始化字符串对象定义并初始化字符串对象text1string text1(Heavy rains are pushing water levels beyond the limit.);string text2,text3; /定义但没有初始化话对象定义但没有初始化话对象text2,text3int k;/定义整型变量定义整型变量k25西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心/为对象为对象text2赋值赋值text2=Sluice gates

25、 at Three Gorges Dam opened to discharge water.; text3=text1+text2;/使用使用“+”运算合并两个字符串,并赋值给运算合并两个字符串,并赋值给text3k=text3.find(“Heavy”);/在在text3中查找中查找“Heavy”,将得到的位,将得到的位置赋给置赋给k/将将text3中中k开始的开始的sizeof(Heavy)-1)个字符删除个字符删除/sizeof(Heavy)是计算是计算Heavy占的字节数,为占的字节数,为6,减,减1是字符个数是字符个数text3.erase (k, sizeof(Heavy)-1)

26、;/删除删除Heavytext3.insert (k,Strong);/将在将在text3中位置中位置k处插入字符串处插入字符串Stringcouttext3(大于)(大于) =(大于等于)(大于等于)(小于)(小于) 3, 2+5c, ab表达式的值表达式的值bool型,值型,值true,flasetrue, false 与与1, 0,非零,其他表达式值的关系,非零,其他表达式值的关系28西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 .3逻辑运算符和表达式逻辑运算符和表达式 &(与)、(与)、|(或)、!(非)(或)、!(非) “短路求值短路求值”(s

27、hort-circuit evaluation) 【例【例2-72-7】判断闰年。】判断闰年。用户输入年份,如果为闰年输出用户输入年份,如果为闰年输出1;如果不是,输出;如果不是,输出0。判断闰年的规则为:判断闰年的规则为:(1)能被)能被4整除且不能被整除且不能被100整除的为闰年。(如整除的为闰年。(如2004年年是是,1900年不是);年不是);(2)能被)能被400整除的是闰年。整除的是闰年。(如如2000年是,年是,1900年不是年不是)。29西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include /包含需要的头文件包含需要的头文件using name

28、space std;/名字空间名字空间int main()/主函数主函数 int year;/定义整型变量表示年份定义整型变量表示年份bool result; /定义逻辑变量表示判断结果定义逻辑变量表示判断结果coutyear;/输入年份输入年份result=(year%4=0 & year%100!=0) | (year%400=0);/计算逻计算逻辑表达式辑表达式,结果赋给逻辑变量结果赋给逻辑变量resultcout“闰年判断结果闰年判断结果: ”resultendl;/打印结果,打印结果,result为为true显示显示1, /result为为false显示显示0return 0

29、;30西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思路扩展】【思路扩展】(1)能根据运行结果判断两个年份是否闰年吗?)能根据运行结果判断两个年份是否闰年吗?(2)看程序的输出行,其中输出的是)看程序的输出行,其中输出的是result这个变量,这这个变量,这个变量的值是逻辑值,个变量的值是逻辑值,true或或false,而运行结果却是,而运行结果却是1或或0。事实上,条件、逻辑表达式的计算结果实际为一个整。事实上,条件、逻辑表达式的计算结果实际为一个整数值,或者为数值,或者为1或者为或者为0。反过来,整数。反过来,整数0可以表示可以表示fasle,非非0可以表示!可以表示!f

30、alse即即true。这也是信息的表示问题,是。这也是信息的表示问题,是约定。约定。(3)编程判断用户输入的数是否满足)编程判断用户输入的数是否满足 ,是则显示,是则显示1,不是,不是则显示则显示0。31西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 .4自增运算符和自减运算符自增运算符和自减运算符+, -单目运算单目运算int i; +i; i+; 【例【例2-82-8】请分析下列程序每个语句执行后】请分析下列程序每个语句执行后i,ji,j的值的值是多少?是多少?int i=0,j=0;j=+i ;j=i+ ;32西安交通大学计算机教学实验中心西安交通大学计算机

31、教学实验中心 .5位运算符和位运算表达式位运算符和位运算表达式 1.1.按位与按位与int x=11,y=7,z;z=x&y ;11的二进制表示:的二进制表示:00000000 00000000 00000000 000010117的二进制表示:的二进制表示: 00000000 00000000 00000000 00000111 00000000 00000000 00000000 00001011& 00000000 00000000 00000000 00000111 - 00000000 00000000 00000000 00000011则,则,z=x

32、&y的结果十进制表示为的结果十进制表示为3。33西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思考题】能否通过【思考题】能否通过“与与”运算使一个数的指定位运算使一个数的指定位为为1 1或为或为0 0?如果不能为什么?如果能,如何实现,?如果不能为什么?如果能,如何实现,请举例说明。请举例说明。34西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.2.按位或按位或int x=11,y=7,z;z=x|y ; 00000000 00000000 00000000 00001011| 00000000 00000000 00000000 00000111

33、- 00000000 00000000 00000000 00001111则,则,z=x|y的结果的十进制表示为的结果的十进制表示为15。按位或运算可以方便地将一个数的某些二进制位设置按位或运算可以方便地将一个数的某些二进制位设置为为1 1。如果两个数代表两个集合,则。如果两个数代表两个集合,则“或或”运算相当运算相当于它们的于它们的“并并”运算运算35西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 3.3.按位异或按位异或int x=11,y=7,z;z=xy ; 00000000 00000000 00000000 00001011 00000000 00000000 000

34、00000 00000111 - 00000000 00000000 00000000 00001100则,则,z=xy的结果十进制表示为的结果十进制表示为12。 在同一数据上两次异或一个值,结果变回原来的值在同一数据上两次异或一个值,结果变回原来的值36西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 4.4.按位取反按位取反int x=11,z;z=x ; 00000000 00000000 00000000 00001011 -z 11111111 11111111 11111111 1111010037西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 5.5.左

35、移位运算左移位运算int x=179,z;z=x4;00000000 00000000 00000000 10110011 3;00000000 00000000 00000000 10110011 300000000 00000000 00000000 00010110结果结果z的十进制形式为的十进制形式为22。一个数每右移一位,相当于将。一个数每右移一位,相当于将这个数除以这个数除以2。 右移运算常和按位与运算一起使用,用于从一个数右移运算常和按位与运算一起使用,用于从一个数中分离出某些二进制位。例如,取中分离出某些二进制位。例如,取x x的第三个字节,的第三个字节,可以将其右移八位,和可

36、以将其右移八位,和0 x00FF0 x00FF做做“与与”运算。运算。39西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-92-9】判断文件属性的模拟。用户从键盘输入】判断文件属性的模拟。用户从键盘输入0,630,63内的整数,表示一个文件的属性,从低位开内的整数,表示一个文件的属性,从低位开始,它的每个二进制位一次表示只读位、隐藏位、始,它的每个二进制位一次表示只读位、隐藏位、系统位、卷标位、子目录位、归档位。请判断该文系统位、卷标位、子目录位、归档位。请判断该文件具有哪些属性,不具有哪些属性。有用件具有哪些属性,不具有哪些属性。有用1 1表示,没表示,没有用有用0

37、 0表示。表示。40西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】/例例2-9判断文件属性的模拟判断文件属性的模拟#include /包含需要的头文件包含需要的头文件using namespace std;/名字空间名字空间int main()/主函数主函数 int attribute;/定义整型变量,表示属性字节的值定义整型变量,表示属性字节的值int a0=1,a1=2,a2=4,a3=8,a4=16,a5=32;/定义定义6个变量个变量并初始化,并初始化,/表示各属性位的位权表示各属性位的位权cinattribute;/输入属性字节的十进制值输入属性字节的十进制值

38、41西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心/与与运算保留了相应位的值。运算保留了相应位的值。=运算比较是否与该位为运算比较是否与该位为1时的值相等。时的值相等。/相等表示该属性有效,结果为相等表示该属性有效,结果为true,显示效果为,显示效果为1;/不相等表示该位无效,结果为不相等表示该位无效,结果为fasle,显示效果为,显示效果为0。 cout只读只读: (attribute&a0)=a0)endl; cout隐藏隐藏: (attribute&a1)=a1)endl; cout系统系统: (attribute&a2)=a2)endl;cout

39、卷标卷标: (attribute&a3)=a3)endl;cout目录目录: (attribute&a4)=a4)endl;cout归档归档: (attribute&a5)=a5)endl;coutendl;return 0;42西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【程序验证】【程序验证】题目要求输入的数在题目要求输入的数在0-63之间,但程序中并没有体现这一之间,但程序中并没有体现这一限制。如果输入限制。如果输入167,也能输出结果,这一结果是怎么计,也能输出结果,这一结果是怎么计算出来的呢?如果输入负数呢?怎么解决这一问题呢?算出来的呢?如

40、果输入负数呢?怎么解决这一问题呢?怎样让用户知道输入是否正确呢?怎样让用户知道输入是否正确呢? 【思路扩展】【思路扩展】一个变量表示一个数或字符。一个位可以表示两种状态事一个变量表示一个数或字符。一个位可以表示两种状态事物的一种状态,例如开关的物的一种状态,例如开关的“开开”或或“关关”状态。如果状态。如果用一位表示一个开关,控制一盏灯,那么一个字节就可用一位表示一个开关,控制一盏灯,那么一个字节就可以控制以控制8盏等,一个整型变量就可以控制盏等,一个整型变量就可以控制32盏等。用多个盏等。用多个整型变量就可以控制更多的等。请同学们想一想,位运整型变量就可以控制更多的等。请同学们想一想,位运算

41、还可以用在什么地方呢?算还可以用在什么地方呢?43西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 7. 7. 复合位运算符复合位运算符44西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 .6三目条件运算符三目条件运算符45. 0, 0, 0, 1)(ttty ? :double t ;int y ;y= ( t=0 ? 1 : 0 );西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-102-10】100以内整数加法练习系统。编写程序,自动产生两个小以内整数加法练习系统。编写程序,自动产生两个小于于100的整数,显示给用户,并

42、让用户输入它们的和。如的整数,显示给用户,并让用户输入它们的和。如果用户计算正确,显示果用户计算正确,显示“正确,祝贺!正确,祝贺!”,如果不正确,如果不正确,显示,显示“错误,加油啊错误,加油啊”。 ?自动产生小于?自动产生小于100100的整数?的整数?46西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include/包含头文件包含头文件cout,cin需要需要#include/包含头文件包含头文件,rand()需要需要using namespace std;/名字空间名字空间int main()/主函数主函数int a,b,c;/分别表示两个数及它们的和分别表示

43、两个数及它们的和int input;/存放用户输入的和存放用户输入的和char right=正确,祝贺!正确,祝贺!;/保存字符串保存字符串char wrong=错误,加油啊!错误,加油啊!;/保存字符串保存字符串a=rand()%100;/产生小于产生小于100的随机数的随机数b=rand()%100;/产生小于产生小于100的随机数的随机数47西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心c=a+b;/计算和计算和couta+binput;/用户输入的和用户输入的和cout(input=c? right:wrong);/根据正确与否显示不同的根据正确与否显示不同的信息信息in

44、put=c? coutright:coutwrong;/coutendl;return 0;?随机数,伪随机数,随机数种子随机数,伪随机数,随机数种子#include srand(time(0); rand();48西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.2.7 2.2.7 运算符的优先级运算符的优先级 小括号、下标、访问对象小括号、下标、访问对象 单目运算单目运算 算术运算算术运算 比较运算比较运算 逻辑运算逻辑运算 ?号运算?号运算 符合运算符合运算 表表2-32-3 结合方向结合方向 好习惯:运用小括号好习惯:运用小括号49西安交通大学计算机教学实验中心西安交通

45、大学计算机教学实验中心 .8不同类型数据的混合运算不同类型数据的混合运算 charintunsignedlongunsigned longfloatdouble 相同类型数据的运算相同类型数据的运算 强制类型转换强制类型转换 int a ;char b; a=65;b=a; cout(char)aint(b);50西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心2.3程序设计实例 【例【例2-112-11】海伦公式计算三角形的面积。用户输入】海伦公式计算三角形的面积。用户输入三角形的三条边长三角形的三条边长a,b,ca,b,c,用海伦公式计算三角形的,用海伦公式计算

46、三角形的面积。面积。 其中,其中, , ,三边长可能为实数。三边长可能为实数。提示:?提示:?51)()(csbsassA西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【算法描述】海伦公式计算三角形的面积【算法描述】海伦公式计算三角形的面积用用a,b,c表示三角形的三个边长。表示三角形的三个边长。输入输入a,b,c三个数;三个数;计算计算s=(a+b+c)/2;计算面积计算面积 ;输入面积输入面积A。52西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include /包含基本输入输出库头文件包含基本输入输出库头文件#include using name

47、space std; /使用名字空间使用名字空间 int main() /主函数主函数 double a,b,c; /定义双精度变量定义双精度变量double s,A;coutabc;/输入输入s=(a+b+c)/2.0;/计算计算sA=sqrt(s*(s-a)*(s-b)*(s-c);/计算面积计算面积coutThe area is Aendl;/打印面积打印面积 return 0;/程序结束,程序结束,53西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思考题思考题】计算计算s的右边的表达式注意什么问题,还可以怎样书写的右边的表达式注意什么问题,还可以怎样书写?程序中怎么有

48、两个程序中怎么有两个a(一个大写(一个大写A,一个小写,一个小写a)呢?)呢?54西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-122-12】构造一个】构造一个5 5位数的反序数。例如,用户输位数的反序数。例如,用户输入入1234512345,构造出,构造出5432154321并输出。并输出。 【算法描述】构造【算法描述】构造5 5位的反序数。位的反序数。用用n表示输入的原表示输入的原5位数,用位数,用m表示构造出的新表示构造出的新5位数。位数。输入五位数输入五位数n;依次分离出个位、十位、百位、千位和万位,分别用依次分离出个位、十位、百位、千位和万位,分别用a,b

49、,c,d,e表示;表示;用式子用式子(a*10+b)*10+c)*10+d)*10+e构造新的五位整数;构造新的五位整数;输出新数。输出新数。55西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include /包含基本输入输出库头文件包含基本输入输出库头文件#include using namespace std; /使用名字空间使用名字空间 int main() /主函数主函数 int n,m; /n,m表示输入的数和反序后的数表示输入的数和反序后的数char a,b,c,d,e; /分别表示原数的个、十、百、千、万位分别表示原数的个、十、百、千、万位coutn;

50、/输入一个五位整数输入一个五位整数a=n%10; /分离个位分离个位n=n/10;b=n%10;/分离个十位分离个十位56西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 n=n/10;c=n%10;/分离百位分离百位n=n/10;d=n%10;/分离千位分离千位n=n/10;e=n%10;/分离万位分离万位m= (a*10+b)*10+c)*10+d)*10+e; /构造新数构造新数coutThe inversed nunber is mendl; /输出输出 return 0; /程序结束,程序结束,57西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思路扩展】

51、【思路扩展】(1)e和最后的和最后的n有什么关系?最后的求余有必要吗?有什么关系?最后的求余有必要吗?(2)本例中,不用)本例中,不用n=n/10;这种方式,分离十位还可以写这种方式,分离十位还可以写成成b=n/10%10,类似地,分离其他位呢?类似地,分离其他位呢?(3)有兴趣的同学可以考虑:用户任意输入一个数,构)有兴趣的同学可以考虑:用户任意输入一个数,构造其反序数并输出。造其反序数并输出。(4)如果一个数的反序数与它相等,那么这就是一个回)如果一个数的反序数与它相等,那么这就是一个回文数。修改上面的程序,判断用户输入的数是不是回文文数。修改上面的程序,判断用户输入的数是不是回文数。数。

52、58西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【例【例2-132-13】一位数的整数形式和】一位数的整数形式和ASCIIASCII形式的转换。形式的转换。编写程序,用户输入一位数,存入整型变量,然后编写程序,用户输入一位数,存入整型变量,然后将其转换为字符存入字符型变量,打印字符变量及将其转换为字符存入字符型变量,打印字符变量及其代表字符的其代表字符的ASCIIASCII值。值。 整型转换为字符型是什么意思整型转换为字符型是什么意思? 1 整型整型1, 字符型字符型49 用途:例如输入一句话用途:例如输入一句话“西安城墙景区门票目前为西安城墙景区门票目前为40元元,拟上涨至

53、,拟上涨至55元,问上涨的百分比是多少?元,问上涨的百分比是多少?” 请自动计算请自动计算 注意,在句子中注意,在句子中“4040”,“5050”是字符型的是字符型的59西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心【源程序】#include /包含基本输入输出库头文件包含基本输入输出库头文件using namespace std; /使用名字空间使用名字空间 int main() /主函数主函数 int n;/声明整型变量声明整型变量char c;/声明字符型变量声明字符型变量coutn;/输入输入c=n+0;/数字转换为字符数字转换为字符coutc ASCII (int)ce

54、ndl; /以字符和数值形式打印以字符和数值形式打印 return 0; /程序结束,程序结束,60西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思考题】【思考题】 (1)编写程序,将数字字符转换为数值(将一个字符型)编写程序,将数字字符转换为数值(将一个字符型的数字,转换为一个整型的数字)。的数字,转换为一个整型的数字)。 (2)使用集成环境的跟踪功能,观察)使用集成环境的跟踪功能,观察int和和char型数据在型数据在内存中的值。内存中的值。61西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 2.3.4 2.3.4 启闭指定设备启闭指定设备 【例【例2-14

55、2-14】大型超市中,在顾客不是很多时,收银】大型超市中,在顾客不是很多时,收银台经常是隔一个打开一个。设这些收银台除操作员台经常是隔一个打开一个。设这些收银台除操作员密码外,还由控制室统一控制,只有控制室打开该密码外,还由控制室统一控制,只有控制室打开该设备后操作员才能使用。设每个设备用一个二进制设备后操作员才能使用。设每个设备用一个二进制位表示,位表示,1 1表示开启,表示开启,0 0表示关闭。用户输入一个无表示关闭。用户输入一个无符号整数表示初始的状态,编写程序分别将这个数符号整数表示初始的状态,编写程序分别将这个数的二进制的奇数位置成的二进制的奇数位置成0 0和置成和置成1 1(从最低

56、位开始为(从最低位开始为第第1 1位),以十六进制形式打印设置后的两个数。位),以十六进制形式打印设置后的两个数。62西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【算法描述】【算法描述】输入无符号整数输入无符号整数a设奇数位为设奇数位为0的数为的数为odd0=0 x55555555, 奇数位为奇数位为1的数为的数为odd1=0 xAAAAAAA将将a分别与分别与odd0,odd1做做“与与”运算和运算和“或或”运算,结果运算,结果用用a0,a1表示;表示;输出输出a0,a1的十六进制形式。的十六进制形式。63西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心#inc

57、lude /包含基本输入输出库头文件包含基本输入输出库头文件using namespace std; /使用名字空间使用名字空间 int main() /主函数主函数 unsigned int a;/声明无符号整型变量,保存原数声明无符号整型变量,保存原数unsigned int odd0=0 x55555555;/奇数位奇数位0 5=0101Bunsigned int odd1=0 xAAAAAAAA;/奇数位奇数位1 A=1010Bunsigned int a0,a1;/声明无符号整型变量,保存设置后的数声明无符号整型变量,保存设置后的数couta;/输入输入a0=a & odd0

58、; /奇数位置奇数位置0a1=a | odd1;/奇数位置奇数位置1coutodd digit 0-hexa0endl;/十六进制十六进制,奇数奇数位位置置0coutodd digit 1-hexa1endl;/十六进制十六进制,奇数奇数位位置置1 return 0; /程序结束,程序结束,64西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心 【思考题】编写程序保留一个数的第【思考题】编写程序保留一个数的第3 3个字节(左起个字节(左起)。)。65西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心66西安交通大学计算机教学实验中心西安交通大学计算机教学实验中心67西安交通大学计算机教学实验中心西安交通大学计算机教学实

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论