C语言 四川师范大学 信息与计算科学 冯山 实验六.docx

上传人:b****1 文档编号:590832 上传时间:2022-10-11 格式:DOCX 页数:12 大小:379.93KB
下载 相关 举报
C语言 四川师范大学 信息与计算科学 冯山 实验六.docx_第1页
第1页 / 共12页
C语言 四川师范大学 信息与计算科学 冯山 实验六.docx_第2页
第2页 / 共12页
C语言 四川师范大学 信息与计算科学 冯山 实验六.docx_第3页
第3页 / 共12页
C语言 四川师范大学 信息与计算科学 冯山 实验六.docx_第4页
第4页 / 共12页
C语言 四川师范大学 信息与计算科学 冯山 实验六.docx_第5页
第5页 / 共12页
点击查看更多>>
下载资源
资源描述

C语言 四川师范大学 信息与计算科学 冯山 实验六.docx

《C语言 四川师范大学 信息与计算科学 冯山 实验六.docx》由会员分享,可在线阅读,更多相关《C语言 四川师范大学 信息与计算科学 冯山 实验六.docx(12页珍藏版)》请在冰豆网上搜索。

C语言 四川师范大学 信息与计算科学 冯山 实验六.docx

C语言四川师范大学信息与计算科学冯山实验六

数学与软件科学学院实验报告

2015年6月9日

课程名称:

C语言程序设计专业:

信息与计算科学2014级6班

实验编号:

实验六指导教师:

冯山

姓名:

杨帆学号:

2014060634实验得分

一、实验目的

(1)了解和掌握C语言环境下模块化程序设计的基础----基于函数模块的程序设计技术;

(2)复习C语言程序的基本结构特点,了解基于函数模块的程序模块及其调用关系、过程;

(3)函数的声明、定义、使用方法;

(4)对各种变量属性的使用方法;

(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)******/

printf("Thefirstxis%d\n",x);

}

voidprt(void)

{/******(d)******/

intx=5;

printf("Thethirdxis%d\n",x);

}/******(e)******/

(2)仔细分析下列程序,是否有错误之处?

然后分析其执行结果,上机验证并对各个变量的存储属性及其结果进行比较分析:

#defineLOW11

#defineHIGH23

#defineCHANGE12

inti=LOW;

main()

{

intworkover(inti);

intreset(inti);

inti=HIGH;

reset(i/2.5);

printf("i=%d\n",i);

reset(i=i/3);

printf("i=%d\n",i);

reset(i/2);

printf("i=%d\n",i);

workover(i);

printf("i=%d\n",i);

}

workover(inti);

{

i=(i%i++)*((i*i)/(2*i)+4);

printf("i=%d\n",i);

return(i);

}

reset(inti);

{

i=i<=CHANGE?

LOW:

HIGH++;

return(i);

}

(3)以下程序希望打印5行"*****",能否做到?

为什么?

inti;

main()

{

voidprt();

for(i=0;i<5;i++)

prt();

}

voidprt()

{

for(i=0;i<5;i++)

printf("%c",'*');

printf("\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)编写一个函数,它可以求出给定数的所有因子,如下形式显示其结果:

72=2*2*2*3*3;

程序代码如下:

运行结果:

分析:

此程序根据最小公倍数和辗转相除法写。

(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!

的函数,并求n=7的结果。

程序如下:

分析:

fact(num-1)运用另一个函数进行嵌套。

2、

(1)上机调试结果

修改后的程序如下:

分析:

分程序也要用花括符括起来。

(2)上机调试结果

该程序有误,修改为:

#include

#defineLOW11

#defineHIGH23

#defineCHANGE12

inti=LOW;

intmain(void)

{

inti=HIGH;

intreset(inti);

clrscr();

reset(i/2.5);

printf("i=%d\n",i);

reset(i=i/3);

printf("i=%d\n",i);

reset(i/2);

printf("i=%d\n",i);

workover(i);

printf("i=%d\n",i);

return0;

}

intworkover(inti)

{

i=(i%i++)*((i*i)/(2*i)+4);

printf("i=%d\n",i);

return(i);

}

reset(inti)

{

i=i<=CHANGE?

LOW:

HIGH;

return(i);

}

分析;宏定义只是字符串的替换,从define开始后面所有的非字符串内的宏都可以用宏定义的宏体替换。

(3)能

(4)上机调试结果

修改后程序如下:

分析错误原因:

fast写成了last,程序的冗杂太多,删除一些没用的。

3.预编译命令实验。

(1)一般宏替换实验(教材例7-5);

程序如下:

注意;宏替换只是字符串的替换。

(2)带参数的宏替换(教材例7-7)

注意:

带参宏中的参数是形式参数,调用的时候是实际参数。

五:

收获

(1)宏体本质是字符串,它可以是常量,变量或表达式。

(2)宏可以带参,在调用时,实参是字符串。

(3)函数按照先声明,后定义,再使用的顺序避免了很多不应该的错误,(4)参数传值调用,空间使用了立即回收。

 

温馨提示:

最好仔细阅读后才下载使用,万分感谢!

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1