您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 汽车理论 > C++语言的基本成分–数据成分.
《计算概论A》课程程序设计部分C++语言基本成分(1)崔斌2/76问题为什么计算机能够完成计算任务?说说以下几个概念之间的关系:内存、地址、存储单元、字节计算机程序为什么要先编译再运行?说说程序中“#includeiostream”的含义。判断题:函数是C/C++程序的基本组成单位。每个程序中只能包含一个函数。每个程序中只能包含一个Main()函数。每个程序只能由一个文件组成。3/76简单程序的组成//**********************//*example.cpp*//**********************#includeiostreamusingnamespacestd;intmain(){intnumber[45]={78,56,69,31,36,67,31,47,69,34,45,74,61,82,43,41,76,79,81,66,54,50,76,51,53,28,74,39,45,61,52,41,43,75,78,84,72,51,43,64,75,81,69,55,74};intmax=0;inti=0;for(i=0;i45;i++){if(number[i]max)max=number[i];}coutTheMaximalNumberis:max;return0;//函数结束返回}注释预编译:文件包含命令声明名字空间函数体变量定义循环控制语句赋值语句运算表达式输入输出语句函数名每个程序中都包含哪些成分?5/76程序设计语言的构成语言的种类千差万别,但是,一般说来,基本成分不外四种:数据成分,用以描述程序中所涉及的数据;运算成分,用以描述程序中所包含的运算;控制成分,用以表达程序中的控制构造;传输成分,用以表达程序中数据的传输;——计算机科学技术百科全书6/76简单程序的组成//**********************//*example.cpp*//**********************#includeiostreamusingnamespacestd;intmain(){intnumber[45]={78,56,69,31,36,67,31,47,69,34,45,74,61,82,43,41,76,79,81,66,54,50,76,51,53,28,74,39,45,61,52,41,43,75,78,84,72,51,43,64,75,81,69,55,74};intmax=0;inti=0;for(i=0;i45;i++){if(number[i]max)max=number[i];}coutTheMaximalNumberis:max;return0;//函数结束返回}注释预编译:文件包含命令声明名字空间函数体变量定义控制语句赋值语句运算表达式数据成分运算成分输入输出成分控制成分函数名C++程序设计的基本构成——数据成分(基本数据成分)8/76计算机能够哪种类型的数据?9/76数制及数制转换整型数据实型数据字符型数据变量、常量输入、输出10/76数制及数制转换数制也称计数制,是指用一组固定的符号和统一的规则来表示数值的方法。通常按进位的方法进行计数,也称为进位计数制。计算机系统中几种常用进位计数制:●十位制(Decimalnotation)●二进制(Binarynotation)●八进制(Octalnotation)●十六进制数(Hexdecimalnotation)11/76数制及数制转换12/76例:十进制数253在不同数制下的表示253=2×102+5×101+3×100=An×2n+A(n-1)×2(n-1)+…+A1×21+A0×20=Bm×8m+B(m-1)×8(m-1)+…+B1×81+B0×80=Ck×16k+C(k-1)×16(k-1)+…+C1×161+C0×160AnA(n-1)…A1A0:二进制数BmB(m-1)…B1B0:十进制数CkC(k-1)…C1C0:十六进制数数制及数制转换13/76不同数制之间的转换,实质是基数间的转换。一般转换的原则是:如果两个有理数相等,则两数的整数部分和小数部分一定分别相等。因此,各数制之间进行转换时,通常对整数部分和小数部分分别进行转换。数制及数制转换14/76整数的转换数制及数制转换十进制数转换成二进制数把十进制数转换为二进制数的方法是:整数转换用“除2取余法”;小数转换用“乘2取整法”。1111110115/76十进制数转换成二进制数将(0.745)10转换成四位二进制小数,转换过程如下:0.745×2=1.490取出整数1(最高位)0.490×2=0.980取出整数00.980×2=1.960取出整数10.960×2=1.920取出整数1(最低位)0.920转换结束这里,第四次乘积的小数部分不为0,但已满足题目所要求的精度,所以,(0.745)10≈(0.1011)2。显然,在转换过程中,做的乘法次数越多,结果就越精确。小数的转换数制及数制转换16/76整型数据的分类按照数据的表示范围分类基本型:以int表示短整型:以shortint或short表示长整型:以longint或long表示按照数据有无符号分类有符号型:表示某个范围内的整数●[signed]int;[signed]short;[signed]long无符号型:表示某个范围内的正整数●unsignedint;unsignedshort;unsignedlong17/76整型数据的范围C/C++标准没有具体规定以上各类数据所占内存字节数,只要求long型数据长度不短于int型,short型不长于int型。VC中每种类型所占内存空间和表示的范围:18/76如何知道某种类型的数占多少字节?sizeof运算符用于计算某种类型的对象在内存中所占的字节数。#includeiostream.hvoidmain(){coutsizeof(shortint)=sizeof(shortint)endl;coutsizeof(signedshortint)=sizeof(signedshortint)endl;coutsizeof(unsignedshortint)=sizeof(unsignedshortint)endl;coutsizeof(int)=sizeof(int)endl;coutsizeof(signedint)=sizeof(signedint)endl;coutsizeof(unsignedint)=sizeof(unsignedint)endl;coutsizeof(longint)=sizeof(longint)endl;coutsizeof(signedlongint)=sizeof(signedlongint)endl;coutsizeof(unsignedlongint)=sizeof(unsignedlongint)endl;}19/76以不同的方式输出整数#includeiostreamusingnamespacestd;intmain(){intx=010,y=10,z=0x10;cout以十进制形式显示:;coutx=x,y=y,z=zendl;cout以八进制形式显示:;coutoctx=x,y=y,z=zendl;cout以十六进制形式显示:;couthexx=x,y=y,z=zendl;return0;}20/76整型数据的初始值在VC中,定义一个int类型的变量,而不给它赋值,会出现什么情况?例:#includeiostreamusingnamespacestd;intmain(){inta;couta;return0;}运行结果为:-858993460当输出是个很大的负数时,检查一下是否忘记赋值。21/76整型数据的溢出在VC中一个int型变量的最大允许值为2147483647,如果再加1,会出现什么情况?例:intmain(){inta,b;a=2147483647;b=a+1;couta“”b;return0;}运行结果为:2147483647,-21474836480111111111111111111111111111111110000000000000000000000000000000a:b:22/76整型数据的存储存储空间的分配8位有符号整数例01111111111111111111111111111111有符号整数变量:无符号整数变量:1111111111111111111111111111111123/76整型数据的存储原码、反码、补码在计算机中,负数以其正值的补码形式表达。正数即在符号为补0.原码:一个整数,按照绝对值大小转换成的二进制数,称为原码。反码:将二进制数按位取反,所得的新二进制数称为原二进制数的反码。补码:反码+1只有有符号的整数才有原码、反码和补码的!24/76用二进制中最小的数去对应最小的负数,最大的也相对应最大正数?不科学1个字节表示256个数表示范围:-128-127。简单理解:最高位表示符号位,如果是0表示正数,如果是1表示负数,剩下的7位用来储存数的绝对值的话,能表示27个数的绝对值,再考虑正负两种情况,27*2还是256个数。首先定义0在计算机中储存为00000000,对于正数我们依然可以像无符号数那样换算,从00000001到01111111依次表示1到127。(原码)25/76那负数是不是从10000001到11111111依次表示-1到-127?如果这样的话那么一共就只有255个数了(10000000的情况没有考虑在内)10000000在计算机中表示最小的负整数,就是这里的-128实际上并不是从10000001到11111111依次表示-1到-127,而是刚好相反的,从10000001到11111111依次表示-127到-1。负整数在计算机中是以补码形式储存的,补码是怎么样表示的呢?26/76引入另一个概念——反码反码就是把负数的原码(负数的原码和和它的绝对值所对应的原码相同,简单的说就是绝对值相同的数原码相同)各个位按位取反,是1就换成0,是0就换成1,如-1的原码是00000001,和1的原码相同,那么-1的反码就是11111110而补码就是在反码的基础上加1,即-1的补码是11111110+1=11111111-1在计算机中是按11111111储存的。总结:计算机储存有符号的整数时,是用该整数的补码进行储存的,0的原码、补码都是0,正数的原码、补码可以特殊理解为相同,负数的补码是它的反码加1。27/76【例1】+9的补码是00001001。注:这个+9的补码是用8位的2进制来表示。补码表示方式很多,还有16位2进制补码表示形式,以及32位2进制补码表示形式等。【例2】求-7的补码。因为给定数是负数,则符号位为“1”。后七位:-7的原码(10000111)→按位取反(11111000)(负数符号位不变)→加1(11111001)所以-7的补码是11111001。28/76为什么使用补码形式:一是为了防止0有2个编码,其次就是为了把减法运算用加法运算表示出来,以达到简化电路的作用。在补码的系统,加法电路就可以处理有负数的加法,不需另外处理减法的电路。而且,只要有电路负责数字的变号(例如将1变换为-1),也可以用加法电路来处理减法。4位数例:3+(-1)0011(3)+1111(-1)--------------10010(2)结果10010似乎是错的,因为已经超过四位,不过若忽略掉(从右数起的)第5位,结果是0010(2),和我们计
本文标题:C++语言的基本成分–数据成分.
链接地址:https://www.777doc.com/doc-2901849 .html