C语言 四川师范大学 信息与计算科学 冯山 实验六文档格式.docx
《C语言 四川师范大学 信息与计算科学 冯山 实验六文档格式.docx》由会员分享,可在线阅读,更多相关《C语言 四川师范大学 信息与计算科学 冯山 实验六文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
(5)对C语言中常用的预编译命令的基本掌握。
二、实验内容
函数的声明、定义和使用方法。
具体实例如下:
(1)编写一个在屏幕上画一条正弦曲线的函数;
(2)编写一个函数,它可以求出给定数的所有因子,如下形式显示其结果:
72=2*2*2*3*3;
(3)分别写出一个求N个数的最大公约数和最小公倍数的递归函数;
(4)试编制n碟片hanoi塔的问题求解函数,并利用它求解4个盘片的结果;
(5)试编写求n!
的函数,并求n=7的结果。
2.有关变量的属性实验(静态、动态、全局、局部等方面)。
(1)仔细分析以下程序的执行结果,然后上机运行如下程序段,并对各个变量的属性及其使用结果进行比较分析:
main()
{/******(a)******/
intx=1;
{/******(b)******/
voidprt(void);
intx=3;
prt();
printf("
Thesecondxis%d\n"
x);
}/******(c)******/
Thefirstxis%d\n"
}
voidprt(void)
{/******(d)******/
intx=5;
Thethirdxis%d\n"
}/******(e)******/
(2)仔细分析下列程序,是否有错误之处?
然后分析其执行结果,上机验证并对各个变量的存储属性及其结果进行比较分析:
#defineLOW11
#defineHIGH23
#defineCHANGE12
inti=LOW;
{
intworkover(inti);
intreset(inti);
inti=HIGH;
reset(i/2.5);
i=%d\n"
i);
reset(i=i/3);
reset(i/2);
workover(i);
workover(inti);
i=(i%i++)*((i*i)/(2*i)+4);
return(i);
reset(inti);
i=i<
=CHANGE?
LOW:
HIGH++;
}
(3)以下程序希望打印5行"
*****"
,能否做到?
为什么?
inti;
voidprt();
for(i=0;
i<
5;
i++)
voidprt()
i++)
%c"
'
*'
);
\n"
(4)分析、编辑并执行以下程序,如果有错,请指出其错误原因,同时需要指出各个变量的存储属性。
/*****file1.c*****/
intlast(void);
intnew(int);
intreset(void);
exterinti;
main(void)
inti,j;
i=reset();
for(j=1;
j<
=3;
j++)
printf(“i=%d\tj=%d\n”,i,j);
printf(“next(i)=%d\t”,next(i));
printf(“last(i)=%d\n”,last());
printf(“new(i+j)=%d\n”,new(i+j));
intnext(void)
return(i++);
/*****file2.c*****/
staticinti=10;
fast(void)
rturn(i-=1_);
new(inti)
staticintj=-5;
return(i=j+=++i);
/*****file3.c*****/
externinti;
reset()
return(i);
3.预编译命令实验。
(1)一般宏替换实验;
(2)带参数的宏替换;
三、实验准备
(1)编写所选实验题目的程序代码和流程图;
(2)检查源程序并给出其可能的运行结果说明。
四、实验步骤及结果
1、
(1)编写一个函数,它可以求出给定数的所有因子,如下形式显示其结果:
程序代码如下:
运行结果:
分析:
此程序根据最小公倍数和辗转相除法写。
(2)分别写出一个求N个数的最大公约数和最小公倍数的递归函数;
运行结果:
此程序采用的是辗转相除法,根据数学上面的只是求的最大公约数以及最小公倍数。
(3)试编制n碟片hanoi塔的问题求解函数,并利用它求解4个盘片的结果;
程序如下:
结果如下:
(1)以C为辅助将A杆上面的n-1张盘移到B杆hanoi(n-1,A,B,C);
(2)将n张盘从杆A移到Cmove(n,A,C)(3)以A杆为辅助将B杆上n-1移到C上hanoi(n-1,B,C,A)
(4)试编写求n!
fact(num-1)运用另一个函数进行嵌套。
2、
(1)上机调试结果
修改后的程序如下:
分程序也要用花括符括起来。
(2)上机调试结果
该程序有误,修改为:
#include<
stdio.h>
intmain(void)
clrscr();
return0;
intworkover(inti)
reset(inti)
HIGH;
分析;
宏定义只是字符串的替换,从define开始后面所有的非字符串内的宏都可以用宏定义的宏体替换。
(3)能
(4)上机调试结果
修改后程序如下:
分析错误原因:
fast写成了last,程序的冗杂太多,删除一些没用的。
(1)一般宏替换实验(教材例7-5);
程序如下:
注意;
宏替换只是字符串的替换。
(2)带参数的宏替换(教材例7-7)
注意:
带参宏中的参数是形式参数,调用的时候是实际参数。
五:
收获
(1)宏体本质是字符串,它可以是常量,变量或表达式。
(2)宏可以带参,在调用时,实参是字符串。
(3)函数按照先声明,后定义,再使用的顺序避免了很多不应该的错误,(4)参数传值调用,空间使用了立即回收。
温馨提示:
最好仔细阅读后才下载使用,万分感谢!