C语言简单计算器的编写课程设计.docx
- 文档编号:29082673
- 上传时间:2023-07-20
- 格式:DOCX
- 页数:14
- 大小:44.66KB
C语言简单计算器的编写课程设计.docx
《C语言简单计算器的编写课程设计.docx》由会员分享,可在线阅读,更多相关《C语言简单计算器的编写课程设计.docx(14页珍藏版)》请在冰豆网上搜索。
C语言简单计算器的编写课程设计
IMBstandardizationoffice【IMB5AB-IMBK08-IMB2C】
C语言简单计算器的编写课程设计
学号
2013-2014学年第二学期
《高级语言程序设计》
课程设计报告
题目:
简单计算器
专业:
数字媒体技术
班级:
13级1班
姓名:
邢洪波
指导教师:
王辉
成绩:
计算机与信息工程系
二0一四年二月二十日
1设计内容及要求
利用本学期所学的《C语言程序设计》课程,运用相关知识,查阅相关资料,编写C语言程序,设计一个简单计算器,要求编写的简单计算器能够模拟windows系统的计算器,用户能够用键盘输入相关数据,能够进行简单的加、减、乘、除运算,并且在程序运行过程中能够正常的退出程序。
在计算器程序运行中,输入数据时如果遇到输入错误的情况,能够能过键盘上的退格键进行删除,并且重新输入正确的数据。
在数据输入完成后,如果需要放弃本次计算操作,可以利用程序中设置好的按键进行清零,并为下一次运算作准备。
运用相关知识,查阅相关资料,编写一个简单的计算器,能够实现简单的基本的加减乘除运算,在计算器工作时用户能利用键盘或鼠标进行相应操作。
程序基本功能要求实现完整,并有简单的验证。
程序还须有符合标准的程序设计报告。
2概要设计
系统流程图
系统流程图
主要功能表
主要功能表
序号
文件名
主要功能
备注
1
+
加法
两个操作数
2
—
减法
两个操作数
3
*
乘法
两个操作数
4
/
除法
两个操作数
5
#
开方
一个操作数
6
^
乘方
两个操作数
7
Enter
等于
8
Tab
清零
9
q
退出
3设计过程或程序代码
#include<>
#include<>
#include<>/*malloc的头文件代表在内存中开辟存储空间*/
doublejisuan(chara[])
{
inti=1,j,k,m,cnt=0,t1=0,t2=0,t3=0;/*定义整型变量i,j,k,m,n,cnt,t1,t2,t3*/
charnibo[50],zhan2[50];/*定义字符型数组*/
doublex,n,l,z=0,zhan3[50];/*定义双精度变量x,n,l,z,zhan3[50]*/
typedefstruct/*表示可以用con定义结构体变量*/
{
doubled1;
intd2;
}dd;
typedefstruct
{
dddata[50];
inttop;
}zhan1;
zhan1*shu;/*定义指针变量*/
shu=(zhan1*)malloc(sizeof(zhan1));
shu->top=0;
while(a[i]!
='\0')/*外循环是用while语句*/
{
if(a[i]>='0'&&a[i]<='9')/*内循环使用if-else语句*/
{
z=0;
j=i+1;
while(a[j]>='0'&&a[j]<='9')/*内循环使用各种循环语句的嵌套*/
{j++;}
j--;
for(k=i;k<=j;k++)
{
z=z*10+a[k]-'0';
}
j=j+1;
x=z;
if(a[j]=='.')
{
l=1;
i=j+1;
j=i+1;
while(a[j]>='0'&&a[j]<='9')/*内循环使用各种循环语句的嵌套*/
{j++;}
j--;
for(k=i;k<=j;k++)
{
n=pow,l);
l=l+1;
x=x+n*(a[k]-'0');
}
i=j+1;
}
elsei=j;
shu->data[++shu->top].d1=x;
shu->data[shu->top].d2=++cnt;
nibo[++t1]='0'+shu->data[shu->top].d2;
nibo[t1+1]='\0';
}
elseif(a[i]=='(')
{
zhan2[++t2]=a[i];
i++;
}
elseif(a[i]==')')
{
j=t2;
while(zhan2[j]!
='(')
{
nibo[++t1]=zhan2[j];
nibo[t1+1]='\0';
j--;
}
t2=j-1;
i++;
}
elseif(a[i]=='+')/*对加法的定义*/
{
while(t2>0&&zhan2[t2]!
='(')/*定义当加号和括号同时出现时*/
{
nibo[++t1]=zhan2[t2];/*将zhan2[t2]赋给nibo[++t2]*/
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
elseif(a[i]=='-')/*对减法的定义*/
{
if(a[i-1]=='$')
{
a[0]='0';
i=0;
}
elseif(a[i-1]=='(')
{
a[i-1]='0';
a[i-2]='(';
i=i-2;
t2--;
}
else
{
while(t2>0&&zhan2[t2]!
='(')/*对括号的定义*/
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
elseif(a[i]=='*'||a[i]=='/')/*对乘法和除法的定义*/
{
while(zhan2[t2]=='*'||zhan2[t2]=='/'||zhan2[t2]=='^'||zhan2[t2]=='#')/*逻辑运算*/
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
elseif(a[i]=='^'||a[i]=='#')/*逻辑运算中的或运算*/
{
while(zhan2[t2]=='^'||zhan2[t2]=='#')
{
nibo[++t1]=zhan2[t2];
nibo[t1+1]='\0';
t2--;
}
zhan2[++t2]=a[i];
i++;
}
}
while(t2>0)
{
nibo[++t1]=zhan2[t2];/*将的zhan2[t2]值赋给nibo[++t1]*/
nibo[t1+1]='\0';/*碰到'\0'结束部分程序的运算*/
t2--;
}
j=1;t3=0;
while(j<=t1)
{
if(nibo[j]>='0'&&nibo[j]!
='^'&&nibo[j]!
='#')
{
for(i=1;i<=shu->top;i++)
{
if((int)(nibo[j]-'0')==shu->data[i].d2)
{
m=i;
break;
}
}
zhan3[++t3]=shu->data[m].d1;
}
elseif(nibo[j]=='+')/*对加法的定义*/
{
zhan3[t3-1]=zhan3[t3-1]+zhan3[t3];
t3--;
}
elseif(nibo[j]=='-')/*对减法的定义*/
{
zhan3[t3-1]=zhan3[t3-1]-zhan3[t3];
t3--;
}
elseif(nibo[j]=='*')/*对乘法的定义*/
{
zhan3[t3-1]=zhan3[t3-1]*zhan3[t3];
t3--;
}
elseif(nibo[j]=='/')/*对除法的定义*/
{
zhan3[t3-1]=zhan3[t3-1]/zhan3[t3];
t3--;
}
elseif(nibo[j]=='^')/*对乘方的定义*/
{
zhan3[t3-1]=pow(zhan3[t3-1],zhan3[t3]);
t3--;
}
elseif(nibo[j]=='#')/*对开方的定义*/
{
zhan3[t3]=sqrt(zhan3[t3]);
}
j++;
}
returnzhan3[t3];/*返回值*/
}
voidmain()
{
for(;;)
{
charx,a[50];
doublejieguo;
inti=0;
a[0]='$';
printf("#表示开方,^表示乘方(支持负数)\n");/*对乘方和开方的定义*/
printf("请输入表达式无需输入=号直接回车可输出答案退出请输入q\n\n");
scanf("%c",&x);
if(x=='q')break;
while(x!
='\n')/*碰到'\0'结束部分程序的运算*/
{
a[++i]=x;
scanf("%c",&x);
}
a[i+1]='\0';
jieguo=jisuan(a);
printf("\n");
printf("结果为:
%lf",jieguo);
printf("\n\n\n");
printf("退出请输入q继续请直接输入\n\n");
}
}
4设计结果与分析
系统测试结果如下:
根据电脑所给的提示出现语法错误,缺少变量的定义大多的语法错误在通过书本参考下能够修改。
主要是平时看书不仔细、不太注意而产生的,如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号;在使用文件的时候忘记将文件先打开,对打开的方式与使用的情况不太注意而造成不匹配;还有漏掉形参的定义是值不能传递等等。
这些语法错误有信息框的提示一般是能够排除的。
另外还有部分注释的位置也错了,最重要的是逻辑上的错误,一般电脑不容易发现。
所以更对程序仔细的检查。
经认真修改之后重新保存文件。
错误原因分析一
缺少变量定义,定义位置不正确
由于该程序相对来讲稍有些长,前后有些变量不容易联系起来,但是在错误信息的提示下一般还是很容易找到,不过需要注意的是在定义的时候有些函数使用同样的变量名而表示不同的作用,因而使用要很小心,定义及定义的位置特别留意。
为减少这样的错误我后来还是用不同的变来名来表示,结果引起的那些错误解决了。
语法错误
大多的语法错误在通过书本参考下能够修改。
主要是平时缺乏锻炼、不太注意而产生的。
如没有注意具体数据使用是有一定的范围限定;过分重视分号的重要性而在for、if、while语句中画蛇添足加分号。
错误原因分析二
注释的位置
程序设计中在注释的时候不能同我们平常写字一样随心所欲,我们应该注意注释的格式。
注释中不能含有C语言可执行的语句。
逻辑错误
编译、连接的成功并不意味着程序的最终成功,逻辑上的错误机器不易检查出来,这时需要多数据结果进行分析。
这种错误的查找是最难的,需要有相当的耐心和细心去把问题找出来,这也是本次程序编辑过程中碰到的最大的难题。
往往运行之后得不到令人满意的结果。
此时解决的方法一则用“分段检查”的方法,在程序的不同位置设几个printf函数语句,输出有关变量的值,逐段往下检查,对检查出的错误进行修改,当调试完毕将设置的printf都删去,若在程序中找不到问题,则再来考虑算法是否逻辑严谨,再进行修改,如此循环往复,直到最后程序运行成功。
在本次程序编辑过程中,我就是这样处理这个问题的。
所以到最后我找到了错误,及时改正,终于把程序完成了,一切功能显示正常。
5小结
用C语言来编程的技巧,以及对C也有了更加深刻的认识。
通过这次两个星期左右的C语言程序课程设计实习,我觉得我学到了很多,以前在课堂上学的东西以为都是一些枯燥无味的东西,直到进行了这次课程设计后我才真正的明白了什么叫做“书到用时方恨少”,深深地感到自己C语言知道的缺乏,感到自己上机编程能力的不足,我对C有了更加深刻的认识,提高了我用C语言编程的综合能力和实际操作能力,初步掌握简单软件的分析方法和设计方法。
我希望在以后的学习中能有更多这样的机会,让我们能够进行实践操作,从而在实际操作中不断提高我们的综合能力。
6参考文献
[1]谢希仁.计算机网络(第五版)[M].北京:
电子工业出版社,2008年2月
[2]胡小强计算机网络[M]北京:
北京邮电大学出版社2005年1月
[3]李丽娟C语言程序设计教程(第2版)[M],人民邮电出版社2009年3月
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 简单 计算器 编写 课程设计