C语言课程设计报告讲解.docx
- 文档编号:15491457
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:18
- 大小:203.05KB
C语言课程设计报告讲解.docx
《C语言课程设计报告讲解.docx》由会员分享,可在线阅读,更多相关《C语言课程设计报告讲解.docx(18页珍藏版)》请在冰点文库上搜索。
C语言课程设计报告讲解
东南大学
C语言课程设计报告
课程名称:
计算机综合课程设计
学院:
土木工程学院
设计题目:
简单图形处理系统
级别:
A
学生姓名:
吴宁
学号:
05312129
同组学生:
王森
学号:
05312130
指导教师:
秦庆东
2013年9月11日
目录
1、课程设计目的···············3
2、课程设计题目描述和要求··········3
3、模块设计·················3
4、课程设计报告内容·············4
5、调试及测试················11
6、运行结果················12
7、设计总结·················14
8、参考文献·················15
1、课程设计目的
开拓思维,检查和巩固所学的知识,为以后的学习和编程打下基础。
2、课程设计题目描述和要求
2、1课程题目
简单图形处理系统
2、2课程要求
设某个图形处理程序只考虑点、直线、圆三种基本图形。
对于点,给出点的横纵坐标;
对于直线,给出直线方程ax+by+c=0的三个系数a,b,c;
对于圆,给出圆心坐标和半径。
要求程序可以输入和输出图形元素,求两点距离,求两直线交点,已知点和半径形成圆,已知两点形成直线
3、模块设计
3、1模块分析
根据题目要求可以将题目中的每一个要求与一个函数对应下来,这样算下来大概需要
1、画点函数
2、根据两点画直线函数
3、根据方程画直线函数
4、画圆函数
5、求两点距离函数
6、求两直线交点函数
编程过程中可能需要一些其他的辅助函数,比如:
画坐标系函数,坐标转换函数等;为帮大家选择不同的函数,可在开头设计一个目录帮助选择。
3、2模块设计
根据模块分析,以及编程方便起见,将程序大致分为以下几个模块:
1、目录模块:
运用printf函数输出目录,并和switch架构搭配,帮助用者选择合适的函数解决问题。
2、图形处理模块:
主要进行图形的处理和输出,包括画点函数,画坐标系函数,画直线函数,画圆函数。
3、计算处理模块:
用于解决需要计算才能得到结果的部分,包括求两个直线的交点函数,求两个点之间的距离函数,以及坐标转换函数。
大致流程图为:
4、课程设计报告内容
///////////////////////////////
//头文件包含
//////////////////////////////
#include
#include
#include
#include
//////////////////////////////
//函数声明
//////////////////////////////
voidline_1();//根据两点画直线
voidline_2();//根据方程画直线
voiddot();//根据坐标画点
voidyuan();//根据半径和圆心画圆
voidlon();//求两点间的距离
voiddt();//根据两条直线求交点
voidcad();//画坐标系
voidtrans(double*x,double*y);//坐标转换
//////////////////////////////
//定义整函数
//////////////////////////////
intmain()
{
for(;;)
{
/*****************************目录*********************************/
inta;
printf("简单图形处理系统\n");
printf("由于精度问题,请尽量取较大的值,坐标系范围x(-320—320),y(-320—320)\n\n\n");
printf("1·······························输出点\n");
printf("2···························根据两点输出直线\n");
printf("3···························根据方程输出直线\n");
printf("4································输出圆\n");
printf("5·························根据两点计算两点距离\n");
printf("6··························根据两条直线求交点\n");
printf("0·······························退出程序\n");
printf("请输入选择:
");
scanf("%d",&a);
switch(a)
{
case1:
dot();break;
case2:
line_1();break;
case3:
line_2();break;
case4:
yuan();break;
case5:
lon();break;
case6:
dt();break;
case0:
exit(0);
default:
printf("输入错误,请重新输入\n");break;
}
}
return0;
}
/********************************函数定义*************************************/
voidline_1()//两点画直线函数
{
doublea[4];
printf("请输入两点坐标:
(如:
23,2323,23)\n");
scanf("%lf,%lf%lf,%lf",&a[0],&a[1],&a[2],&a[3]);
/******************转换坐标*************************/
trans(&a[0],&a[1]);
trans(&a[2],&a[3]);
/*************按比例延伸坐标**********************/
for(inti=0;a[2]>0&&a[3]>0&&a[2]<640&&a[3]<640;i++)
{
a[2]=a[2]+i*(a[2]-a[0]);
a[3]=a[3]+i*(a[3]-a[1]);
}
for(i=0;a[0]>0&&a[1]>0&&a[0]<640&&a[1]<640;i++)
{
a[0]=a[0]+i*(a[0]-a[2]);
a[1]=a[1]+i*(a[1]-a[3]);
}
/****************画图******************************/
cad();
//设置线的颜色
setlinecolor(YELLOW);
//画线
line((int)a[0],(int)a[1],(int)a[2],(int)a[3]);
getch();
closegraph();
}
voidline_2()//方程画直线函数
{
doublea[3],b[2];
printf("请输入直线方程:
(如:
3x+4y+5=0或3x+-4y+-5=0)\n");
scanf("%lfx+%lfy+%lf=0",&a[0],&a[1],&a[2]);
if(a[2]!
=0)
{
b[0]=(0-a[2])/a[1];
b[1]=(0-a[2])/a[0];
/******************转换坐标*************************/
trans(&b[1],&b[0]);
a[0]=320;
a[1]=320;
}
else
{
a[1]=(0-a[0])/a[1];
a[0]=0;
b[0]=0;
b[1]=1;
/******************转换坐标*************************/
trans(&a[0],&b[0]);
trans(&b[1],&a[1]);
}
/*************按比例延伸坐标**********************/
for(inti=0;b[1]>0&&a[1]>0&&b[1]<640&&a[1]<640;i++)
{
b[1]=b[1]+i*(b[1]-a[0]);
a[1]=a[1]+i*(a[1]-b[0]);
}
for(i=0;a[0]>0&&b[0]>0&&a[0]<640&&b[0]<640;i++)
{
a[0]=a[0]+i*(a[0]-b[1]);
b[0]=b[0]+i*(b[0]-a[1]);
}
/****************画图******************************/
cad();
//设置线的颜色
setlinecolor(YELLOW);
//画线
line((int)a[0],(int)b[0],(int)b[1],(int)a[1]);
getch();
closegraph();
}
voiddot()//坐标画点函数
{
doublea[2];
printf("请输入点的坐标:
(如:
34,23)\n");
scanf("%lf,%lf",&a[0],&a[1]);
trans(&a[0],&a[1]);
cad();
//设置点的颜色
setcolor(YELLOW);
//画点
putpixel((int)a[0],(int)a[1],WHITE);
getch();
closegraph();
}
voidyuan()//根据半径和圆心画圆函数
{
doublea[3];
printf("请输入半径和圆心的坐标:
(如:
2323,23)\n");
scanf("%lf%lf,%lf",&a[0],&a[1],&a[2]);
trans(&a[1],&a[2]);
cad();
//设置圆的颜色
setcolor(YELLOW);
//画圆
circle((int)a[1],(int)a[2],(int)a[0]);
getch();
closegraph();
}
voidcad()//画坐标系
{
//初始化图形界面
initgraph(640,640);
//设定图形颜色
setcolor(WHITE);
//画坐标线及箭头
line(0,320,640,320);
line(320,0,320,640);
line(640,320,635,315);
line(640,320,635,325);
line(320,0,325,5);
line(320,0,315,5);
//设置字体颜色
settextcolor(GREEN);
//设置字体格式
settextstyle(20,0,_T("宋体"));
//标注x,y和坐标范围
outtextxy(610,330,"320");
outtextxy(630,295,"x");
outtextxy(330,10,"y");
outtextxy(290,10,"320");
outtextxy(323,325,"0");
}
voidlon()//两点间的距离函数
{
doublea[4],c;
printf("请输入两点的坐标:
(如:
23,2323,23)\n");
scanf("%lf,%lf%lf,%lf",&a[0],&a[1],&a[2],&a[3]);
//用勾股定理计算
c=fabs(a[0]-a[2])*fabs(a[0]-a[2])+fabs(a[1]-a[3])*fabs(a[1]-a[3]);
c=sqrt(c);
printf("两点间的距离为:
%lf\n",c);
}
voiddt()//求交点函数
{
doublea[3],b[3],t,x,y;
printf("请输入一条直线方程:
(如:
3x+4y+5=0)\n");
scanf("%lfx+%lfy+%lf=0",&a[0],&a[1],&a[2]);
printf("请输入另一条直线方程:
(如:
3x+4y+5=0)\n");
scanf("%lfx+%lfy+%lf=0",&b[0],&b[1],&b[2]);
//分不同的情况讨论
if(a[0]/b[0]==a[1]/b[1]&&a[2]/b[2]!
=a[1]/b[1])
{
printf("无交点\n");
}
elseif(a[0]/b[0]==a[1]/b[1]&&a[2]/b[2]==a[1]/b[1])
{
printf("有无数个交点\n");
}
else
{
t=a[0]*b[1]-b[0]*a[1];
a[2]=(0-a[2])*b[1]-(0-b[2])*a[1];
b[2]=a[0]*(0-b[2])-b[0]*(0-a[2]);
x=a[2]/t;
y=b[2]/t;
printf("两条直线的交点为:
%lf,%lf\n",x,y);
}
}
voidtrans(double*x,double*y)//转换坐标
{
*x=*x+320;
*y=320-*y;
}
5、调试及测试
5、1调试
本程序在个人电脑的windows7环境下安装的VisualC++6.0语言系统下调试,通过调试发现了一些error,有的是语法错误,有的是逻辑错误,但是经过修改,这些error都被消除,调试结果如下:
现在程序已经可以安全运行。
5、2测试
通过运行程序,发现了一些被遗漏的情况,如求两条直线的交点的时候没有考虑到平行和重合的情况,但是经过改正,已经将被遗漏的情况添加在了里面。
6、运行结果
6、1目录
6、2输出点
6、2输出圆
6、3输出直线
6、4求交点
7、设计总结
7、1心得体会
通过这次的程序设计,我深切意识到目前我们所学的有关C语言的知识是多么的少,而且由于学完C语言之后很少应用,以至于遗忘了很多已经学过的东西,比如文件处理函数等。
在网上查阅资料的时候发现一些人用已经学过的东西也能编写一些很高级的程序。
由此认识到学以致用非常重要,在接下来的时间里,我一定会好好利用图书馆及网络资源,扩充自己的知识面。
与此同时会花更多的时间与大家交流,来使彼此成长的更快。
7、2编写所遇问题
1、VisualC++6.0运行平台没有图形处理函数
2、系统坐标和常规坐标系不一致
3、画线函数只能画出线段不能画出直线
4、整个图形处理函数只能在整数单位上标点
7、3问题解决方案
1、在网上找到了图形处理函数头文件,将该文件安装到VisualC++6.0上,就可以在VisualC++6.0运行图形处理函数。
2、添加一个坐标转换函数,使得坐标系与常规坐标系一致。
3、将线段的两个端点的坐标按照比例进行延长,使得两个端点坐标在窗口之外,这样视觉上就是一条直线。
4、整个计算过程采用双精度进行计算,在画图时将双进度转化为整型变量,这样就可以运用图形处理函数。
8、参考文献
【1】谭浩强编著.C程序设计(第四版),北京,清华大学出版社,2010年
【2】明日科技编著.C语言从入门到精通(实例版),北京,清华大学出版社,2012年9月
【3】
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 课程设计 报告 讲解