C语言课程设计.docx

上传人:b****4 文档编号:24331809 上传时间:2023-05-26 格式:DOCX 页数:15 大小:87.32KB
下载 相关 举报
C语言课程设计.docx_第1页
第1页 / 共15页
C语言课程设计.docx_第2页
第2页 / 共15页
C语言课程设计.docx_第3页
第3页 / 共15页
C语言课程设计.docx_第4页
第4页 / 共15页
C语言课程设计.docx_第5页
第5页 / 共15页
点击查看更多>>
下载资源
资源描述

C语言课程设计.docx

《C语言课程设计.docx》由会员分享,可在线阅读,更多相关《C语言课程设计.docx(15页珍藏版)》请在冰豆网上搜索。

C语言课程设计.docx

C语言课程设计

三亚学院

《C语言程序设计》课程设计

题目:

计算机程序

专业:

软件工程

班级:

软件08101

姓名:

学号:

指导老师:

李春林

设计时间:

年月日~年月日

 

目录

1.程序分析与设计3

1.1功能划分3

1.2功能描述3

2.程序流程图4

2.1计算器连加连减的流程图如图2-1所示4

2.2计算器的简单界面如图2-2所示5

3.源程序主要源代码5

4.程序调试10

4.1错误原因分析一10

4.2错误原因分析二10

5.本次实习的收获和建议11

参考文献12

 

计算机程序

1.程序分析与设计

1.1功能划分

本软件主要用于计算机windows2000/XP以上版本的用户的使用,这次课程设计一般是实现简单计算器的功能。

要程序能实现:

加,减,乘,除,开方,倒数等运算功能;还要实现数据的输入,输出,计算,显示及程序退出等功能。

另外还可以实现多种科学计算的功能,如:

三角函数的计算,弧度与角度间的转换,对数指数的计算等等。

1.2功能描述

计算器的设计按软件工程的方法进行,系统具有良好的界面;必要的交互信息;简约美观的效果。

使用人员能快捷简单地进行操作。

即可单机按钮进行操作,也可直接通过键盘直接输入。

即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。

包含的功能有:

加、减、乘、除运算,开方、求倒数等功能.计算器上数字0—9为一个控件数组,加、减、乘、除为一个控件数组,其余为单一的控件。

给对话框添加菜单。

制定高级按钮控件,该按钮具有不规则的形状,可以根据用户鼠标的位置和单击状态的不同,显示不同的颜色。

制定高级编辑控件,该编辑控件可以指定文本文字的字体和颜色。

输入的原始数据、运算中间数据和结果都显示在窗口顶部的同一个标签中。

实现对话框的扩展功能[2]。

计算功能基本上是用系统内部函数。

程序可以能自动判断输入数据的正确性,保证不出现多于一个小数点、以0开头等不正常现象。

“CE”按钮可以清除所有已输入的数据从头计算

 

2.程序流程图

2.1计算器连加连减的流程图如图2-1所示

 

图2-1计算器连加连减的流程图

 

2.2计算器的简单界面如图2-2所示

 

图2-2计算器的主界面

 

3.源程序主要源代码

#include"stdafx.h"

#include"count.h"

#include"countDlg.h"

#include  

#include

#ifdef_DEBUG

#definenewDEBUG_NEW

#undefTHIS_FILE

staticcharTHIS_FILE[]=__FILE__;

#endif

classCAboutDlg:

publicCDialog{public:

CAboutDlg();

enum{IDD=IDD_ABOUTBOX};

protected:

virtualvoidDoDataExchange(CDataExchange*pDX);

protected:

DECLARE_MESSAGE_MAP()};

CAboutDlg:

:

CAboutDlg():

CDialog(CAboutDlg:

:

IDD)

voidCAboutDlg:

:

DoDataExchange(CDataExchange*pDX){

CDialog:

:

DoDataExchange(pDX);}

BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)

END_MESSAGE_MAP()

CCountDlg:

:

CCountDlg(CWnd*pParent/*=NULL*/)

:

CDialog(CCountDlg:

:

IDD,pParent){

m_num1=0.0;

m_num2=0.0;

m_num3=0.0;

m_state=0;

m_hav=FALSE;

m_hIcon=AfxGetApp()->LoadIcon(IDI_ICON1);}

voidCCountDlg:

:

DoDataExchange(CDataExchange*pDX){

CDialog:

:

DoDataExchange(pDX);}

BEGIN_MESSAGE_MAP(CCountDlg,CDialog)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_NUM1,OnNum1)

ON_BN_CLICKED(IDC_NUM0,OnNum0)

ON_BN_CLICKED(IDC_NUM2,OnNum2)

ON_BN_CLICKED(IDC_NUM3,OnNum3)

ON_BN_CLICKED(IDC_NUM4,OnNum4)

