C语言程序设计第三次25实验报告
C语言程序设计 实验报告
专业 班级 日期 11月26日 成绩
实验组别 第 3(2.7) 次实验 指导教师 李开
学生姓名 学号 同组人姓名
实验名称 编译预处理实验
一、实验目的
(1)掌握文件包含、宏定义、条件编译、assert宏的使用;
(2)练习带参数的宏定义、条件编译的使用;
(3)练习assert宏的使用;
(4)使用集成开发环境中的调试功能:单步执行、设置断点、观察变量值。
二、实验任务
1.源程序改错
下面是用宏来计算平方差、交换两数的源程序,在这个源程序中存在若干语法和逻辑错误。要求在计算机上对这个例子程序进行调试修改,使之能够正确完成指定任务。
#include
#define SUM a+b
#define DIF a-b
#define SWAP(a,b) a=b,b=a
void main(void)
{
int b, t;
printf("Input two integers a, b:");
scanf("%d,%d", &a,&b);
printf("\nSUM=%d\n the difference between square of a and square of b is:%d",SUM, SUM*DIF);
SWAP(a,b);
Printf("\nNow a=%d,b=%d\n",a,b);
}
2.源程序修改替换
下面是用函数实现求三个数中最大数、计算两数之和的程序,在这个源程序中存在若干语法和逻辑错误。
要求:1)对这个例子程序进行调试修改,使之能够正确完成指定任务;
2)用带参数的宏替换函数max,来实现求最大数的功能。
void main(void)
{
int a, b, c;
float d, e;
printf("Enter three integers:");
scanf("%d,%d,%d",&a,&b,&c);
printf("\nthe maximum of them is %d\n",max(a,b,c));
printf("Enter two floating point numbers:");
scanf("%f,%f",&d,&e);
printf("\nthe sum of them is %f\n",sum(d,e));
}
int max(int x, int y, int z)
{
int t;
if (x>y)
t=x;
else
t=y;
if (t
t=z;
return t;
}
float sum(float x, float y)
{
return x+y;
}
3.跟踪调试
下面程序利用R计算圆的面积s,以及面积s的整数部分。
#define R
void main(void)
{
float r, s;
int s_integer=0;
printf ("input a number: ");
scanf("%f",&r);
#ifdef R
s=3.14159*r*r;
printf("area of round is: %f\n",s);
s_integer= integer_fraction(s);
printf("the integer fraction of area is %d\n", s_integer);
assert((s-s_integer)<1.0);
#endif
}
int integer_fraction(float x)
{
int i=x;
return i;
}
(1)修改程序,使程序编译通过且能运行;
(2)单步执行。进入函数decimal_fraction时watch窗口中x为何值?在返回main时, watch窗口中i为何值?
(3)排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信息assertion failed。
4.程序设计
(1)三角形的面积是,其中,a,