1、1 计算机科学与技术系 课程设计报告 20122013 学年第 2 学期 课程课程 数据结构与算法 课 程 设 计 名 称课 程 设 计 名 称 重言式的判别 学生姓名学生姓名 学号学号 专业班级专业班级 指导教师指导教师 2013 年 6 月 2 目录目录 1、题目 3 2、问题分析和任务定义 4 3、数据结构的选择和概要设计 5 4、详细设计和编码 8 5、上机调试过程 17 6、测试结果及其分析 19 7、用户使用说明 20 8、参考文献 20 9、附录(完整程序代码) 21 3 第一章第一章 题目题目 “数据结构与算法课程设计”是计算机科学与技术专业学生的集中实践性环节之一,是 学习“
2、数据结构与算法”理论和实验课程后进行的一次全面的综合练习。其目的是要达到理 论与实际应用相结合, 提高学生组织数据及编写程序的能力, 使学生能够根据问题要求和数 据对象的特性, 学会数据组织的方法, 把现实世界中的实际问题在计算机内部表示出来并用 软件解决问题,培养良好的程序设计技能。 内容:【问题描述】 一个逻辑表达式如果对于其变元的任一种取值都为真,则称为重言式;反之,如果对于 其变元的任一种取值都为假,则称为矛盾式;然而,更多的情况下,既非重言式,也非矛盾 式。试写一个程序,通过真值表判别一个逻辑表达式属于上述哪一类。 【基本要求】 (1) 逻辑表达式从终端输入,长度不超过一行。逻辑运算
3、符包括 “|“,“ typedef struct btdnode*bitree; /识别表达式使用的堆栈定义,它存放的都是树的结构,鉴于逻辑符号的优先不同,我们需 要用到堆栈; typedef struct lnode_optrsqstack; 2、算法的设计 本设计从总体上划分可分为四个模块, 第一个模块为树与堆栈的创建。 void create(bitree struct node *lchild; struct node *rchild; BiTNode,*bitree; typedef struct stack /识别表达式使用的堆栈定义,它存放的都是树的结构 /栈中的元素都是树的结点
4、结构 bitree *base; /栈底指针 bitree *top; /栈顶指针 int stacksize; /栈容量 seqstack; 二、设计功能子函数 /用于产生变量的各种取值组合 void creatzuhe(int n) int i,num=0,j=0,e; int tempmaxsize; for(i=0;i=0) e=tempj; j-; zuhenum=e; num+; 9 /自底向上地根据运算符地优先级来建立分子树函数 void create(bitree /分树的链接 f-rchild=r; /分树的链接 if(l l-rchild=NULL; if(int(r-da
5、ta)=65 r-rchild=NULL; /逻辑运算符的优先级判别 char youxianji(char m,char n) int i,j; char bijiao77= ,|, for(i=0;i=65 push(variable,variables); /入变量栈 else if(int(*s)90|int(*s)data) case data=*s; push(logic,logics); break; case =: pop(logic,kuohao); /脱括号并接受下一个字符 break; case : /栈顶的运算符优先级高,变量出栈运算 pop(logic,g); /弹出逻辑运算符 pop(variable,a); /弹出变量 b=NULL; /只有右子树 if(g-data!=) pop(variable