软件设计方法实习报告.docx

上传人:b****6 文档编号:6456338 上传时间:2023-01-06 格式:DOCX 页数:13 大小:19.95KB
下载 相关 举报
软件设计方法实习报告.docx_第1页
第1页 / 共13页
软件设计方法实习报告.docx_第2页
第2页 / 共13页
软件设计方法实习报告.docx_第3页
第3页 / 共13页
软件设计方法实习报告.docx_第4页
第4页 / 共13页
软件设计方法实习报告.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

软件设计方法实习报告.docx

《软件设计方法实习报告.docx》由会员分享,可在线阅读,更多相关《软件设计方法实习报告.docx(13页珍藏版)》请在冰豆网上搜索。

软件设计方法实习报告.docx

软件设计方法实习报告

 

浦江学院

实习报告

(2010—2011学年第2学期)

 

课程名称:

软件设计方法

班级:

学号:

__

姓名:

___

指导教师:

__

 

2011年06月

一、内容和要求

(一)、基本要求

1.学习并掌握GCC编译程序过程和方法;

2.学习并掌握GDB调试程序的方法;

3.学习并掌握Make工程管理器的基本使用方法;

4.学习并掌握工程中,文件和路径的安排;

5.使用上述知识和技能,编写程序,完成实数的四则运算功能。

/std/calculate/cal.cmakefile

/add/add.cadd.hmakefile

/sub/sub.csub.hmakefile

/mul/mul.cmul.hmakefile

/div/div.cdiv.hmakefile

(二)、提高要求

1.安装Eclipse开发环境;

2.学习Eclipse开发环境的使用;

3.在Eclipse下,编写程序,完成实数的四则运算功能;

(三)、发挥部分

根据自己的程序开发水平,完成其他可展示功能程序。

 

二.过程(如实际程序开发、电子制作,详细说明有关原理、开发过程、调试过程、结果)

(一)、在LINUX下Shell命令行内执行四则运算

1、在Linux根目录root下创建自己的工作目录:

[root@localhost~]#mkdirstd

[root@localhoststd]#cdstd

[root@localhoststd]#mkdircalculate

[root@localhostcalculate]#cdcalculate

[root@localhostcalculate]#mkdiraddsubmuldiv

[root@localhostcalculate]#ls

adddivmulsub

2.在上述的工作目录下编写四则运算的代码。

(1)add目录下

[root@localhostadd]#viadd.c

floatadd(floata,floatb)

