命题公式合法性的判定_第1页
命题公式合法性的判定_第2页
命题公式合法性的判定_第3页
命题公式合法性的判定_第4页
命题公式合法性的判定_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目:命题公式合法性的判定院(系): 专 业: 班 级:学 号:姓 名: 指导教师: 沈阳航空航天大学课程设计报告 目 录沈阳航空航天大学I1 课程设计介绍11.1 课程设计内容11.2题目要求:12课程设计原理22.1课设题目粗略分析22.2原理图介绍22.2.1功能模块图22.2.2流程图分析33数据结构分析123.1存储结构123.2算法描述124调试与分析134.1调试过程134.2运行结果14参考文献15附 录(关键部分程序清单)16 15 沈阳航空航天大学课程设计报告1 课程设计介绍 1.1 课程设计内容题

2、目内容:设命题变元为单个大写字母,交、并、非、条件、双条件连接词分别用+、*、?、=五个字符表示,由屏幕输入一个命题公式串,判断其是否是命题公式。 1.2题目要求:1. 利用所学知识,设计相应的数据结构;2. 熟练运用开发环境;3 .完成软件的设计与编码;4. 熟练掌握基本的调试方法;5 提交符合课程设计规范的报告。2课程设计原理2.1课设题目粗略分析根据课设题目要求,拟将整体程序分为七大模块。以下是七个模块的大体分析:main():主函数模块 Judgek1():检测括号是否本身单独成对出现Judgek2():检测括号本身是否匹配Judgek3():左括号与运算符和命题变元是否同时出现Jud

3、gek4():右括号与运算符或命题变元是否同时出现Judgef():非运算与右括号或其他运算符号是否同时出现Judgey():其他运算与右括号或其他运算符号同时出现Judgel ( ) :命题变元与左括号或非运算或命题变元同时出现Reset ( ) : 初始化数组的函数2.2原理图介绍 2.2.1功能模块图2.2.2流程图分析main(主函数)功能:连接各个函数,确定他们的执行顺序和条件。Judgek1()功能:检测括号是否本身单独成对出现Judgek2( ) 功能: 检测括号本身是否匹配Judgek3( );功能: 左括号与运算符和命题变元是否同时出现Judgek4( )功能: 右括号与运算

4、符或命题变元是否同时出现Judgef( )功能:非运算与右括号或其他运算符号是否同时出现Judgey( )功能:其他运算与右括号或其他运算符号同时出现Judgel( )功能:命题变元与左括号或非运算或命题变元同时出现reset( )功能:初始化数组的函数3数据结构分析3.1存储结构定义一个数组str和一个指向该数组的指针ch_point如下:char str150='0' char *ch_point=str;3.2算法描述1. 检测括号是否本身单独成对出现:在一个字符串中如果括号本身单独出现而括号中没有任何东西出现(如A*( )B)则必不是命题公式,具体算法如下:while(

5、*ch!='0') if(*ch='('&&*(ch+)=')') printf("该字符串不是合法命题,括号不匹配"); exit(0); ch+; 2. 检测括号本身是否匹配:在一个字符串中括号必须是成对按一定规律出现,不可能先出现右括号再出现左括号,否则不是命题公式,具体算法如下:while(*ch!='0') if(*ch='(') n+; if(*ch=')') n-; ch+; if(n<0) printf("该字符串不是合法命题,括号

6、不匹配");exit(0); if(n!=0) printf("该字符串不是合法命题,括号不匹配"); exit(0); 3. 左括号与运算符和命题变元是否同时出现此算法与以下五个算法类似,及每个字符均有多个字符不能与之相邻,否者不是命题公式:while(*ch!='0') ch2=ch+1;if(*ch='('&&(*ch2='+'|*ch2='*'|*ch2='?'|*ch2='=') printf("该字符串不是合法命题,括号3不匹配&q

7、uot;); exit(0); ch+; 3. 初始化数组的函数初始化数组使程序能够不断进行公式合法性判定:for(;*ch!='0'ch+) *ch='0'4调试与分析4.1调试过程在调试过程中经常遇到如下问题:1. 字符的输入问题,如果用scanf输入字符中间用空格隔开,会发生读不进字符的问题。分析:字符和整型数字输入的区别在于空格也算字符的一种,按下空格,也算是输入了字符。解决:只要在输入字符后不用空格而用enter,就可以避免空格也是字符的问题。2. 调试中提示我定义的函数不合法。分析:很有可能是缺少括号造成的。解决:括号两个一起打上去。3. 基本定义问

