Linux环境下的C语言程序设计
北京化工大学北方学院
课程设计报告
课程名称 系统软件课程设计
设计题目班级学号姓名指导教师设计时间简要说明设计题目的目的、意义、内容、主要任务等make工程管理器编译。(注意分割文件,可参考第一题的提示。)编写makefile文件。
程序二:
利用命名管道实现两个进程间的通信。
主要任务
分析理解题目的要求;
总结各个程序涉及的相关知识点;
掌握涉及的各种算法;
程序代码的设计与实现。正文(课程设计的主要内容,包括实验与观测方法和结果、仪器设备、计算方法、编程原理、数据处理、设计说明与依据、加工整理和图表、形成的论点和导出的结论等。正文内容必须实事求是、客观真切、准确完备、合乎逻辑、层次分明、语言流畅、结构严谨,符合各学科、专业的有关要求。
函数功能
int level()的功能 :
int level()是#include 中的函数。
它的功能是赋予 +,-,*,/,(,) 给函数,取得一个运算符的优先级,并且在遇到左括号时总是要停止,让它优先级最低。在这个函数中当遇到),\0 ,=时,要把前面的运算完成。当遇到无效的运算符时return -1,返回主函数中运行。
double cal()的动能:
double cal()是#include 中的函数。
它的功能是为+,-,*,/ 赋值,并且赋值a,b;
完成简单的计算
a+b;
a-b; a*b;
a/b;
最后返回到主函数中运行。
int calexp()的功能:
这个函数是主函数调用前定义的函数。
它的功能是计算一个字符串表达式,计算结果存在pval指向的变量中,返回错误位置下标,-1表示没有错误char* exp和double* pval,开始如果exp输入的表达式无效的话,那么就直接返回到主函数中运行,如果有效,继续运行。(其中用到了函数isspace(*p),这个函数是#include 中的函数,作用是跳过空格。) 。if(*p=='\0') return 0;//如果表达式结束意味着没有数if(*p=='(')),则表示遇到左括号入符号栈strtod(p, &q)是#include 中的函数,它的功能是将字符串转化为浮点数,strtod(p, &q)中p是字符串,赋值给d[dtop++],if(p==q
没有取到操作数,不正常calexp,继续运行。
int main()的功能:
这是主函数,完成最后的运行,当函数值无效时输出‘表达式不正确’,当函数值有效时,输出正确的结果。
函数调用关系
这个程序当中主函数只调用了一个函数,就是calexp(char* exp, double* pval),这个函数是定义的,它的作用是将一些可能的无效的赋值阻挡,使得赋值能顺利的返回,再次运行,并且使有效值入栈,确定了括号的优先顺序,并且将有效值赋予主函数当中,使得主函数能正常运行,从而得到最后的结果。
源程序
#include #include #include #include //完成栈中优先级比*p高的运算符的运算#define CALCULATE while(otop>0&&level(o[otop-1])>=level(*p))\d2=d[--dtop],d1=d[--dtop],op=o[--otop],d[dtop++]=cal(d1,op,d2);//取得一个运算符的优先级int level(char op){ if(op=='*'||op=='/') return 3; if(op=='+'||op=='-') return 2; if(op==')'||op=='='||op=='\0') return 1;//遇到它们要把前面的运算完成 if(op=='(') return 0;//运算遇到左括号总是要停止的,让它优先级最低 return -1;//无效的运算符}//做一个简单计算,a、b是操作数,o是运算符double cal(double a, char o, double b){switch(o){ case '+': return a+b;