中南大学c语言课程设计报告.docx
《中南大学c语言课程设计报告.docx》由会员分享,可在线阅读,更多相关《中南大学c语言课程设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
![中南大学c语言课程设计报告.docx](https://file1.bdocx.com/fileroot1/2022-12/17/9cd90963-ae1f-433a-9b9f-27c5bb8b0666/9cd90963-ae1f-433a-9b9f-27c5bb8b06661.gif)
中南大学c语言课程设计报告
学号
中南大学
《C语言程序设计》
课程设计报告
题目:
数据的图形化处理
学院:
专业:
班级:
姓名:
指导老师:
2015年1月3日
目录
1设计内容及要求3
1.1设计要求3
1.2程序设计流程图3
2详细设计5
2.1详细设计5
2.2数据结构与程序评析7
2.3用法说明8
3设计结果与分析8
3.1调试与测试8
3.2测试结果与分析8
4小结(心得体会)11
5附录12
1设计内容及要求
1.1设计要求
用c语言绘图函数绘制函数图像;要根据输入的信息,用c语言画出相应函数y=sin(x),y=cos(x),...;画出的点数为N个,即N个像素点;可以不画出坐标值,N的值要大于20。
程序界面设计合理,色彩得体大方,显示正确,界面清晰、美观。
1.2程序设计流程图
图1:
总程序流程
图2:
总程序流程图
2详细设计
2.1详细设计
(1)#include调用系统提供的标准库函数
#include调用math库文件里的函数
#include调用通过控制台进行数据输入和数据输出的函数
#include调用图像处理函数
(2)main()
{
floati,x0,y0,x,y;
inta,b;
intgd=DETECT,gm;定义变量
(3)for(b=0;b<=20;b++){
实现程序的多次循环使用
(4)initgraph(&gd,&gm,"");初始化图形系统
(5)printf("Chooseafunctiontoseeitsfunctionalimage!
\n");
printf("1.y=x\n");
printf("2.y=sinx\n");
printf("3.y=cosx\n");
printf("4.y=e^x\n");
printf("5.y=log(e)(x)\n");
printf("6.y=x^2\n");
printf("7.y=tanx\n");
printf("Number1-7,justtrythem!
\n");
printf("Pleaseenternumber:
");输出一个基本初等函数可选列表
scanf("%d",&a);输入一个整型变量
(6)cleardevice();清除屏幕和图形缓冲区
setbkcolor(WHITE);设置背景色
setcolor(GREEN);设置前景颜色
line(100,350,100,180);
line(95,190,100,180);
line(100,180,105,190);
line(40,250,500,250);
line(495,245,500,250);
line(500,250,495,255);画坐标轴和箭头
settextstyle(SANS_SERIF_FONT,HORIZ_DIR,1);设置字体
outtextxy(500,250,"x");标记x轴
outtextxy(110,180,"y");标记y轴
outtextxy(90,245,"o");标记原点
(7)switch(a)实现多分支选择
{
case1:
第一种情况
{
for(x0=0;x0<=21;x0+=1)
{
y0=x0;要画出的函数表达式
x=6*x0+100;x,y的坐标控制,使点落在屏幕适当位置
y=-6*y0+250;
putpixel(x,y,RED);画点函数,画出红色像素点
}
break;跳出多分支选择结构
}
case2:
第二种情况
{
for(x0=0;x0<=10*3.14159;x0+=0.1)
{
y0=50*sin(x0+2*3.14159);正弦函数
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
case3:
第三种情况
{
for(x0=0;x0<=10*3.14159;x0+=0.1)
{
y0=50*sin(x0+3.14159/2);余弦函数
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
..........其他常见函数
default:
printf("Enterdataerror!
\n");否则输出数据错误提示
}
(8)getch();从控制台读取一个字符,但不显示在屏幕上,等待你按下任意键,再继续执行下面的语句
closegraph();关闭图形系统
}
}
2.2数据结构与程序评析
(1)对图形处理函数作比较全面的分析,即对程序要使用的编写方法功能,运行方式进行分析,并作出正确的解决方案。
(2)程序并不是很复杂,但程序的编写是一项困难的任务,完成此程序必须运用书中和网络上的很多知识,而且要有清晰的思路和较强的语言组织能力。
(3)程序的检查和系统的调用。
当程序运行后,显示出规定好的函数图像。
2.3用法说明
(1)用编辑程序把编制的源程序按照一定的书写格式送到计算机中。
(2)把送入的源程序翻译成机器语言,即用编译程序对源程序进行编译,并将符合语法规则的源程序语句翻译成计算机能识别的语言。
(3)使用计算机中的连接程序,把翻译好的计算机语言程序连接起来,并扶植成一个计算机能真正运行的程序。
(4)将修改后的程序运行,以后使用时双击相应exe文件即可。
3设计结果与分析
3.1调试与测试
调试方法:
多次运行源程序,找出tc提示的错误,修改后再次运行,直至无错误时再对源程序进行简单优化。
问题:
源程序中变量数据类型错误,语句位置错误,导致编译时出现错误,执行不出结果。
经分析后修改,程序成功运行。
如果该程序没有在C语言环境下运行,那么程序运行的结果:
BGIERROR:
Graphicsnotinitialized!
(useinitgraoph)
这是因为编程的时候没有把图形的驱动和程序一起编译,程序在脱离C语言环境后找不到驱动。
要使程序能够脱离C语言环境运行,就要使程序和图形驱动一起编译。
①在DOS命令提示符下运行下列命令:
c:
\tc\bgi>bgiobjegavga(把图形驱动编译成相应的库文件)
c:
\tc\tc\lib\graphics.lib+\tc\bgi\egavga(把图形驱动的库文件和系统库文件graphics.lib连接组成新的库文件)
②在源程序的initgraph()函数前加入下列语句:
registerbgidriver(EGAVGA_driver);(在程序中注册图形驱动)
此问题得以解决。
如没有遇到此结果,则不需要执行此操作。
3.2测试结果与分析
程序初始界面
函数图像
数据不符合要求时显示
程序运行成功,得到预期结果。
4小结(心得体会)
刚开始做的时候我只懂得一些雷老师讲过的基本函数,对图形处理函数什么都不懂,更别说做了。
不过参考了很多资料,在网站上查找,并思考理解了较长时间,才对图形处理函数有了基本的认识和把握,能实现一些简单应用,因为是自己亲自学习并制作的,并非抄袭,虽然遇到了不少的困难,但心里还是蛮有成就感的,希望把c语言学通的信心更足了。
经过多次上机实践学习,我对c语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它。
我所懂得的更重要的是,程序设计需要大量的理解和应用,有些没有学过的知识不一定非要一字不差掌握,会理解运用才是重点,不能急于求成!
计算机编程大大简化了我们生活中的很多复杂繁琐的工作,实现了简单化,自动化。
这大大增加了我学习这门课程的兴趣。
计算机的发展趋势越来越快,我相信计算机在将来能更好地为人类服务。
我清楚地知道这次的程序还有很多可以优化的地方,没有最好,只有更好!
因此我一定会积极地学习这门课程,充分发挥这门课程的作用,查找更多的可用资源,用来补偿我的不足。
5附录
参考文献
【1】谭浩强《C语言程序设计(第四版)》清华大学出版社
【2】李丽娟,马淑萍《C语言程序设计(第二版)》中国铁道出版社
【3】王正仲《21天学通C语言》人民邮电出版社
【4】 凯尼格 《C陷阱与缺陷》人民邮电出版社
源代码
#include
#include
#include
#include
main()
{
floati,x0,y0,x,y;
inta,b;
intgd=DETECT,gm;
for(b=0;b<=20;b++)
{
initgraph(&gd,&gm,"");
printf("Chooseafunctiontoseeitsfunctionalimage!
\n");
printf("1.y=x\n");
printf("2.y=sinx\n");
printf("3.y=cosx\n");
printf("4.y=e^x\n");
printf("5.y=log(e)(x)\n");
printf("6.y=x^2\n");
printf("7.y=tanx\n");
printf("Number1-7,justtrythem!
\n");
printf("Pleaseenternumber:
");
scanf("%d",&a);
cleardevice();
setbkcolor(WHITE);
setcolor(GREEN);
line(100,350,100,180);
line(95,190,100,180);
line(100,180,105,190);
line(40,250,500,250);
line(495,245,500,250);
line(500,250,495,255);
settextstyle(SANS_SERIF_FONT,HORIZ_DIR,1);
outtextxy(500,250,"x");
outtextxy(110,180,"y");
outtextxy(90,245,"o");
switch(a)
{
case1:
{
for(x0=0;x0<=21;x0+=1)
{
y0=x0;
x=6*x0+100;
y=-6*y0+250;
putpixel(x,y,RED);
}
break;
}
case2:
{
for(x0=0;x0<=10*3.14159;x0+=0.1)
{
y0=50*sin(x0+2*3.14159);
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
case3:
{
for(x0=0;x0<=10*3.14159;x0+=0.1)
{
y0=50*sin(x0+3.14159/2);
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
case4:
{
for(x0=0;x0<=21;x0+=0.1)
{
y0=pow(2.71828,x0);
x=10*x0+100;
y=-y0+245;
putpixel(x,y,RED);
}
break;
}
case5:
{
for(x0=0.1;x0<=21;x0+=0.1)
{
y0=log(x0)/log(1.1);
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
case6:
{
for(x0=0.1;x0<=21;x0+=0.1)
{
y0=pow(x0,2);
x=10*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
case7:
{
for(x0=0.1;x0<=5*3.14159;x0+=0.05)
{
y0=50*tan(x0);
x=25*x0+100;
y=-y0+250;
putpixel(x,y,RED);
}
break;
}
default:
printf("Enterdataerror!
\n");
}
getch();
closegraph();
}
}