如果您无法下载资料,请参考说明:
1、部分资料下载需要金币,请确保您的账户上有足够的金币
2、已购买过的文档,再次下载不重复扣费
3、资料包下载后请先用软件解压,在使用对应软件打开
计算机技术基础课程设计C语言设计报告题目:简单的加减乘除运算学院:化学工程学院专业:制药工程专业班级:050607姓名:王兰兰指导教师:顾煜新设计日期:2007年1月6日一.选题背景在现实生活中常需要对一些并不深奥但较长或繁琐的数字进行简单的计算,可大大提高工作效率,节约时间.该程序可运用到C语言中的大部分知识,并且简单易懂,在选择分支下判断符号的优先级别,调用加减乘除的计算函数并转化表达式即可完成程序的运行.选择该题目也有能力限制的原因,但不影响涵盖广泛的知识面.二.设计思路:加减乘除的运算均是双目运算,计算式涉及两个数据和一个计算符号,所以,首先定义两个结构体变量,在结构体变量中再分别定义两个栈,所谓栈就是一个稍微复杂的数组,并且只能从后面加入数据和导出数据,就是所谓的后到先出,好比堆东西,在最上面的东西是最后放入的,但是却是最先取出的struct{floata[100];inttop;/*用来记录栈顶的变量*/}St;/*在外部定义了一个栈,好似定义了一个全局变量,此栈为数据栈*/struct{charb[100];inttop;//也是用来记录栈顶的变量}Op;//同上,此栈为运算符号栈为了方便起见,选择用指针做参数来记录数据voidPop_St(float*e)//用指针作参数直接记录数据,方便在连续计算中涉及到计算符号优先级别的比较,所以调用函数完成该比较.扩号的优先级别最高,其次是乘除,再次是加减,用>,=,<来表示优先级别.charPrecede(charp){chare;switch(p){case'+':case'-':if(Op.top!=-1&&Op.b[Op.top]!='(')e='>';elsee='<';break;case'*':case'/':{if(Op.b[Op.top]=='*'||Op.b[Op.top]=='/'||Op.b[Op.top]==')')e='>';elsee='<';break;}……….然后调用函数进行计算进入程序的核心部分,把表达式转化为逆波兰表达式.printf("Pleaseinputtheexpression:");gets(str);//输入表达式printf("thechangeexprissionis");while(*p!='\0'){if(*p>='0'&&*p<='9')//如果输入的是数字{while(*p>='0'&&*p<='9'){num=*p-'0'+num*10;//把用字符表示的数字转化为实际意义的数字,并且把一串字符数字变成有实际意义的数字,如‘1’‘2’‘3’‘4’这是一串字符,转化成1234,一千两百三十四putchar(*p);p++;}Push_St(num);//把转化好的数字导入数据栈里num=0;putchar('');}最后再比较读入符号的优先级别,进行计算,并返回计算函数的返回值,输出计算结果printf("\ntheresuleis%.f\n",a);三,程序流程图将输入的表达式转化为有意义的数字和运算符号记为”<”记为”=”记为”>”栈顶的符号优先级别低于读取符号栈顶的符号优先级别等于读取符号栈顶的符号优先级别高于读取符号比较栈顶的符号和所读取符号的优先级别将输入内容分别储存进数据栈和和符号栈输入计算表达式(以字符串的格式)输出提示性表达语句输出运算结果输出”errorexpression”把栈顶的运算符扔了将读入的运算符导入栈将栈顶的运算符导出当栈不为空,将栈里的符号依次导出,调动运算函数运算除数不为零除数为零<>=读取优先级别的判定四.程序清单:#include<stdio.h>#include<stdlib.h>#defineNull0struct{floata[100];inttop;/*用来记录栈顶的变量*/}St;/*在外部定义了一个栈,好似定义了一个全局变量,此栈为数据栈*/struct{charb[100];inttop;/*也是用来记录栈顶的变量*/}Op;/*同上,此栈为运算符号栈*/voidPush_St(floate){if(St.top!=99)/*判断栈顶是否满了*/