ON_BN_CLICKED(IDC_NUM5,OnNum5)

ON_BN_CLICKED(IDC_NUM6,OnNum6)

ON_BN_CLICKED(IDC_NUM7,OnNum7)

ON_BN_CLICKED(IDC_NUM8,OnNum8)

ON_BN_CLICKED(IDC_NUM9,OnNum9)

ON_BN_CLICKED(IDC_POW,OnPow)

ON_BN_CLICKED(IDC_SUM,OnSum)

ON_BN_CLICKED(IDC_MC,OnMc)

ON_BN_CLICKED(IDC_EQUAL,OnEqual)

ON_BN_CLICKED(IDC_DIV,OnDiv)

ON_BN_CLICKED(IDC_ADD,OnAdd)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

BOOLCCountDlg:

:

OnInitDialog(){

CDialog:

:

OnInitDialog();

ASSERT((IDM_ABOUTBOX&0xFFF0)==IDM_ABOUTBOX);

ASSERT(IDM_ABOUTBOX<0xF000);

CMenu*pSysMenu=GetSystemMenu(FALSE);

if(pSysMenu!

=NULL){

CStringstrAboutMenu;

strAboutMenu.LoadString(IDS_ABOUTBOX);

if(!

strAboutMenu.IsEmpty()){

pSysMenu->AppendMenu(MF_SEPARATOR);

pSysMenu->AppendMenu(MF_STRING,IDM_ABOUTBOX,strAboutMenu);}}

SetIcon(m_hIcon,TRUE);

SetIcon(m_hIcon,FALSE);

returnTRUE;}

voidCCountDlg:

:

OnSysCommand(UINTnID,LPARAMlParam){

if((nID&0xFFF0)==IDM_ABOUTBOX){CAboutDlgdlgAbout;

dlgAbout.DoModal();}

else{CDialog:

:

OnSysCommand(nID,lParam);}}

voidCCountDlg:

:

OnPaint(){

if(IsIconic()){CPaintDCdc(this);//devicecontextforpainting

SendMessage(WM_ICONERASEBKGND,(WPARAM)dc.GetSafeHdc(),0);

intcxIcon=GetSystemMetrics(SM_CXICON);

intcyIcon=GetSystemMetrics(SM_CYICON);

CRectrect;

GetClientRect(&rect);

intx=(rect.Width()-cxIcon+1)/2;

inty=(rect.Height()-cyIcon+1)/2;

dc.DrawIcon(x,y,m_hIcon);}

else{

CDialog:

:

OnPaint();}}

HCURSORCCountDlg:

:

OnQueryDragIcon(){return(HCURSOR)m_hIcon;}

voidCCountDlg:

:

