歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOCX文檔下載  

重言式判別源碼及課程設(shè)計(jì)-c語言版

  • 資源ID:59371488       資源大?。?span id="t3ftrra" class="font-tahoma">94.32KB        全文頁數(shù):14頁
  • 資源格式: DOCX        下載積分:0積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要0積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付說明:
本站最低充值0.01積分,下載本資源后余額將會存入您的賬戶,您可在我的個人中心查看。
驗(yàn)證碼:   換一換

 
賬號:
密碼:
驗(yàn)證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點(diǎn)擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

重言式判別源碼及課程設(shè)計(jì)-c語言版

精選優(yōu)質(zhì)文檔-傾情為你奉上重言式的判別題目:一個邏輯表達(dá)式如果對于其変元的任一種取值都為真,則稱為重言式;反之,如果對于其變元的任一種取值都為假,則稱為矛盾式;然而,更多的情況下,既非重言式,也非矛盾式。試寫一程序,通過真值表判別一個邏輯表達(dá)式屬于上述哪一類。一、需求分析1、邏輯表達(dá)式從終端輸入,長度不超過一行。2、邏輯運(yùn)算符包括“|”“&”“”表示或 與 非。運(yùn)算符優(yōu)先程度遞增,但是可由括號改變。3、邏輯變元為大寫字母表達(dá)式中任何地方都可以含有多個空格符。4、運(yùn)用自底向上的算符優(yōu)先法5、重言式顯示“true forever”;矛盾式顯示“false forever”;否則顯示“satisfactible”。二、概要設(shè)計(jì)為實(shí)現(xiàn)上述需求需要用到自底向上的算符優(yōu)先法,和自頂向下分割,先序遍歷建立二叉樹的方法。自底向上的算符優(yōu)先法:char OPTRCHART77= ' ','|','&','','(',')','#', '|','>','<','<','<','>','>', '&','>','>','<','<','>','>', '','>','>','>','<','>','>','(','<','<','<','<','=','>',')','>','>','>','>','>','>','#','<','<','<','<','<','='switch(cmp(GetTop(&OPTR)->data,*p)case '<':break;case '=':break;case '>':break;/*switch*/建立二叉樹:typedef struct BiTNodestruct BiTNode * Lchild;struct BiTNode * Rchild;ElemType data;BiTNode , *BiTree;棧中的操作:typedef struct NodeBiTree * base;BiTree *top;int stacksize;SqStack;入棧操作及出棧銷毀棧的操作:int InitStack(SqStack * stack)stack->base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!stack->base)exit(OVERFLOW);stack->top=stack->base;stack->stacksize=STACK_INIT_SIZE;return OK;BiTree GetTop(SqStack * stack)if(stack->top=stack->base)return NULL;return *(stack->top-1);int Push(SqStack * stack,BiTree Bitnode)if(stack->top-stack->base>=stack->stacksize)stack->base=(BiTree*)realloc(stack->base,(stack->stacksize+STACKINCREAMENT)*sizeof(BiTree);if(!stack->base)exit(OVERFLOW);stack->top=stack->base+stack->stacksize;stack->stacksize+=STACKINCREAMENT;*(stack->top)=Bitnode;stack->top+;return OK;BiTree Pop(SqStack * stack)if(stack->top=stack->base)return ERROR;return *(-stack->top);int DestroyStack (SqStack * stack)free(stack->base);return OK;三、詳細(xì)設(shè)計(jì)詳細(xì)程序如下:#include<stdio.h>#include<malloc.h>#include<math.h>#include<stdlib.h>#define OK 1#define ERROR 0#define VARIMAXNUM 20 #define STARMAXLEN 100 #define STACK_INIT_SIZE 100 /棧的最大長度#define STACKINCREAMENT 10 /每次增加的棧的長度#define ElemType char 將elemtype定義為char型typedef struct BiTNode /創(chuàng)建樹節(jié)點(diǎn) 按照書上原樣創(chuàng)建struct BiTNode * Lchild;struct BiTNode * Rchild;ElemType data; /字符型BiTNode , *BiTree;typedef struct Node /棧BiTree * base;BiTree *top;int stacksize;SqStack;char OPTRCHART77= /此舉是為了后面的優(yōu)先級考慮' ','|','&','','(',')','#','|','>','<','<','<','>','>','&','>','>','<','<','>','>','','>','>','>','<','>','>','(','<','<','<','<','=','>',')','>','>','>','>','>','>','#','<','<','<','<','<','='int InitStack(SqStack * stack) /初始化棧stack->base=(BiTree*)malloc(STACK_INIT_SIZE*sizeof(BiTree);if(!stack->base)exit(OVERFLOW);stack->top=stack->base;stack->stacksize=STACK_INIT_SIZE;return OK;BiTree GetTop(SqStack * stack) /返回值為BiTree類型的 取棧頭if(stack->top=stack->base)return NULL;return *(stack->top-1);int Push(SqStack * stack,BiTree Bitnode) /將樹的節(jié)點(diǎn)放進(jìn)棧的操作,入棧if(stack->top-stack->base>=stack->stacksize)stack->base=(BiTree*)realloc(stack->base,(stack->stacksize+STACKINCREAMENT)*sizeof(BiTree);if(!stack->base)exit(OVERFLOW);stack->top=stack->base+stack->stacksize;stack->stacksize+=STACKINCREAMENT;*(stack->top)=Bitnode;stack->top+;return OK;BiTree Pop(SqStack * stack) /取值指針后移if(stack->top=stack->base)return ERROR;return *(-stack->top);int DestroyStack (SqStack * stack) /毀棧 free(stack->base);return OK;char strSTARMAXLEN;int varitabVARIMAXNUM+1;int sum;BiTree root;SqStack OPTR,OPND;char cmp(char a,char b) /取左右交叉的符號即“<”“>”“=”int i,j;for(i=0;i<=6;i+)if(OPTRCHARTi0=a)break;for(j=0;j<=6;j+)if(OPTRCHART0j=b)break;return OPTRCHARTij; void CreatBiTree() / 建樹BiTree temp,a,b;char *p=str;temp=(BiTree)malloc(sizeof(BiTNode);temp->data='#'Push(&OPTR,temp);while(*p!='#')|(GetTop(&OPTR)->data!='#')if(*p>=65)&&(*p<=90)|(*p>=97)&&(*p<=122)temp=(BiTree)malloc(sizeof(BiTNode);temp->data=*p;temp->Lchild=NULL;temp->Rchild=NULL;Push(&OPND,temp);p+;elseswitch(cmp(GetTop(&OPTR)->data,*p) /開始判斷優(yōu)先級case '<':temp=(BiTree)malloc(sizeof(BiTNode);temp->data=*p;temp->Lchild=NULL;temp->Rchild=NULL;Push(&OPTR,temp); p+;break;case '=':temp=Pop(&OPTR);free(temp);p+;break;case '>':temp=Pop(&OPTR);b=Pop(&OPND);temp->Rchild=b;if(temp->data!='')a=Pop(&OPND);temp->Lchild=a;Push(&OPND,temp);break;/*switch*/*else*/*while*/root=Pop(&OPND);temp=Pop(&OPTR);free(temp);void DestroyBiTree(BiTree tree) /銷毀樹并取出需要的值if(!tree)return;else if(tree->Lchild=NULL)&&(tree->Rchild=NULL)free(tree);return;elseDestroyBiTree(tree->Lchild);DestroyBiTree(tree->Rchild);free(tree);int GetValue(BiTree tree) if(!tree)return 0;else if(tree->data>=65)&&(tree->data<=90)return varitabtree->data-64;else if(tree->data>=97)&&(tree->data<=122)return varitabtree->data-96;elseswitch(tree->data)case '|':return (GetValue(tree->Lchild)|GetValue(tree->Rchild);case '&':return (GetValue(tree->Lchild)&&GetValue(tree->Rchild); case '':return (!GetValue(tree->Rchild);void destroy() /銷毀棧DestroyStack (&OPTR);DestroyStack (&OPND);void init()InitStack(&OPTR);InitStack(&OPND);*varitab=0;sum=(int)pow(2.0,*varitab);root=NULL;str0='#'void input() / 為了能繼續(xù)輸入需要判別的式子char *p,*q;printf("請輸入要判斷的式子中變量的數(shù)目n");scanf("%d",varitab);while(*varitab<0)printf("錯誤,請重新輸入數(shù)字!n"); printf("請輸入要判斷的式子中變量的數(shù)目:n");scanf("%d",varitab);getchar();sum=(int)pow(2.0,*varitab);printf("輸入要判別的式子:n");gets(str);for(p=q=str;*p;p+)if(*p!=' ')*q+=*p;*q='#'void Varitab(int n)int i;for(i=0;i<*varitab;i+)varitab*varitab-i=(n>>i)%2;void table()int i,j,value;printf("真值表為:n");for(i=1;i<=*varitab;i+)printf(" %c",64+i);printf("n");for(i=0;i<sum;i+)Varitab(i);for(j=1;j<=*varitab;j+)printf("%d",varitabj);value=GetValue(root);if(value)printf("真n");elseprintf("假n");void mutualcm()int i,value,truenum=0,falsenum=0,cmd;for(i=0;i<sum;i+)Varitab(i);value=GetValue(root);if(value)truenum+;elsefalsenum+;if(truenum=sum)printf("true forever!n");else if(falsenum=sum)printf("false forever!n");elseprintf("請進(jìn)行選擇1:進(jìn)行用戶輸入驗(yàn)證 其它:進(jìn)行計(jì)算機(jī)列舉n");scanf("%d",&cmd);if(cmd=1)printf("輸入變量值:n");for(i=1;i<=*varitab;i+)printf("%c=",64+i);scanf("%d",varitab+i);value=GetValue(root);if(value)printf("真!n");elseprintf("假!n");elsetable();int main()int choice;init();printf("*n");printf(" 重言式的判別 n");printf("*n");doinput(); CreatBiTree();mutualcm();printf("*n");printf("是否繼續(xù)判別:1、繼續(xù);2、結(jié)束n");DestroyBiTree(root); scanf("%d",&choice);while(choice=1);destroy(); return 0;四、調(diào)試分析1、設(shè)計(jì)程序開始的時候,發(fā)現(xiàn)樹的概念不清,且遍歷不懂。翻書查閱解決。2、樹的建立過程一直出錯,節(jié)點(diǎn)掌握不足。3、開始沒用優(yōu)先級考慮,結(jié)果得不到要的結(jié)果,參照另一程序明白優(yōu)先級的操作。4、scanf("%d",&cmd);此句忘加&號 結(jié)果輸入后程序就終止,粗心導(dǎo)致。5、stack->base=(BiTree*)realloc(stack->base,(stack->stacksize+STACKINCREAMENT)*sizeof(BiTree);此句原來寫的事stack->base=(BiTree *)malloc(stack->stacksize+STACKINCREAMENT)*sizeof(BiTree);程序無法執(zhí)行,不知為什么。6、stack->base=(BiTree )malloc(stack->stacksize*(sizeof(BiTree) 此句本來在(BiTree *)結(jié)果報(bào)多* 去掉沒問題,但是不明白五、用戶手冊本程序采用需要用戶輸入或者判別的時候步步都有提示如圖所示六、測試結(jié)果需要測試的數(shù)據(jù)為:(1)(A|A)&(B|B)(2)(A&A)&C(3)A|B|C|D|E|A(4)A&B&C&B(5)(A|B)&(A|B)(6)A&B|A&B;0,0;0,1;1,0;1,1。測試結(jié)果如圖所示:七、用戶手冊#include<stdio.h> #include<malloc.h>#include<math.h>#include<stdlib.h>專心-專注-專業(yè)

注意事項(xiàng)

本文(重言式判別源碼及課程設(shè)計(jì)-c語言版)為本站會員(494895****12427)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點(diǎn)擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因?yàn)榫W(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!