{

{returna+b;

}

[root@localhostadd]#viadd.h

#ifndefADD_H_

#defineADD_H_

floatadd(floata,floatb);

#endif

[root@localhostadd]#vimakefile

add.o:

add.c

cc-c-oadd.oadd.c

(2)sub目录下

[root@localhostsub]#visub.c

floatsub(floata,floatb)

{

returna-b;

}

 

[root@localhostsub]#visub.h

#ifndefSUB_H_

#defineSUB_H_

floatsub(floata,floatb);

#endif

[root@localhostsub]#vimakefile

sub.o:

sub.c

cc-c-osub.osub.c

(3)mul目录下

[root@localhostmul]#vimul.c

floatmul(floata,floatb)

{

returna*b;

}

[root@localhostmul]#vimul.h

#ifndefMUL_H_

#defineMUL_H_

floatmul(floata,floatb);

#endif

[root@localhostmul]#vimakefile

mul.o:

mul.c

cc-c-omul.omul.c

[root@localhostmul]#vimakefile

(4)div目录下

[root@localhostdiv]#vidiv.c

floatdiv(floata,floatb)

{

returna/b;

}

[root@localhostdiv]#vidiv.h

 

#ifndefDIV_H_

#defineDIV_H_

floatdiv(floatx,floaty);

#endif

[root@localhostdiv]#vimakefile

div.o:

div.c

cc-c-odiv.odiv.c

(5)calculate目录下

[root@localhostcalculate]#vical.c

#include

#include"add.h"

#include"sub.h"

#include"div.h"

#include"mul.h"

intmain(void)

{

intm=1;

floata=0;

floatb=0;

floatsum=0;

floatminus=0;

floatmulti=0;

floatdivide=0;

charc=0;

constfloatEPSILON=1e-10;

while(m==1)

{

printf("请输入两个实数:

\n");

scanf("%f%f",&a,&b);

printf("运算符号是:

\n");

scanf("%s",&c);

switch(c)

{

case'+':

sum=add(a,b);

printf("%f+%f=%f\n",a,b,sum);break;

case'-':

minus=sub(a,b);

printf("%f-%f=%f\n",a,b,minus);break;

case'*':

multi=mul(a,b);

printf("%f*%f=%f\n",a,b,multi);break;

case'/':

if((b>=-EPSILON)&&(b<=EPSILON))

{

printf("错误,除数不能为0!

\n");

break;

}

else

{

divide=div(a,b);

printf("%f/%f=%f\n",a,b,divide);

divide=div(a,b);

printf("%f/%f=%f\n",a,b,divide);

}

break;

default:

printf("未知运算符!

\n");

}

printf("输入1继续,输入其他退出程序!

\n");

scanf("%d",&m);

}

return0;

}

[root@localhostcalculate]#vimakefile

vpath%add.cadd

vpath%add.hadd

vpath%sub.csub

vpath%sub.hsub

vpath%mul.cmul

vpath%mul.hmul

vpath%div.cdiv

vpath%div.hdiv

obj=cal.oadd.osub.omul.odiv.o

test:

$(obj)

cc-otest$(obj)

cal.o:

cal.cadd.hsub.hmul.hdiv.h

cc-ccal.c-Iadd-Isub-Imul-Idiv

clean:

rm-rf*.o

上述程序中使用了gcc与makefile:

①在LINUX的终端命令中有gcc指令

◆预处理(Pre-Processing)

使用-E参数可以让GCC在预处理结束后停止编译过程:

#gcc-Ehello.c-ohello.i

◆编译(Compiling)

下一步是将hello.i编译为目标代码,这可以通过使用-c参数来完成:

#gcc-xcpp-output–chello.i-ohello.o

或者

#gcc-chello.i-ohello.o

◆汇编(Assembling)

◆链接(Linking)

#gcchello.o-ohello

②Makefile就是“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译。

make命令执行时,需要一个 Makefile 文件,以告诉make命令需要怎么样的去编译和链接程序。

Makefile的规则:

target ... :

 prerequisites ...

            command

            ...

target也就是一个目标文件,可以是Object File,也可以是执行文件。

还可以是一个标签(Label)。

prerequisites就是,要生成那个target所需要的文件或是目标。

 command也就是make需要执行的命令。

这是一个文件的依赖关系,target这一个或多个的目标文件依赖于prerequisites中的文件,其生成规则定义在command中。

prerequisites中如果有一个以上的文件比target文件要新的话,command所定义的命令就会被执行。

make是如何工作的:

输入make命令。

那么,

1、make会在当前目录下找名字叫“Makefile”或“makefile”的文件。

    2、如果找到,它会找文件中的第一个目标文件(target),并把这个文件作为最终的目标文件。

    3、如果edit文件不存在,或是edit所依赖的后面的 .o 文件的文件修改时间要比edit这个文件新,那么,他就会执行后面所定义的命令来生成edit这个文件。

    4、如果edit所依赖的.o文件也存在,那么make会在当前文件中找目标为.o文件的依赖性,如果找到则再根据那一个规则生成.o文件。

    5、C文件和H文件存在时make会生成 .o 文件,然后再用 .o 文件生命make的终极任务,也就是执行文件edit了。

这就是整个make的依赖性,make会一层又一层地去找文件的依赖关系,直到最终编译出第一个目标文件。

在找寻的过程中,如果出现错误,比如最后被依赖的文件找不到,那么make就会直接退出,并报错,而对于所定义的命令的错误,或是编译不成功,make根本不理。

make只管文件的依赖性。

Vpath

Makefile中如果没有指明vpath这个变量,make只会在当前的目录中去找寻依赖文件和目标文件。

如果定义了这个变量,那么,make就会在当当前目录找不到的情况下,到所指定的目录中去找寻文件了。

Vpath的使用方法:

vpath

为符合模式的文件指定搜索目录

vapth使用方法中的需要包含“%”字符。

“%”的意思是匹配零或若干字符,(需引用“%”,使用“\%")例如,“%.h”表示所有以“.h”结尾的文件。

指定了要搜索的文件集,而则指定了的文件集的搜索的目录。

(如果某文件在当前目录没有找到的话)我们可以连续地使用vpath语句,以指定不同搜索策略。

如果连续的vpath语句中出现了相同的,或是被重复了的,那么,make会按照vpath语句的先后顺序来执行搜索。

3.在calculate目录下使用make指令

[root@localhostcalculate]#make

cc-ccal.c-Iadd-Isub-Imul-Idiv

cc-c-oadd.oadd/add.c

cc-c-osub.osub/sub.c

cc-c-omul.omul/mul.c

cc-c-odiv.odiv/div.c

cc-otestcal.oadd.osub.omul.odiv.o

4.运行四则运算程序

[root@localhostcalculate]#./test

请输入两个实数:

54

运算符号是:

+

5.000000+4.000000=9.000000

输入1继续,输入其他退出程序!

1

请输入两个实数:

54

运算符号是:

-

5.000000-4.000000=1.000000

输入1继续,输入其他退出程序!

1

请输入两个实数:

54

运算符号是:

*

5.000000*4.000000=20.000000

输入1继续,输入其他退出程序!

1

请输入两个实数:

50

运算符号是:

/

错误,除数不能为0!

输入1继续,输入其他退出程序!

2

(二)、Eclipse的学习使用

在Eclipse下,编写程序,完成实数的四则运算功能

(1)、点击file下的新建(new)一个C工程(cproject);

(2)、在出现的对话框中,输入projectname,点Finsh,完成project的创建;

(3)、新建C源程序:

file->new->Csource;

(4)、新建头文件:

file->new->Cheadfile;

(5)、在sourcefile中输入filename,输入文件名要加上后缀.c或.h;

(6)、在Eclipse窗口中输入需要的C程序和各个头文件,复制上述代码即可;

(7)、单击“Build'Debug'forproject'test'”,然后再单击“Runtest”运行。

(三)、其他可展示功能程序

十进制正整数转换为二进制或八进制

#include

#include

intten_two(intnum)

{

inti=0;

intarr[20]={};

for(i=0;1;i++)

{

arr[i]=num%2;

num=num/2;

if(num==0)

break;

}

for(;i>=0;i--)

printf("%d",arr[i]);

printf("\n");

returnarr[20];

}

intten_eight(intnum)

{

inti=0;

intarr[20]={};

for(i=0;1;i++)

{

arr[i]=num%8;

num=num/8;

if(num==0)

break;

}

for(;i>=0;i--)

printf("%d",arr[i]);

printf("\n");

returnarr[20];

}

intmain(void)

{

intselect=0;

intnum=0;

intselect=0;

intnum=0;

inta[20]={};

inti=0;

printf("请输入一个十进制整数\n");

scanf("%d",&num);

printf("1-十进制转二进制,2-十进制转八进制\n");

scanf("%d",&select);

switch(select)

{

case1:

printf("转换为二进制:

\n");

ten_two(num);

break;

case2:

printf("转换为八进制:

\n");

ten_eight(num);

break;

default:

printf("您的输入有误,请重新输入!

\n");break;

}

return0;

}

运行结果如下:

请输入一个十进制数

8

1-十进制转二进制,2-十进制转八进制

1

转换为二进制:

1000

请输入一个十进制数

10

1-十进制转二进制,2-十进制转八进制

2

转换为八进制:

12

 

三、小结

这一周的课程设计是本学期所有课程设计里最令我纠结的一个,归根结底还是个大问题:

一个是基础知识掌握不牢;二是就是设计时粗心大意,小错误不断;三是检错能力差,不能根据报错结果找出错误原因。

以下是我设计时遇到的问题及解决方法:

1.编辑头文件时,分号容易漏掉,导致语法性错误

2.Makefile时gcc前面的空格一定要用TAB键,否则检测会报“缺少分隔符”

3.GCC的调试中出现了一些语法错误,gcc有很多种写法规则,因为类别太多导致容易混

淆。

4.编写Makefile不规范,错误很多,多目录下的makefile与同目录下的makefile虽然不同,但也有相同之处,不能做到举一反三。

5.关于如何在主程序下的makefile中引用add、sub等的makefile,通过查资料在陈浩编写的“跟我一起写Makefile”找到了答案。

问题看上去虽然不多,但每一个问题都曾使我焦头烂额很长时间,一直到星期四下午才把一切都弄好。

这次课程设计虽然给我带来了很多麻烦,但也同时激发了我对软件设计的挑战和兴趣,这次设计是结束了,但我会在课余时间继续专研,扩展自己该领域的知识面,不断的前进与挑战自我。

 

成绩

日期

批阅人

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

当前位置:首页 > 表格模板 > 合同协议

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

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