目录。一、设计任务说明 1
二、设计方案 1
1、函数 1
2、流程图 3
3、源程序分析 3
三、测试分析 11
四、总结 12
五、参考文献 12
1、设计题目:带括号的四则运算(支持小括号、优先级)。
2、整个系统均用c语言实现。
3、通过这次课程设计,进一步巩固所学的语句,如语句嵌套等;加深对循环,分支等结构的运用;最后还可以熟悉四则运算﹑三角函数等经典算法。
4、通过此次课程设计扩展自己的知识面,课本上的东西是远远不够的,可以通过去图书馆查资料,上网找资料等手段学到一些新知识,比如画图函数,颜色填充函数等。
5、通过课程设计,加深对结构化程序设计思想的理解,能进行一个系统功能需求分析,并设计合理的模块化结构。提高程序开发能力。
1.1 int check(char *c)
输入参数:char *c: 输入的字符串。
返回参数:0:字符串中有不符合规定的字符。
1: 字符串字符符合规定,没有不符合规定的字符。
功能:检查字符串中有否除了 0-9之外的其他字符,如果有,则返回0, 表示出现错误。
若没有,则返回1,表式字符串符合规定。
1.2 void move(char *f, double *s,int p)
输入参数:char *f : 运算符数组。
double *s: 数值数组。
int p: 当前运算符数组位置。
功能: 将当前已经完成运算的运算符消去,同时将数值数组的位置调整以进行下一次运算。
传入值p若为3
则当前符号的数组位置为3.
f[3]=f[3+1]..f[len-2]=f[len-1] f[len-1]='0'; s[i]=s[i+1]..s[len-1]=s[len] 因为数值比运算符多一个。
1.3 double convnum(char *c)
输入参数:char *c :由数字和小数点组成的字符,用以转换成double型的数值。
返回参数:num:返回转换好的值。
功能:将输入的字符串先将其小数点以前的部分复制到temp数组中, 若有小数点,则将小数点之后的数值,也就是小数部分先进行计算,值存入num中。
计算完成后,再对整数部分进行计算,值加上小数部分的值,存入num中。
1.4 double good(char *c)
输入参数:char *c :即将进行运算的字符串型数学表达式。如3.5+(2*3/5)
返回参数:s[0]:计算结果将放入s[0]中。
功能:将输入的字符串中的数字分别调用convnum(char *c)函数进行数值变换,再将其依次存入doulbe s[i]中,将加减乘除运算符依次存入字符串符号数组 char f[i]中,然后如果遇到括号,则将括号内的字符串存入另一字符数组中,然后用此good(char *c) 递归函数进行递归运算。 然后根据先乘除,后加减的顺序对已存入数组的数值根据存入字符串符号数组的运算符进行运算。
结果存入s[0]中。
返回最终结果。
图2-1图2-2
#include<> 库文件包含*/
#include<> 用于字符串操作*/
#include<> 用于exit函数*/
int check(char *c)
int k=0;
while(*c!='0')
else if(*c=='
k++;else if(*c=='
k--;c++;
if(k!=0)
return 1;
void move(char *f, double *s,int p)
int i=0,len=strlen(f);
for(i=p; i即把乘和除号的位置用后面的加和减号填充*/
f[i]=f[i+1];
s[i]=s[i+1];
s[i]=s[i+1];
f[len-1]='0';
double convnum(char *c)
for(i=start; i if(c[i]==
temp[tempi++]c[i]; 将整数部分复制到temp中*/
temp[tempi]='0';
if(p!=0)
a=a*0.1;
num+=(a*(c[i]-48));
a=1.0;
len=strlen(temp计算整数部分*/
for(i=len-1;i>=0; i--)
num=num*f;
return num;
double good(char *c) /可递归函数*/
/*取得数值字符串,并调用convnum转换成double*/
char g[100],number[30]; g,保存当前的表达式串,number保存一个数的所有字符*/
char f[80]; 保存所有的符号的堆栈*/
int fi=0; /保存符号的位置指针*/
double s[80]; 保存当前所有的数的一个堆栈*/
int si=0; /保存数字位置指针*/
int k=0; /若k=1则表示有一对括号*/
int num=0,i=0; /num保存新括号内的字符数,i 保存number里的字符位置*/
int cc=0; /乘除符号数量*/
int jj=0; /加减符号数量*/
while(*c!='0')/当p==1 和k==0时,表示已经把括号里的内容全部复制到g[100]中了*/
break;
case'('有括号,则将当前括号作用范围内的全部字符保存,作为*/
k++;一个新的字符表达式进行递归调用good函数计算。*/
while(k>0)
else if(*c=='
g[num-1]='0';
num=0;/*完成一个括号内容的复制,其位置指针num=0*/
s[si++]good(g);
break;
default:
number[i++]c;
if(*(c+1)==0')
break;
c++;
f[fi]='0';
i=0;while(cc>0)
switch(f[i])
case '*cc--;
s[i+1]=s[i]*s[i+1];
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...