OnNum1(){

m_num1=m_num1*10+1;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum0(){

m_num1=m_num1*10;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum2(){

m_num1=m_num1*10+2;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum3(){

m_num1=m_num1*10+3;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum4(){

m_num1=m_num1*10+4;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum5(){

m_num1=m_num1*10+5;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum6(){

//TODO:

Addyourcontrolnotificationhandlercodehere

m_num1=m_num1*10+6;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum7(){

m_num1=m_num1*10+7;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum8(){

m_num1=m_num1*10+8;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnNum9(){

m_num1=m_num1*10+9;

charch[10];

itoa(m_num1,ch,10);

SetDlgItemText(IDC_EDIT1,ch);

m_hav=TRUE;}

voidCCountDlg:

:

OnPow(){

CCountDlg:

:

m_count();

m_state=3;

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_num1=0.0;

m_hav=FALSE;}

voidCCountDlg:

:

OnSum(){

CCountDlg:

:

m_count();

m_state=2;

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_num1=0.0;

m_hav=FALSE;}

voidCCountDlg:

:

OnMc(){

m_num1=0.0;m_num2=0.0;m_num3=0.0;

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_state=0;

m_hav=FALSE;}

voidCCountDlg:

:

OnEqual(){

CCountDlg:

:

m_count();

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_state=0;

m_num1=0.0;

m_hav=FALSE;}

voidCCountDlg:

:

OnDiv(){

CCountDlg:

:

m_count();

m_state=4;

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_num1=0.0;

m_hav=FALSE;}

voidCCountDlg:

:

OnAdd(){

CCountDlg:

:

m_count();

m_state=1;

charch[10];

gcvt(m_num3,10,ch);

SetDlgItemText(IDC_EDIT1,ch);

m_num1=0.0;

m_hav=FALSE;}

voidCCountDlg:

:

m_count(){

switch(m_state){

case0:

if(m_hav==FALSE);elsem_num3=m_num1;break;

case1:

m_num3+=m_num1;break;

case2:

m_num3-=m_num1;break;

case3:

m_num3*=m_num1;break;

case4:

if(m_num1==0){

MessageBox("除数为零!

!

");

m_num1=0.0;m_num2=0.0;m_num3=0.0;

break;}m_num3=m_num3/m_num1;break;}

}

 

4.程序调试

根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。

主要是平时看书不仔细、不太注意而产生的。

如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。

这些语法错误有信息框的提示一般是能够排除的。

另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。

所以更要对程序仔细的检查。

经认真修改之后重新保存文件。

4.1错误原因分析一

缺少变量定义,定义位置不正确

由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到。

不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置要特别留意。

为减少这样的错误我后来还是用不同的变量名来表示,结果引起的那些错误解决了。

例如:

未定义voidmwindow(char*header);/*窗口函数*/或mwindow("Calculator");/*显示主窗口*/,所以输出voidmwindow(char*header)中就有错误,因为缺少定义。

语法错误

大多的语法错误在通过书本参考下能够修改。

主要是平时缺乏锻炼、不太注意而产生的。

如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式

4.2错误原因分析二

注释的位置

程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。

注释中不能含有c语言可执行的语句!

逻辑错误

编译、连接的成功并不意味着程序的最终成功。

逻辑上的错误机器不易检查出来,这时需要对数据结果进行分析。

这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来。

这也是本次程序编辑过程中碰到的最大的难题。

往往运行之后得不到另人满意的结果,此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去。

若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改。

如此循环往复,直到最后程序运行成功。

在本次程序编辑过程中,我就是常遇到编译能通过,能够运行程序,但是总在输入、删除等操作完之后再想去看数据文件中存在的数据记录的时候,却一条记录也显示不出来,可能是对n变量的定义或使用出错了,于是在每个主要函数的操作过程中添加了printf语句用来显示n的变化,在执行某个函数前添加插入语句显示n的起始值,在执行完该个函数后再添加插入语句显示此时n的结果值,观察n的变化是否正确,如果错误了,也就说明该函数编写过程有错。

诸如这样的调试方法,不断缩小检查范围,最后将错误找到,进行修改。

所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。

 

5.本次实习的收获和建议

经过了一个星期的c语言程序设计终于在老师的细心指导和同学的热情帮助下基本完成了计算器课题的设计修改任务,虽然有些地方不尽如人意但是初步达到了对自己的要求。

刚开始设计的时候找不到头绪,不知道该从哪里下手,通过向同学询问和向老师寻求帮助找走进了设计的门槛。

通过网上查找到很多成功的计算器程序,通过对那些已经成功地程序进行分析找到自己的设计思路,制定设计流程。

并通过比较各种程序了解各个程序的利弊,从而明确自己计算器的设计方向和如何通过技术手段达到自己的目的。

万事开头难,可是对于并不是很熟悉的c语言在下面的工作中困难处处能遇见.通过查找c语言教材去图书馆查找相关的资料和同学一起讨论终于把一个个棘手的陌生的问题解决。

测试阶段中发现了几处错误导致程序不能编译,通过耐心的分析源代码终于编好了一个完整无误的程序。

编程是一件很枯燥很无聊的事情,但是出于完成作业,得到学分的压力,还必须强破自己坚持下去,按照老师所说的模块化思想,分部分的进行编写。

而且编程是一件高精度、模范化的事情,稍有疏乎都会影响全局,也可能因为某一处的小的错误而导致整个程序的无法运行。

所以认真仔细就是非常重要的了。

在这次的c语言程序设计实习中遇到了现实编程中必然见到的问题通过这些问题的解决积累了编程的实践经验。

在实际的编程操作中发现自己c语言知识的不足,加深了对c语言的理解。

在学习之余体验到收获的感觉。

同时认识到程序员的工作并不是我们想象的那么简单轻松的,在现在的编程中要有足够的耐心和热情。

通过这次课程设计,使我对C语言有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,我也发现我的好多不足之处,首先是自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准库函数不太了解,还有对函数调用的正确使用不够熟悉,还有对C语言中经常出现的错误也不了解,通过实践的学习,我认识到学好计算机要重视实践操作,不仅仅是学习C语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我会更加注视实践操作,使自己便好地学好计算机。

在课程设计过程中,收获知识,提高能力的同时,我也学到了很多人生的哲理,懂得怎么样去制定计划,怎么样去实现这个计划,并掌握了在执行过程中怎么样去克服心理上的不良情绪。

因此在以后的生活和学习的过程中,我一定会把课程设计的精神带到生活中,不畏艰难,勇往直前!

 

参考文献

[1]杨有安.程序设计基础教程(C语言).人民邮电出版社,2009.

[2]谭浩强.C程序设计教程.清华大学出版社,2009.

[3]谭浩强.C程序设计题解与上机指导(第三版).清华大学出版社,2005.

[4]邱仲潘.C语言参考手册.机械工业出版社,2004.

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

当前位置:首页 > 法律文书 > 判决书

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

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