文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
项目三 数据类型、运算符与表达式
【实验内容、步骤】
1、检查所用计算机是否已经安装Visual C++2012。 2、进入Visual C++ 2012的工作环境。
3、编程示例,观察与验证。输入并运行下面的程序,分析运行结果。 【任务实施】
实验3-1 普通字符以及转义字符的应用示例 源程序3-1
#include
char c; c=’a’;
printf(“c=%c,c=%d,c+1=%c,c+1=%d\\n”,c,c,c+1,c+1); printf(“\\101 \\x41 A\\n”); printf(“I\\blove \\”C!\\”\\n”); }
提示:先了解字符的表示方法,值的范围以及与整数的混合运算规则。 本程序主要考察了普通字符和转义字符的。比如 “c4=’\\101’”这里/是一个转义字符,\\101被转义为一个八进制数101,也就是十进制的65,所以被赋值为ASCII码值为65的字符,也就是'A'。
源程序运行结果如下图:
图3-1-1 运行结果图
那么,如果将第四行“c=’a’;”再使之运行,第一个printf语句的结果会有什么变化? 若源程序改为:
图3-1-2 修改后的程序代码图(1)
大家发现:用双引号括起来的a在内存中以高高底底的方式占用两个字节地址,成为一个宽字节,程序以窄字读取结果发生了变化。 小提示:
高位存在地址高的地方如内存00625860 00625864 存1101 1000 。那么1101存到00625864这个地址中,1存在00625864, 0存在00625865 ,1存在00625866 ,1存在00625867 如此高高低低。
运行结果如下:
图3-1-2 修改后的运行结果图(2)
若改为“c=97; ” 将整数赋值给字符变量,会有什么变化呢? 图3-1-3 修改后的程序代码图(1) 由于97为小写字母a的十制进值。那么运行结果如下图: 图3-1-3 修改后的运行结果图(2)
若改为“c=300; ” 用大于255的整数赋值又会产生什么变化? 图3-1-4 修改后的程序代码图(1)
大家都知道,由于char 的取值范围在-128~127之间。那么运行结果如下: 图3-1-4 修改后的运行结果图(2)
若此句改成“c=a;”,有错误吗?若有,是编译错误还是连接错误?
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
我们可以肯定是编译有错误。大家注意,在进行字符赋值时一定要带上单引号。如下图所示,会发现有编译错误提示。
图3-1-5 修改后的程序代码图 实验3-2 不同整型数据类型应用示例 源程序3-2
#include
int x=010,y=10,z=0x10; //不同进制整型数据赋值
int a=100,b=-100;
unsigned c=100,d=-100; //将一个负整数赋给一个无符号的变量
printf(“x=%d,y=%d,z=%d\\n”,x,y,z);
printf(“a=%d,b=%d,c=%u,d=%u\\n”,a,b,c,d); }
第一个printf语句的输出结果:x的赋值是八进制数,y的赋值为十制进,z的赋值为十六进制。输出时为十进制整数形式。运行结果如下图: 图3-2-1 运行结果图
那么,不同数据表示形式的值有何不同呢?如下表: 表3-2
%d %u %f %s %c %p %e %x, %X %0 十进制有符号整数 十进制无符号整数 浮点数 字符串 单个字符 指针的值 指数形式的浮点数 无符号以十六进制表示的整数 无符号以八进制表示的整数 自动选择合适的表示法 %g 普通整数和无符号整数在存储正负数时输出有区别吗?答案当然!由于在计算机中,整数是以补码形式存放的。根据最高位的不同,如果是1,有符号数的话就是负数;如果是无符号数,则都解释为正数。则第二个printf语句的输出结果如下图:
图3-2-2 运行结果图 实验3-3 运算符以及算术表达式的应用举例
分析以下算术运算的结果,尤其除法的“反常”结果及自增和自减运算的不同结果。 源程序3-3
#include
int x,y,m,n;
文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
x=10; y=3;
printf(“x=%d,y=%d\\n”,x,y);
printf(“x+y=%d,x-y=%d,x*y=%d\\n”,x+y,x-y,x*y); //整数加、减、乘基本运算结果输出
printf(“x/y=%d,y/x=%d,x和y的余数=%d,y和x的余数=%d\\n”,x/y,y/x,x%y,y%x);
//整数除法、取余运算结果输出
m=++x; n=y++;
printf(“x=%d,y=%d,m=%d,n=%d\\n”,x,y,m,n);
printf(“x++=%d,++y=%d,x=%d,y=%d”,x++,++y,x,y); //自增、自减运算
}
提示:两整数相除得到整数;取余运算两边数据必须为整数类型。自增和自减运算符有两种用法:前置运算先使变量的值增1或减1,再以变化后的值参与运算。后置运算是先使用变量的值参与运算,后使变量的值增1或减1。
由于函数printf的参数表中可以填入简单的四则运算表达式。则第一个、第二个printf语句的输出结果:
图3-3-1 运行结果图
由于变量的类型为int 类,作除法运算时只能作整除,得到的是商值,舍去余数。第三个printf语句的输出结果:
图3-3-2 运行结果图
执行文件后会发现第四个、第五个printf语句出现问题,由于“m = ++x;”此句自增表达式不正确,自增自减号应写在变量的右边。源程序需改为:
{
int x,y,m,n; x=10; y=3;
printf(“x=%d,y=%d\\n”,x,y);
printf(“x+y=%d,x-y=%d,x*y=%d\\n”,x+y,x-y,x*y); printf(“x/y=%d,y/x=%d,x和y的余数=%d,y和x的余数
=%d\\n”,x/y,y/x,x%y,y%x);
m=x++; n=y++;
printf(“x=%d,y=%d,m=%d,n=%d\\n”,x,y,m,n);
printf(“x++=%d,++y=%d,x=%d,y=%d”,x++,++y,x,y); }
则4、5个printf语句的输出结果:
图3-3-3 运行结果图 【任务考核】
测试一下程序是否能实现两个变量a和b值的交换?如果不能找出错误点并改正。 源程序3-4:
#include