c语言简单计算器的设计说明书.docx
《c语言简单计算器的设计说明书.docx》由会员分享,可在线阅读,更多相关《c语言简单计算器的设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。
![c语言简单计算器的设计说明书.docx](https://file1.bdocx.com/fileroot1/2023-1/9/fc6084a1-5483-4f29-9e4c-7708bddc641a/fc6084a1-5483-4f29-9e4c-7708bddc641a1.gif)
c语言简单计算器的设计说明书
尼玛大学
课程设计说明书
学院、系:
尼玛学院
专业:
尼玛工程
学生姓名:
李尼玛
学号:
1xxx438
设计题目:
简单计算器的设计
起迄日期:
2013年10月11日~2013年11月16日
指导教师:
王尼玛
日期:
2013年11月16日
1设计目的
●通过本项课程设计,可以培养独立思考、综合运用所学有关相应知识的能力,能更好的巩固C语言课程学习过的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,闯过理论与实践相结合的难关!
更加了解了c语言的好处和其可用性!
●通过C语言课程设计,使学生了解高级程序设计语言的结构,掌握基本的程序设计过程和技巧,掌握基本的分析问题和利用计算机求解问题的能力,具备初步的高级语言程序设计能力。
为后续各门计算机课程的学习和毕业设计打下坚实基础。
2任务概述
设计程序代码使其能够:
接受一个字符串,然后由左至右对其进行判断,如若是没有括号的四则运算,则直接计算并输出其值;若是带有括号,则对其括号进行判断,划分,并得出运算优先级,进行先后计算,最终得出其值。
3模块划分
程序主要由voidSplitK(char*str);、voidSplitPrem(char*str);、voidCombine(floatf1,charOperate,floatf2);、voidStringBracket(char*str);四个函数模块组成。
分别实现:
字符判断,优先级判断,运算实现等的功能。
4主要函数说明及其N-S图
图4.2简易计算器的流程图
5程序运行数据及其结果
图5.1加法运算1+1=2
图5.2减法运算1-1=0
图5.3组合运算1:
(1+3)*2=8
图5.4组合运算2:
(12-2)/3=3.33
6课程设计心得
这次“简单计算器制作”的课程设计不仅让我对C语言的熟悉程度上升到了另一个高度。
它是我在编程路途上的一次小的跳跃。
而且在处理非常规数据类型的运算的锻炼下,使我对编程语言有了一个新的认识。
当看着一个具有界面的计算器的模型成品出现在自己面前时,心中有着无限感慨,原来编程也不是非常遥不可及的,原来在编程的趣味性中能让我学到更多有意思的知识。
通过这次课程设计,我也发现了自己的好多不足之处,首先自己在指法上还不行,经常按错字母,通过学习也有所改进;再有对C语言的一些标准函数不太了解,还有对函数调用的正确使用不够熟悉,对代码中经常出现的错误也不是很了解,通过实践,是我在这些方面的认识有所提高。
并且,这次实践的成功也是我对c语言编程的兴趣得到了提升,让我决定我在以后的学习中也要经常拿c来编一些自己喜欢的小程序,甚至小游戏。
附录:
源代码:
#include
#include
#include
#include
#include
voidSplitK(char*str);
voidSplitPrem(char*str);
voidCombine(floatf1,charOperate,floatf2);
voidStringBracket(char*str);//函数申明
charstr1[100],str2[100],str3[100],sub_str1[100],sub_str2[100],sub_str3[20];
charsub_str31[20],sub_str32[20],str_4[100],operate;
intpause=0,left=0,k1,k2,k3;
floatf1=0.0,f2=0.0,f=0.0;//变量定义
voidmain()
{
printf("====================欢迎使用我的简易计算器======================\n");
printf("****************************************************************\n");
printf("使用方法:
请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n");
printf("*****************************************************************\n\n");
printf("请输入要计算的式子:
\n");
scanf("%s",&str1);
SplitK(str1);
floattemp;
temp=atof(str1);
printf("计算结果为%.2f\n",temp);
}//主函数
voidSplitK(char*str)
{
inti,j,k,l,jk;
left=0;
while(*str){
if(*str=='(')left++;
str++;
}
str2[0]='\0';
str3[0]='\0';
if(left>0)
{
StringBracket(str1);
j=strlen(str1);
for(i=0;i{
if(str1[i]=='(')
{
jk=0;
for(k=i;k{
if(str1[k]==')')break;
for(l=i+1;l{
if(str1[l]=='('){jk++;break;}
}
}
if(jk==0)
{
for(l=0;l
str2[i]='\0';
for(l=k+1;lstr3[j-k-1]='\0';
for(l=i+1;l<=k-1;l++)str1[l-i-1]=str1[l];
str1[k-i-1]='\0';
break;
}
}
}
}//第一个函数
SplitPrem(str1);
}
voidSplitPrem(char*str)
{
inti,j,k,l;
f1=0.0;
f2=0.0;
pause=0;
strcpy(str1,str);
StringBracket(str1);
j=strlen(str1);
for(i=1;i{
if((str1[i]=='*'||str1[i]=='/'))
{
strcpy(sub_str1,"");
strcpy(sub_str2,"");
strcpy(sub_str3,"");
strcpy(sub_str31,"");
strcpy(sub_str32,"");
operate=str1[i];
for(k1=i-2;k1>=0;k1--)
{
if((str1[k1]=='*'||str1[k1]=='/'||str1[k1]=='+'||str1[k1]=='-'))
{
for(l=0;l<=k1;l++)sub_str1[l]=str1[l];
sub_str1[k1+1]='\0';
break;
}
}
for(k2=i+2;k2{
if((str1[k2]=='*'||str1[k2]=='/'||str1[k2]=='+'||str1[k2]=='-'))
{
for(l=k2;lsub_str2[j-k2]='\0';
break;
}
}
if(k1<0)k1=-1;
for(l=k1+1;l
sub_str31[i-k1-1]='\0';
if(k2>j)k2=j;
for(l=i+1;lsub_str32[k2-i-1]='\0';
f1=atof(sub_str31);
f2=atof(sub_str32);
Combine(f1,operate,f2);
}
if(pause==1)break;
}
j=strlen(str1);
for(i=1;i{
if((str1[i]=='+'||str1[i]=='-'))
{
strcpy(sub_str1,"");
strcpy(sub_str2,"");
strcpy(sub_str3,"");
strcpy(sub_str31,"");
strcpy(sub_str32,"");
operate=str1[i];
sub_str1[0]='\0';
k3=0;
for(k2=i+2;k2{
if((str1[k2]=='+'||str1[k2]=='-'))
{
k3=1;
for(l=k2;lsub_str2[j-k2]='\0';
break;
}
}
for(l=0;l
sub_str31[i]='\0';
if(k2>j)k2=j;
if(k3==0)k2=j;
for(l=i+1;lsub_str32[k2-i-1]='\0';
f1=atof(sub_str31);
f2=atof(sub_str32);
Combine(f1,operate,f2);
}
if(pause==1)break;
}
strcpy(str_4,str2);
strcat(str_4,str1);
strcat(str_4,str3);
strcpy(str1,str_4);
StringBracket(str1);
j=strlen(str1);
str2[0]='\0';
str3[0]='\0';
for(i=0;i{
if((str1[i]=='('))
{
SplitK(str1);
break;
}
}
for(i=0;i{
if((str1[i]=='*'||str1[i]=='/'||str1[i]=='+'||str1[i]=='-'))
{
k=1;
if(str1[0]=='-')
{
k=0;
for(l=1;l{
if((str1[l]=='*'||str1[l]=='/'||str1[l]=='+'||str1[l]=='-'))
{
k=1;
break;
}
}
}
if(k==0)break;
if(k==1)
{
SplitPrem(str1);
break;
}
}
}
}//第二个函数
voidCombine(floatf1,charOperate,floatf2)
{
inti,j,k,l;
f=0.0;
switch(Operate){
case'+':
f=f1+f2;
break;
case'-':
f=f1-f2;
break;
case'*':
f=f1*f2;
break;
case'/':
if(f2!
=0)
f=f1/f2;
break;
}
sprintf(sub_str3,"%5.3f",f);
strcpy(str1,sub_str1);
strcat(str1,sub_str3);
strcat(str1,sub_str2);
StringBracket(str1);
j=strlen(str1);
for(i=0;i{
if((str1[i]=='*'||str1[i]=='/'||str1[i]=='+'||str1[i]=='-'))
{
k=1;
if(str1[0]=='-')
{
k=0;
for(l=1;l{
if((str1[l]=='*'||str1[l]=='/'||str1[l]=='+'||str1[l]=='-'))
{
k=1;
break;
}
}
}
if(k==0)break;
if(k==1)
{
SplitPrem(str1);
break;
}
}
}
pause=1;
strcpy(str_4,str2);
strcat(str_4,str1);
strcat(str_4,str3);
strcpy(str1,str_4);
str2[0]='\0';
str3[0]='\0';
StringBracket(str1);
j=strlen(str1);
for(i=0;i{
if((str1[i]=='('))
{
SplitK(str1);
break;
}
}
}//第三个函数
voidStringBracket(char*str)
{inti,j,len;
len=strlen(str);
j=0;
for(i=0;i{
if(str[i]!
='')
{str[j]=str[i];
j=j+1;}
}
str[j]='\0';
if(j>0&&str[j-1]=='.')
{str[j-1]='\0';
j=j-1;}
}//第四个函数