c语言简单计算器的设计说明书.docx

上传人:b****6 文档编号:6756997 上传时间:2023-01-10 格式:DOCX 页数:14 大小:145.21KB
下载 相关 举报
c语言简单计算器的设计说明书.docx_第1页
第1页 / 共14页
c语言简单计算器的设计说明书.docx_第2页
第2页 / 共14页
c语言简单计算器的设计说明书.docx_第3页
第3页 / 共14页
c语言简单计算器的设计说明书.docx_第4页
第4页 / 共14页
c语言简单计算器的设计说明书.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

c语言简单计算器的设计说明书.docx

《c语言简单计算器的设计说明书.docx》由会员分享,可在线阅读,更多相关《c语言简单计算器的设计说明书.docx(14页珍藏版)》请在冰豆网上搜索。

c语言简单计算器的设计说明书.docx

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;l

str3[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;l

sub_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;l

sub_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;l

sub_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;l

sub_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;}

}//第四个函数

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

当前位置:首页 > 总结汇报

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

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