您好,欢迎访问三七文档
当前位置:首页 > 财经/贸易 > 资产评估/会计 > 计算机基础大作业完整版
精品文档.学生实验报告(理工类)课程名称:计算机系统基础I专业班级:学生学号:学生姓名:所属院部:计算机工程学院指导教师:2019——2020学年第1学期金陵科技学院教务处制精品文档.实验报告书写要求实验报告原则上要求学生手写,要求书写工整。若因课程特点需打印的,要遵照以下字体、字号、间距等的具体要求。纸张一律采用A4的纸张。实验报告书写说明实验报告中一至四项内容为必填项,包括实验目的和要求;实验仪器和设备;实验内容与过程;实验结果与分析。各院部可根据学科特点和实验具体要求增加项目。填写注意事项(1)细致观察,及时、准确、如实记录。(2)准确说明,层次清晰。(3)尽量采用专用术语来说明事物。(4)外文、符号、公式要准确,应使用统一规定的名词和符号。(5)应独立完成实验报告的书写,严禁抄袭、复印,一经发现,以零分论处。实验报告批改说明实验报告的批改要及时、认真、仔细,一律用红色笔批改。实验报告的批改成绩采用百分制,具体评分标准由各院部自行制定。实验报告装订要求实验批改完毕后,任课老师将每门课程的每个实验项目的实验报告以自然班为单位、按学号升序排列,装订成册,并附上一份该门课程的实验大纲。精品文档.实验项目名称:数据的表示实验学时:2同组学生姓名:无实验地点:实验日期:实验成绩:批改教师:批改时间:一、实验目的和要求熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。二、实验仪器和设备硬件环境:IA-32软件环境:Linuxubuntu14.04,C语言,gcc三、实验内容与过程1、实验内容1.“-22”和“-22u”的结果一样吗?为什么?请编写程序验证。2.运行下图中的程序代码,并对程序输出结果进行分析。3.运行下列代码,并对输出结果进行分析。#includestdio.hvoidmain(){unionNUM{inta;charb[4];}num;num.a=0x12345678;printf(0x%X\n,num.b[2]);}精品文档.4.请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段程序代码并进行编译,观察默认情况下,编译器是否报warning。如果有warning信息的话,分析为何会出现这种warning信息。inta=2147483648;intb=-2147483648;intc=2147483649;unsignedshortd=65539;shorte=-32790;5.编译运行以下程序,并至少重复运行3次。voidmain(){doublex=23.001,y=24.001,z=1.0;for(inti=0;i10;i++){if((y-x)==z)printf(equal.n);elseprintf(notequal\n);x+=z;y+=z;printf(%d,%f,%f\n”,i,x,y);}}要求:(1)给出每次运行的结果截图。(2)每次运行过程中,是否每一次循环中的判等结果都一致?为什么?(3)每次运行过程中,每一次循环输出的i、x和y的结果分别是什么?为什么?2、实验步骤1.进入linux系统,在shell终端的提示符后输入gedit,编写C语言源程序。gedit输入实验内容1的源程序并以SAMPLE.C为文件名将文件存盘。2.用GCC对源文件SAMPLE.C进行编译并产生目标文件SAMPLE.O,汇编语言程序SAMPLE.S。gcc–s–oSAMPLE.SSAMPLE.Cgcc–g–oSAMPLE.OSAMPLE.C3.用GDB跟踪执行SAMPLE。gdbSAMPLE4.观察程序执行情况并记录运行结果。5.依照上述四个步骤,完成对其余实验内容的操作。四、实验结果与分析精品文档.(1)#includestdio.hvoidmain(){inta,c;a=(-22)?1:0;c=(-22u)?1:0;printf(%d\n%d\n,a,c);}精品文档.正数的原码,反码,补码都一样。而负数在计算机里是按补码存放和运算的。-2在内存中的存储方式为1111,1111,1111,1111,11111,11111,1111,1110B即fffffffeH,最高位为符号位,2在内存中的存储方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位为符号位,2u在内存中存储的方式为0000,0000,0000,0000,0000,0000,0000,0010B即2H,最高位不再是符号位。所以-22是符号位的比较,即-22是正确的。-22u是有符号数和无符号数之间的比较,此时编译器会把有符号数自动转无符号数,所以-2=2。-22,是有符号数的比较,即2+(-2)=fffffffeH+fffffffeH=1FFFFFFFCH=[-4]补,最高位符号位溢出,所以证明被减数的符号是负号,即-22是正确的。.有符号数和无符号数的比较。系统会自动把有符号数转换成无符号数。fffffffeH=4294967294D2D(是错误的)=2H精品文档.(2)精品文档.因为所有比int型小的数据类型(包括char,signedchar,unsignedchar,short,signedshort,unsignedshort)转换为int型。如果转换后的数据会超出int型所能表示的范围的话,则转换为unsignedint型;所以题中的c在和a比较时应该先转换成int型,再转换成unsignedint型,所以此时的c为11111111111111111111111111111111B(有符号数按最高位符号位进行扩位)即FFFFFFFFH,此时的a为1H,显然c大于a,所以第一次输出的是unsignedintis0;同理当b和c比较时,c应该转换成int型,所以此时的c为11111111111111111111111111111111B即FFFFH=-2147483647D,b也应该转换成int型,所以此时的b为00000000000000000000000000000001B=1D,显然bc,所以输出unsignedshortis1#includestdio.hVoidmain(){Unsignedinta=1;Unsignedshortb=1;Charc=-1;精品文档.Intd;d=(ac)?1:0;printf(“unsignedintis%d\n”,d);d=(bc)?1:0;printf(“unsignedintis%d\n”,d);}(3)由于在union共用体当中,inta和charb[4]数据公用同一段内存地址,而此时a和b同时占用四个字节,所以当执行num.a=0x12345678;同时b也会被赋值,b的内存示意图如下:b的值87654321b的地址b[0]b[1]b[2]b[3]由上图可知执行printf(0x%X\n,num.b[2]);会输出0x34。现在解释为什么会出现表中的情况对于数组来说,下标越小地址越小,下标越大地址越大,而a=0x12345678这个值中,1精品文档.和2分别在最高位和次高位,它就会存储在下标大的b[3]中,以此类推,便可以得到表中的数据。这也证明了我的32位Ubuntu是小端存储(字数据的高字节存储在高地址中,而字数据的低字节则存储在低地址中)。(4)精品文档.#includestdio.hvoidmain(){inta=2147483648;4个字节intb=-2147483648;intc=-2147483649;unsignedshortd=65539;2个字节shorte=-32790;2个字节printf(%d\n,a);printf(%d\n,b);printf(%d\n,c);printf(%d\n,d);printf(%d\n,e);}机器数就是数字在计算机中的二进制表示形式,其特点一是符号数字化,二是其数的大小受机器字长的限制。将带符号位的机器数对应的真正数值称为机器数的真值inta=2147483648的机器数是10000000000000000000000000000000Bintb=-2147483648的机器数是10000000000000000000000000000000Bintc=2147483649的机器数是10000000000000000000000000000001Bunsignedshortd=65539的机器数无法表示shorte=-32790的机器数无法表示int类型在32位计算机中占4个字节,即32位。又因为正数的补码是其本身,所以int类型能表示的所有正数为:0,0000000000000000000000000000000B到0,1111111111111111111111111111111B即0到+2147483647。而负数的补码是除符号位外各位取反最后加一而来。所以int类型所能表示的所有负数为:0,0000000000000000000000000000000B(-0D的补码)到1,1111111111111111111111111111111B即0到精品文档.-2147483647D。而32位二进制数能表示的所有值为2的32次方个,而从-2147483647D到+2147483647D总共是2的32次方减一个数,而少的这个数就是10000000000000000000000000000000B(-0D的补码),而任何数的原码都不能在转换成补码时成为这个数,我们人为的把他规定为-2147483648所以int类型的取值范围为-2147483648到+2147483647,所以题目中的b是正确的,并且不会发生溢出。而题目中的a=2147483648其实已经超出int类型的最大范围,但是a=2147483648=2147483647+1=0,1111111111111111111111111111111B+1B=10000000000000000000000000000000B=-2147483648,而-2147483648又在int类型的取值范围内,所以也不会溢出,如果此时打印输出a的十进制就是-2147483648,同理可得c=2147483649=2147483647+2=-2147483647,也不会发生溢出现象。对于题目中的d,由于它是无符号短整型的变量,在32位机中占两个字节。所以d的取值范围为:0到65535,而65539不在这个范围内,所以会报溢出警告。对于题目中的e,由于它是有符号短整型的变量,在32位机中占两个字节。所以e的取值范围为:-32768到+32767,此时c=-32790=-32768-22=-32768+(-22)=10000000000000000000000000000000B+11111111111111111111111111101001B=000101111111111111111111111111101001B=+6442450921D+32767D所以e会报出溢出警告。5.Double双精度浮点数,按照IEEE-754标准,双精度浮点数有效数字到小数点后15位,x=23.001,可表示为23.00100000000001;y=24.001000000000001;31.001会表示成31.001000000000001,32.001会表示成32.001000000000005,于是就不相等了。结尾的那个1或5都是由于有限精度无法精确的小数造成的,(1)精品文档.精品文档.(2)每次运行过程中,每一次循环输出的i、x和y的结果分别是i=0,x=24.001,y=25.001;i=1,x=25.001,y=26.001i=2,x=26.001,y=27.001i=3,x=27.001,y=28.001i=4,x=28.001,y=29.001i=5,x=29.001,y=30.001i=6,x=30.001,y=31.001i=7,x=31.001,y
本文标题:计算机基础大作业完整版
链接地址:https://www.777doc.com/doc-7208469 .html