实验报告10
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《程序设计基础》实验报告
姓名郭晟班级17级计算机科学与技术
1班
学号1706011105
实验名称实验10、预编译处理和位处理
实验时间成绩90
实验目的:
1.掌握宏定义的定义格式和使用方法,区别无参数宏和带参数宏;
2.掌握条件编译的具体形式以及使用方法;
3.掌握位运算的概念和方法,学会使用位运算符;
4.学会通过位运算实现对某些位的操作。
实验环境:
1.所用操作系统的版本windows 10
2.所用软件版本visualc 6.0++
实验内容:
1.输入一行字母字符,设置条件编译命令,使之能将字符全部已大写字母输出,或全部以小写字母输出。
2.设计一个函数,使给出一个数的原码,能得到该数的补码。
3.使用##进行程序的文本链接。
4.输入半径,求圆周长,圆面积,圆球体积,使用不带参数的宏定义.(圆周长l=2*pi*r,圆面积s=pi*r*r,圆球体积v=4/3*pi*r*r*r)。
实验过程及结果记录:
1.源代码为:
#define PI 1
void main()
{
char str[20]="zxcvbn",c;
int i=0;
while((c=str[i])!='\0')
{
i++;
#if PI
if(c>='a'&&c<='z')
c=c-32;
#else
if(c>='A'&&c<='Z')
c=c+32;
#endif
printf("%c",c);
}
}
错误结果为:
错误原因:
没有任何库函数,找不到函数。
改正:
在第一行后加 #include
2.源代码:
#include
unsigned int num(unsigned value)
{
unsigned int z;
z=value&0x80000000;
if(z==0x80000000)
z==(~ value|0x80000000)+1;
else
z=value;
return(z);
}
void main()
{
unsigned int a;
printf("请输入十六进制数:");
scanf("%x",&a);
printf("%The result is %x\n",num(a)); }
出现的错误为:
改正为:
第七行改为:z=(~ value|0x80000000)+1;
3.代码:
#include
#define ABC(x,y) x#y
void main()
{
int a1,a2,a3;
ABC(a,1)=15;
ABC(a,2)=120;
a3=4;
printf("%d %d %d",a1,a2,a3);
}
错误为:
错误原因:
没有找到ABC以及无法识别。
改正:
将第二行改为#define ABC(x,y) x##y
将第7行改为ABC(a,2)=120;
4.源代码为:
#include
#define PI 3.1415926
int main()
{
double l,s,r,v;
printf("请输入半径r:");
scanf("%lf",&r);
l=2.0*PI*r;
s=PI*r*r;
v=4/3*PI*r*r*r;
printf("l=%10.4lf\ns=%10.4lf\nv=%10.4lf\n",l,s,v);
}
运行结果为:
错误为:
对于有’/’字符的运算,两侧若全是整数,则结果为int型,会导致结果偏小,应把分子或分母改为小数,以保证结果的精确性
改正为:
第十行改为:v=4.0/3*PI*r*r*r;
实验总结:
1.宏名习惯用大写字母表示,以便与变量名相区别,虽然并非规定,但建议大写。
2.宏定义只是简单的置换,不做正确性检查,若出现错误编译时也不会报错,因此会增加程序的不稳定性,定义时务必要仔细检查。
3.善于利用宏定义,可以实现程序的简化。
评阅意见:本次实验报告书写格式不够规范;目的明确,报告内容有错误分析和错误改进,有错误截图,记录不够详细;实验总结较恰当。