c语言简单计算器的设计说明书Word格式.docx
《c语言简单计算器的设计说明书Word格式.docx》由会员分享,可在线阅读,更多相关《c语言简单计算器的设计说明书Word格式.docx(14页珍藏版)》请在冰豆网上搜索。
设计程序代码使其能够:
接受一个字符串,然后由左至右对其进行判断,如若是没有括号的四则运算,则直接计算并输出其值;
若是带有括号,则对其括号进行判断,划分,并得出运算优先级,进行先后计算,最终得出其值。
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<
stdlib.h>
math.h>
conio.h>
stdio.h>
string.h>
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"
);
****************************************************************\n"
使用方法:
请从键盘上直接输入表达式,以回车键结束.如45*(12-2)[回车]\n"
*****************************************************************\n\n"
请输入要计算的式子:
\n"
scanf("
%s"
&
str1);
SplitK(str1);
floattemp;
temp=atof(str1);
计算结果为%.2f\n"
temp);
}//主函数
voidSplitK(char*str)
{
inti,j,k,l,jk;
left=0;
while(*str){
if(*str=='
('
)left++;
str++;
}
str2[0]='
\0'
;
str3[0]='
if(left>
0)
{
StringBracket(str1);
j=strlen(str1);
for(i=0;
i<
j;
i++)
if(str1[i]=='
)
jk=0;
for(k=i;
k<
k++)
if(str1[k]=='
)'
)break;
for(l=i+1;
l<
k-1;
l++)
if(str1[l]=='
){jk++;
break;
}
if(jk==0)
for(l=0;
i;
l++)str2[l]=str1[l];
str2[i]='
for(l=k+1;
l++)str3[l-k-1]=str1[l];
str3[j-k-1]='
for(l=i+1;
=k-1;
l++)str1[l-i-1]=str1[l];
str1[k-i-1]='
break;
}//第一个函数
SplitPrem(str1);
voidSplitPrem(char*str)
inti,j,k,l;
f1=0.0;
f2=0.0;
pause=0;
strcpy(str1,str);
for(i=1;
j-1;
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]=='
+'
-'
{
for(l=0;
=k1;
l++)sub_str1[l]=str1[l];
sub_str1[k1+1]='
break;
}
for(k2=i+2;
k2<
k2++)
if((str1[k2]=='
||str1[k2]=='
for(l=k2;
l++)sub_str2[l-k2]=str1[l];
sub_str2[j-k2]='
if(k1<
0)k1=-1;
for(l=k1+1;
l++)sub_str31[l-k1-1]=str1[l];
sub_str31[i-k1-1]='
if(k2>
j)k2=j;
for(l=i+1;
k2;
l++)sub_str32[l-i-1]=str1[l];
sub_str32[k2-i-1]='
f1=atof(sub_str31);
f2=atof(sub_str32);
Combine(f1,operate,f2);
if(pause==1)break;
sub_str1[0]='
k3=0;
k3=1;
sub_str2[j-k2]='
for(l=0;
l++)sub_str31[l]=str1[l];
sub_str31[i]='
if(k3==0)k2=j;
sub_str32[k2-i-1]='
strcpy(str_4,str2);
strcat(str_4,str1);
strcat(str_4,str3);
strcpy(str1,str_4);
SplitK(str1);
k=1;
if(str1[0]=='
k=0;
for(l=1;
if((str1[l]=='
||str1[l]=='
if(k==0)break;
if(k==1)
SplitPrem(str1);
}//第二个函数
voidCombine(floatf1,charOperate,floatf2)
f=0.0;
switch(Operate){
case'
:
f=f1+f2;
f=f1-f2;
f=f1*f2;
if(f2!
=0)
f=f1/f2;
sprintf(sub_str3,"
%5.3f"
f);
strcpy(str1,sub_str1);
strcat(str1,sub_str3);
strcat(str1,sub_str2);
pause=1;
}//第三个函数
voidStringBracket(char*str)
{inti,j,len;
len=strlen(str);
j=0;
for(i=0;
len;
if(str[i]!
='
'
{str[j]=str[i];
j=j+1;
str[j]='
if(j>
0&
&
str[j-1]=='
.'
{str[j-1]='
j=j-1;
}//第四个函数