南昌大学实验报告学生姓名:刘鑫学号:6103113093 专业班级:计科133 实验类型:□验证□√综合□设计□创新实验日期:实验成绩:一、实验项目名称数据类型、运算符和表达式二、实验目的1.了解C++语言中数据类型的意义;2.掌握不同数据类型之间的赋值的规律;3.学会有关C++语言的有关运算符,以及包含这些运算符的表达式,特别是是++和—运算符的使用。
4.进一步熟悉C++程序的编辑环境。
三.实验内容1.整型整型数据有短整型(short)、整型(int)、长整型(long)3种,无符号(unsigned)整型也相应有3种,它们在内存中的存储方式均相同,区别在于字长(所占内存字节数)以及符号位。
本实验通过观察整型数据的输出变化,体会整型的存储方式。
i.输入以下程序:#include <iostream>using namespace std;int main(){short a, b; unsigned c, d; long e, f;a = 100;b = -100; e = 50000; f = 32767;c = a;d = b;printf(“%d, %d\n”, a, b);printf(“%u, %u\n”, c, d);c = a = e;d = b = f;printf(“%d, %d\n”, a, b);printf(“%u, %u\n”, c, d);}ii.编译并运行之,观察其输出结果。
并思考以下问题:a.将一个负整数赋给无符号的变量,会发生什么结果?为什么?b.将一个大于32767的长整数赋给整型变量,会发生什么结果?为什么?c.将一个长整数赋给无符号变量,会发生什么结果?为什么?iii.改变程序中各变量的值:a = 65580;b = -40000; e = 65535; f = 65580;再次运行程序并分析结果。
2、算术与逻辑运算i.输入以下程序:#include <iostream>using namespace std;int main(){ int x,y,z,f;x = y = z = 1;f = --x || y-- && z++;cout << "x = " << x << endl;cout << "y = " << y << endl;cout << "z = " << z << endl;cout << "f = " << f << endl;}ii.编译并运行之,输出其运行结果iii.将第6行改成:f = x-- || y-- && z++;编译并运行之,输出其运行结果,和此前的运行结果是否相同?为什么?3、输入以下源程序,输出程序的运行结果并进行适当分析。
#include <iostream>using namespace std;int main(){ int a = 1, b = 2;int x, y, z;cout << (a++)+(++b) << endl;cout << a % b << endl;x = !a>b;y = a-- && b; z = (x+y, a++ , b++) ;cout << a << endl << b << endl;cout << x << endl << y << endl << z << endl;}4、输出iv.输入以下程序(v部分),并补充空白部分,使得能按照以下格式输出结果:i = 1 j = 2 k = 3x = 2.20000, y = 3.40000, z = -5.60000x = 2.200000e+000, y = 3.400000,z = -5.6x + y = 5.60 y + z = -2.20 z + x = -3.40u = 47215c1 = ‘a’ or 97 c2 = ‘b’ or 9897和98分别为a与b的ASCII码。
v.以下为程序。
请在计算机上验证是否正确。
#include <iostream>using namespace std;main(){ int i = 1, j = 2, k = 3;unsigned u = 47215;float x = 2.2, y = 3.4, z = -5.6;char c1 = …a‟, c2 = …b‟;printf(“”, i, j, k);printf(“”, x, y, z);printf(“”, x, y, z);printf(“ ”, x+y, y+z, z+x);printf(“”, u);printf(“”, c1, c1, c2, c2);}5、编写C++源程序,实现如下功能:输入一个三位整数,将它反向输出。
样式输入:Please input an integer(100~999):235样式输出:The integer is:5326、编写C++源程序,实现如下功能:输入三个整数,求出其中最小数(要求使用条件表达式)。
7、编写C++源程序,实现如下功能:输入平面上某点横坐标x和纵坐标y,若该点在由下图表示的方块区域内,则输出1;否则,输出0(不采用选择结构)。
四、实验环境PC微机,Windows 操作系统,Visual c++ 程序集成环境五、实验步骤步骤1、按题目要求完成实验内容1、2、3、4,回答题中问题并分析。
第一题:2结果a答:4294967196;原因:计算机中数据用补码表示,int型量最高位是符号位,为1时表示负值,为0时表示正值。
将一个负数赋给无符号变量时,程序会将该数的符号位数1当做一位数通过无符号整形表示出来得到大于32768的数。
b答:出现负数;原因:long型数据赋给int型变量时,将低16位值送给int 型变量,而将高16位截断舍弃。
c答:4294951760;原因:计算机中数据用补码表示,程序将长整数的符号位1通过无符号整形表达出来,结果大于32768。
3:源程序:#include <iostream>#include<cstdio>using namespace std;int main(){short a, b; unsigned c, d; long e, f;a = 65580;b = -40000; e = 65535; f = 65580;c = a;d = b;printf("%d, %d\n", a, b);printf("%u, %u\n", c, d);c = a = e;d = b = f;printf("%d, %d\n", a, b);printf("%u, %u\n", c, d);}分析:第一行:因为a,b是短整型常量,能表示-32768~32767,上述a,b在赋值是已超过可表示的最大范围,故会在一开始发生溢出,表示为44,25536。
在后面的输出中因未超出int能表示的范围,故原样输出。
第二行:a=44、b=25536为正数,未超出unsigned能表示的范围,故在a、b 赋值给c、d并用unsigned型表示,原样输出。
第三行:e、f为long型常量,且数值超出short型表示范围,故在赋值给a、b 时数值被截断,表示为-1、44.第四行:a=-1在赋值给c时,计算机将数据已补码形式表示出来,故得到c=4294967295,b未超出short型表示范围,故原样输出第二题:结果2:3:分析:++和--运算符位于变量前和后,其运算规则是不同的。
运算符号在前表示先进行自增自减运算,后使用变量,而运算符号在后则运算规则相反,故两次输出结果不同。
第三题:结果:分析:在源程序中,输出结果第一行是因为a先参与运算后自增,b先自增后参与运算,显示为4;第二行是因为a在上行自增为2,b自增为3,在%运算后显示2;第三行是因为a先自减后自增,值不变,为2;第四行b自增一次,由3变为4,显示4;第五行因为!a为0,而0<3,即x=0,输出为0,;第六行a--&&b为真,输出为1,;第七行显示最后一个表达式的值,为3。
第四题:源程序#include<iostream>#include<cstdio>using namespace std;int main(){int i=1,j=2,k=3;unsigned u= 47215;float x=2.2,y=3.4,z=-5.6;char c1='a',c2='b';printf("i=%d,j=%d,k=%d\n",i,j,k);printf("x=%7.5f,y=%7.5f,z=%7.5f\n",x,y,z);printf("x=%e,y=%f,z=%3.1f\n",x,y,z);printf("x+y=%4.2f,y+z=%4.2f,z+x=%4.2f\n",x+y,y+z,z+x);printf("u=%u\n",u);printf("c1='%c' or %d c2='%c' or %d\n",c1,c1,c2,c2);return 0;}结果步骤2、编写程序完成实验内容5、6、7第五题:源程序#include <iostream>using namespace std;int main(){cout<<"Please input an intenger(100~999)"<<endl;int a;cin>>a;a=a/100+100*(a%10)+10*(a/10%10);cout<<a<<endl;}第六题:源程序#include <iostream>using namespace std;int main(){cout<<"请在您要输入的三个数之间用空格键分开"<<endl;int a,b,c,x,y;cin>>a>>b>>c;a>b?x=b:x=a;x>c?y=c:y=x;cout<<y<<endl;}结果:第七题:源程序:#include<iostream>using namespace std;int main(){int x,y,z;cin>>x>>y;z=((x>-2)&&(x<2))&&(y>-2)&&(y<2);cout<<z;}结果步骤3、参照实验一的报告书写规范,完成此次实验报告的编写 六、实验数据及处理结果***/*写出实验内容的算法(用流程图或伪语言表示)、完整的源程序、结果并能对结果的正确性及上机时产生的问题进行分析*/答:源程序,结果在上面已经附上;下面是是NS图 第一题: 第二题: x=y=z=f f=--x||y--&&z++ 输出x=x ,换行输出y=y ,换行输出z=z ,换行输出f=f ,换行第三题:a=1,b=2输出(a++)+(++b ),换行输出a%b ,换行x=!a>b ;y=a--&&b;z=(x+y,a++,b++)输出a ,换行,输出b ,换行输出x ,换行,输出y ,换行,输出z ,换行第四题:i=1,j=2,k=3,无符号变量u=47215,浮点数x=2.2,y=3.4,z=-5.6,字符常量a=100,b= -100,e=50000,f=32767c=a ,d=b输出整形变量a ,b ,换行输出整型变量c ,d ,换行c=a=e,d=b=f输出整型变量a ,b ,换行输出无符号变量才c ,dc1='a',c2'b'输出整型变量i,j,k,换行输出7位小数点后五位的浮点数x,y,z,换行输出分别以科学记数法,浮点数,3位中有1位是小数的浮点数表示的x,y,z,换行输出4位小数点后2位的浮点数x+y,y+z,z+x,换行输出无符号变量u,换行输出c1,c2,和c1,c2的ASCLL码值,第五题:输出Please input an integer(100~999):输入a计算a=a/100+100*(a%10)+10*(a/10%10输出a第六题:输入a,b,c选择a,b中最大的赋值给x选择x,c中最大的赋值给y输出y第七题:输入x,yz=((x>-2)&&(x<2))&&(y>-2)&&(y<2)输出z七、简答题1、如何测试习题1和习题4中各个变量在内存中所占字节数?有哪些方法?答:建立sizeof运算符,进入源程序看其定义的字符类型,后查书后表得到其所占字节。