8、题,有时提示没有定义 分析:全局变量中没有给出,函数有时运用的没有定义。解决:在函数中定义。4. 只能进行一次判定分析:程序不能循环使用解决:运用do while使程序能循环使用,更方便、人性化。5. 不停分配数组空间分析解决:编写函数reset使数组在判定完成后能重新置零。4.2运行结果输入:a+b*(a*b)输出:该字符串不是合法命题,括号1不匹配沈阳航空航天大学课程设计报告 参考文献1 严蔚敏,吴伟民 . 数据结构(C语言版)M. 北京:清华大学出版社,20062 张千帆 . 数据结构与算法(C语言实现)M . 北京:科学出版社,20093 吕国英 . 算法设计与分析 M . 北京:清华

9、大学出版社,20064 徐宝文 李志 . C程序设计语言M . 北京:机械工业出版社,20045 张长海 陈娟 . C程序设计语言M . 北京:高等教育出版社,2004附 录(关键部分程序清单)#include<stdio.h>#include<string.h>#include<stdlib.h> void reset(char *ch) /初始化数组的函数 for(;*ch!='0'ch+) *ch='0' void Judgek1(char *ch) /括号匹配测试 int n; while(*ch!='0

10、9;) if(*ch='('&&*(ch+)=')') printf("该字符串不是合法命题,括号1不匹配"); exit(0); ch+; void Judgek2(char *ch) /括号匹配测试 int n=0; while(*ch!='0') if(*ch='(') n+; if(*ch=')') n-; ch+; if(n<0) printf("该字符串不是合法命题,括号2不匹配"); exit(0); if(n!=0) printf(&qu

11、ot;该字符串不是合法命题,括号2不匹配"); exit(0); void Judgek3(char *ch) /左括号与运算符和字符匹配测试 char *ch2; while(*ch!='0') ch2=ch+1; if(*ch='('&&(*ch2='+'|*ch2='*'|*ch2='?'|*ch2='=') printf("该字符串不是合法命题,括号3不匹配"); exit(0); ch+; void Judgek4(char*ch) /右括号与

12、运算符或字符匹配测试 char*ch2; while(*ch!='0') ch2=ch+1; if(*ch=')'&& (*ch2='-'|('A'<=(*ch2)&&(*ch2)<='Z') printf("该字符串不是合法命题,右括号与运算符或字符不匹配"); exit(0); ch+; void Judgef(char*ch) /非运算与右括号或其他运算匹配测试 char*ch2; while(*ch!='0')ch2=ch+1;

13、 if(*ch='-'&& (*ch2=')'|(*ch2='+'|*ch2='*'|*ch2='?'|*ch2='=')printf("该字符串不是合法命题,非运算与右括号或其他运算不匹配"); exit(0);ch+;void Judgey(char *ch) /其他运算与右括号或其他运算匹配测试char*ch2; while(*ch!='0')ch2=ch+1;if(*ch='+'|*ch='*'|*ch=&#

14、39;?'|*ch='=')&&( *ch2=')'|(*ch2='+'|*ch2='*'|*ch2='?'|*ch2='=')printf("该字符串不是合法命题,其他运算与右括号或其他运算不匹配"); exit(0); ch+;void Judgel(char *ch) /字符与左括号或非运算或字符匹配测试 char *ch2; while(*ch!='0') ch2=ch+1; if('A'<=(*ch)&

15、;&(*ch)<='Z'&&(*ch2='(')|(*ch2='-')|('A'<=(*ch2)&&(*ch2)<='Z') printf("该字符串不是合法命题,字符与左括号或非运算或字符不匹配"); exit(0); ch+; printf("该字符串是合法命题");void main() char str150='0' char *ch_point=str; do printf("n请输入需要判断的字符串:"); scan

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论