c语言程序设计编辑与调试环境实验报告,C语言程序设计实验报告5.doc

C语言程序设计实验报告(五)

专业 计算机科学与技术 班级 卓越工程师班 日期 2011年12月09日 实验组别 第一组 成绩 第五次实验 编译预处理实验 指导教师 李开 学生姓名 邱金源 学号 U201114493

实验名称 编译预处理实验

(一)实验目的

(1)掌握文件包含、宏定义、条件编译、assert宏的使用。

(2)练习带参数的宏定义、条件编译的使用。

(3)练习assert宏的使用。

(4)使用集成开发环境中的调试功能:单步执行,设置断点,观察变量值。

(二)实验内容及要求

1.源程序改错

下面是用宏来计算平方差和交换两数的源程序。在这个源程序中,存在若干语法和逻辑错误,要求在计算机上对这个源程序进行调试修改,使之能够正确完成计算平方差和交换两数的任务。

源程序1

#include #define SUM a + b

#define DIF a - b

#define SWAP(a,b) a = b, b = a

int 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);

return 0;

}

2.源程序修改替换

下面是用函数实现求三个数中最大数、计算两数之和的源程序。在这个源程序中存在若干语法和逻辑错误,要求:

(1) 对这个例子源程序进行调试修改,使之能够正确完成指定任务。

(2) 用带参数的宏替换函数max,实现求最大数的功能。

源程序2

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));

return 0;

}

int max(int x, int y, int z)

{

int t;

if (x > y)

t = x;

else

t = y;

if (t < z)

t = z;

return t;

}

float sum(float x, float y)

{

return x + y;

}

3.跟踪调试程序

下面程序的功能是利用R计算圆的面积s,以及面积s的整数部分。现要求:

(1) 修改程序,使程序编译通过且能运行。

(2) 单步执行。进入函数integer_fraction时,watches窗口中x为何值?在返回main时,watch窗口中i为何值?

(3) 排除错误,使程序能正确输出面积s值的整数部分,不会输出错误信息assertion failed。

源程序3

#define R

int 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

return 0;

}

int integer_fraction(float x)

{

int i = x;

return i;

}

4.程序设计

编写并上机调试运行能实现一下功能的程序:

(1) 已知三角形的面积是area = 根号下[s(s – a)(s – b)(s – c)],其中s = (a + b + c)/2,a, b, c为三角形的三边。定义两个带参数的宏,一个用来求s,另一个用来求 area,试编写一程序,用带参数的宏来计算三角形的面积。

(2) 使用条件编译方法编写一程序,其功能要求是,输入一行电报文字,可以任选两种输出:一为原文输出;二为变换字母的大小写,其他字符不变。用#define命令控制是否变换字母的大小写。

(三)实验步骤及结果

1. 源程序改错的实验步骤及结果

(1)创建一个工程

建立名为prj2的工程。

(2)编辑源文件和保存

用源程序1替换prj2工程中的main.c的源代码,编辑完毕后保存。

(3)编译和运行程序

编译结果如图

改错后程序及运行结果如图

结果有误!

经分析,第二个printf语句中SUM * DIF应该为(SUM) * (DIF)。修改后程序及运行结果如图。

结果正确!

2. 源程序修改替换的实验步骤及结果

(1)修改后程序如图

输入a = 3, b = 6, c = 9, d = 2.5, e = 3.5,观察程序运行结果如图

结果正确!

(2)替换源程序

替换后的程序如图所示

输入a = 1, b = 2, c = 3, d = 2.5, e = 3.5,观察程序运行结果如图

结果正确!

3.跟踪调试程序的实验步骤及结果

(1)创建一个工程

建立名为prj3的工程。

(2)编辑源文件和保存

用源程序3替换prj3工程中的main.c的源代码,编辑完毕后保存。

(3)修改程序使之能编译通过且能运行

修改后的程序如图所示

输入r = 2,观察程序运行结果如图所示

结果正确!

(4)单步执行

(A) 进入函数integer_fraction时,watches窗口中x为何值?

(B)在返回main时,watch窗口中i为何值?

12

(5)排除错误

要对函数做初始化。不做初始化,则参数在传递过程中回默认为double或int,导致结果出现错误。

4.程序设计

(1)

1)创建一个工程

建立名为prj4的工程。

2)编辑源文件和保存

程序如图

3)编译和运行程序

输入a = 3, b = 4, c = 5,观察程序运行结果如图

结果正确!

(2)

1)创建一个工程

建立名为prj5的工程。

2)编辑源文件和保存

程序如图

3)编译和运行程序

输入一行字符,观察程序运行结果如图。

结果正确!

将“#define CHANGE 1”换成“#define CHANGE 0”再输入一行字符,观察程序运行结果如图。

结果正确!

(四)实验体会

编写C语言程序时,要掌握文件包含、宏定义还有条件编译的使用。要掌握带参数的宏定义和函数的使用,达到灵活运用。一般来说,宏比较适合于经常使用的简短表达式,以及小的可重复的代码段,这样可以使程序运行速度更快;当任务比较复杂,需要多行代码才能实现时,或者要求程序越小越好时,就应该使用函数而不用宏。

头文件assert.h中的宏assert用来测试表达式的值,有助于表达式的值满足要求,保证程序的正确性。

条件编译能够控制预处理指令的执行和程序代码的编译。

熟练掌握编译预处理,可以使程序的编辑更为得心应手。

8

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值