学生实验报告
萨荼Satu
实验项目名称:数据的表示实验学时:
同组学生姓名:实验地点:
实验日期:实验成绩:
批改教师:批改时间:
一、实验目的和要求
熟悉数值数据在计算机内部的表示方式,掌握相关的处理语句。
二、实验仪器和设备
Linux系统
Ubuntu22.04.5LTS
三、实验过程
(1)“-22”和“-22u”的结果一样吗?为什么?请编写程序验证。
#includestdio.h
intmain(){
??intresult1=(22);
??intresult2=(22u);
??printf(22?=%d\n,result1);
??printf(22u=%d\n,result2);
??if(result1==result2){
????printf(两个表达式结果一样。\n);
??}else{
????printf(两个表达式结果不一样。\n);
??}
??return0;
}
(2)运行下图中的程序代码,并对程序输出结果进行分析。
(3)运行下列代码,并对输出结果进行分析。
#includestdio.h
intmain()
{
??unionNUM
??{
????inta;
????charb[4];
??}num;
??num.a=0
??printf(0x%X\n,num.b[2]);
??return0;
}
(4)请说明下列赋值语句执行后,各个变量对应的机器数和真值各是多少?编写一段C语言程序代码并进行编译,观察默认情况下,编译器是否会报warning。如果有warning信息的话,分析为何会出现。
inta=2147483648;
intb=-2147483648;
intc=2147483649;
unsignedshortd=65539;
shorte=-32790;
#includestdio.h
intmain(){
??inta=2147483648;
??intb=-2147483648;
??intc=2147483649;
??unsignedshortd=65539;
??shorte=-32790;
??printf(a=%d,十六进制:0x%X,a,a);
??printf(b=%d,十六进制:0x%X,b,b);
??printf(c=%d,十六进制:0x%X,c,c);
??printf(d=%u,十六进制:0x%X,d,d);
??printf(e=%d,十六进制:0x%X,e,(unsignedshort)e);
??return0;
}
报错原因:常数超出了int能表示的范围
(5)编译运行以下代码,并至少重复运行3次。
1.给出每次运行的结果截图
2.每次运行过程中,是否每一次循环中的判等结果都一致?为什么?
3.每次运行过程中,每一次循环输出的i、x和y的结果分别是什么?为什么?
#includestdio.h
intmain()
{
??doublex=23.0000221,y=24.0000221,z=1.0;
??for(inti=0;i10;i++){
????if((y-x)==z)
??????printf(equal\n);
????else
??????printf(notequal\n);
????x+=z;
????y+=z;
????printf(%d,%f,%f\n,i,x,y);
??}
??return0;
}
(2)判等结果并不总一致,随着循环推移,浮点误差可能导致(y-x)==z为false。
(3)每轮结束x和y都+1,i、x、y依次变大,但由于浮点误差,y-x可能不再精确等于z。
四、实验结果与分析
完成五项Linux实验,掌握Linux编译程序基本用法。
实验项目名称:开发与调试实验学时: