当前位置:首页 » 编程语言 » 真值表写c语言代码
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

真值表写c语言代码

发布时间: 2022-09-02 08:48:55

A. 真值表的如何用c语言表示

呵呵,简单啊,你自定义一些符号为与 、或等,在菜单写明就行代表什么就行啊

B. 如何用C语言做出“构造命题公式的真值表”的程序~

const int p[]={0,0,1,1};
const int q[]={0,1,0,1};
int i;
printf("p 合取 q 结果\n");
for(i=0;i<4;i++)
{
if(p[i]==0 || q[i]==0)
{
printf("%d %d 0\n",p[i],q[i]);
}
else
{
printf("%d %d 1\n",p[i],q[i]);
}
}

printf("p 析取 q 结果\n");
for(i=0;i<4;i++)
{
if(p[i]==1 || q[i]==1)
{
printf("%d %d 1\n",p[i],q[i]);
}
else
{
printf("%d %d 0\n",p[i],q[i]);
}
}
printf("p 单条件 q 结果\n");
for(i=0;i<4;i++)
{
if(p[i]==1 && q[i]==0)
{
printf("%d %d 0\n",p[i],q[i]);
}
else
{
printf("%d %d 1\n",p[i],q[i]);
}
}
printf("p 双条件 q 结果\n");
for(i=0;i<4;i++)
{
if((p[i]==1 && q[i]==1) || (p[i]==0 && q[i]==0))
{
printf("%d %d 1\n",p[i],q[i]);
}
else
{
printf("%d %d 0\n",p[i],q[i]);
}
}
//运行结果:

p 合取 q 结果
0 0 0
0 1 0
1 0 0
1 1 1
p 析取 q 结果
0 0 0
0 1 1
1 0 1
1 1 1
p 单条件 q 结果
0 0 1
0 1 1
1 0 0
1 1 1
p 双条件 q 结果
0 0 1
0 1 0
1 0 0
1 1 1
//是这个意思吗?

C. 如何用c编写简单的离散数学合式公式真值表

#include <stdio.h>

int main()

{
char p[10],q[10];
char pandq,porq;
puts("输入P,Q的值(T或者F)");
scanf("%s%s",p,q);
if(p[0]=='T'&&q[0]=='T')pandq='T';
else pandq='F';
if(p[0]=='F'&&q[0]=='F')porq='F';
else porq='T';
printf("PVQ=%c P∧Q=%c\n",porq,pandq);
return 0;
}

/*
合式公式是什么啊?
告诉我,我帮助你写

如P→(PVQ)等等PVQ是当P和Q同时为F是PVQ为F,否则为T,P∧Q是当P和Q同时为T时P∧Q为T,否则为F,P→Q是当P为T,Q为F是P→Q为F,否则为T,P←→Q是当P和Q相同是为T,否则为F

PVQ
Q F T
P
F F T
T T T

P∧Q
Q F T
P
F F F
T F T
这样行吗,你画一下表格吧
*/

D. 用C语言实现(p→q)→(!p∧!r)的真值表

摘要 (P∧(P->Q))->Q

E. 用C语言编程:输入命题公式的合式公式,求出公式的真值表,并输出该公式的主合取范式和主析取范式

A-Z + is OR * is AND _ is → # is⊕(圆圈里加个+) @ is ⊙

$ is ↑ 命题的"与非" 运算( "与非门" )

% is ↓ 命题的"或非"运算( "或非门" )

Input the source formula:

A*!S+R

NORMALc: (!A*!B*!R)+(A*!B*!R)+(!A*B*!R)+(A*B*!R)+(!A*!B*R)+(!A*B*R)+(A*B*R)

NORMALd (!A+B+!R)

Error!

Input the source formula:

A#B

Here!

4countTerms

NORMALc: (A*!B)+(!A*B)

NORMALd (A+B)*(!A+!B)

Error!

Input the source formula:

stack<char> stk;

bool isVar(char ch)const;

void addMin(int minterm);

void addMax(int maxterm);

bool compute(int minterm);

void getInversePoland();

int countTerms(int n);

void assign(int minterm);

stack<bool> boolStk;

public:

formulaBase();

formulaBase(const formulaBase& rhs);

~formulaBase();

void getSource();

cout<<"Invalid input !"

"Operate again:"<<endl;

cin>>sourceFormula;*/

}

void formulaBase::getInversePoland()

{

char temp,temp1;

for(int i=0;sourceFormula[i]!='';i++)

stk.pop();

}

else break;

}

stk.push(temp);

break;

case '*':

while (!stk.empty())

//从键盘上任意输入一个主析取范式,输出与之等值的主合取范式。┐∧∨

# include <iostream>

# include <cmath>

# include <windows.h>

using namespace std ;

(5)真值表写c语言代码扩展阅读:

(1)命题变项是命题公式。

(2)如果A是命题公式,则¬A是命题公式。

(3)如果A和B是命题公式,那么(A∧B)、(A∨B)、(A→B)和(A↔B)都是命题公式。

(4)当且仅当有限次地应用(1),(2),(3)所得到的包含命题变项,联结词和圆括号的符号串是命题公式。

命题公式的定义是一个递归定义形式。命题公式本身不是命题,没有真值,只有对其命题变项进行赋值后,它才有真值。

5个联结词运算儿有不同的优先级。当它们同时出现在一个命题公式里时,联结间运算的优先次序为、∧、∨、→、,如果有括号,则括号内的运算优先进行。

F. C语言问题

因为 while 的循环条件是“真”也就是非0的数。x==0 说明当x=0的时候才循环,那么那么!0就是真,所以!x 和x==0一样的。

G. 怎么用C语言写一个程序,判断真值表的

//---------------------------------------------------------------------------

#include <stdio.h>

int main(void)
{
int p,q;
printf("%9c!P\t!Q\tP&Q\tP|Q\tP^Q\n");
for (p=0; p<2; p++) {
for (q=0; q<2; q++) {
printf("P=%d,Q=%d\t%3d\t%2d\t%2d\t%2d\t%2d\n",p,q,!p?1:0,!q?1:0,p&&q?1:0,p||q?1:0,p^q?1:0);
}
}
return 0;
}
//---------------------------------------------------------------------------

H. 如何用c语言实现真值表

已通过测试,望采纳
其余楼主可参照对应真值表补充
#include <stdio.h>
main()
{ int a=1,b=0;
printf("a=%d\tb=%d\n",a,b);
printf("a&&b=%d\n",a&b);
printf("a||b=%d\n",a||b);
printf("!a=%d\n",!a);
printf("a||(a&&b)=%d\n",a||(a&&b));
printf("a&&(a||b)=%d\n",a&&(a||b));
}

I. 用c语言怎么写真值表

用bool数组表示就可以。不用使用二叉树什么的。
你需要解决的有两点:

如何将输入的变量,编码为数组的元素索引。
真值的运算过程是一系列关系操作,即与或非。

J. 输入一个逻辑表达式,输出它的真值表,要用c语言写的

/*本程序支持任意输入的逻辑表达式,可以进行与或非和蕴涵的运算,表达式中可带括号.bintree.h和stack.cpp为二叉树和栈的定义及实现*/
#include
<stdio.h>
#include
<malloc.h>
#define
MAXNUM
100
//栈最大元素个数
#define
MAXEXP
30
//允许用户输入的表达式最大字符数
#include
"bintree.h"
#include
"stack.cpp"
const
char
and
=
'&',
or
=
'|',
then
=
'-';
bool
InOpt(char
c)
{
return
(c
==
'&'
||
c
==
'|'
||
c
==
'-'
||
c
==
'#');
}
bool
IsNum(char
c)
{
return
(c
>=
'0'
&&
c
<=
'9');
}
bool
IsAlp(char
c)
{
return
((c
<=
'z'
&&
c
>=
'a')
||
(c
>=
'A'
&&
c
<=
'Z'));
}
bool
CheckSyntax(char*
exp)
{
char*
cp
=
exp;
while
(*cp
!=
'\0')
{
if
(!(IsNum(*cp)
||
IsAlp(*cp)
||
InOpt(*cp)
||
*cp
==
'('
||
*cp
==
')'))
return
FALSE;
cp++;
}
if
(*(--cp)
!=
'#')
return
FALSE;
return
TRUE;
}
PBinTree
TransferTree(char
*exp)
{
PBinTreeNode
pbt
=
CrtBinTree();
Stack<BinTreeNode*>
st;
Stack<char>
sc;
char*
ch
=
exp,c;
sc.Push('#');
while
(!(sc.GetTop()==
'#'
&&
*ch
==
'#'))
{
if
(IsAlp(*ch))
{
PBinTreeNode
t
=
CrtBinTree();
t->data
=
*ch;
st.Push(t);
}
else
if
(IsNum(*ch))
{
while
(IsNum(*ch))
{
ch++;
}
ch--;
PBinTreeNode
t
=
CrtBinTree();
t->data
=
*ch;
st.Push(t);
}
else
{
switch
(*ch)
{
case
'(':
sc.Push(*ch);
break;
case
')':
{
c
=
sc.Pop();
while
(c
!=
'(')
{
PBinTreeNode
t
=
CrtBinTree();
t->data
=
c;
t->rChild
=
st.Pop();
t->lChild
=
st.Pop();
st.Push(t);
c
=
sc.Pop();
}
break;
}
default:
{
while
(sc.GetTop()
!=
'#'
&&
sc.GetTop()
!=
'(')
{
PBinTreeNode
t
=
CrtBinTree();
c
=
sc.Pop();
t->data
=
c;
t->rChild
=
st.Pop();
t->lChild
=
st.Pop();
st.Push(t);
}
if
(*ch
!=
'#')
sc.Push(*ch);
break;
}
}
}
if
(!sc.IsEmpty()
&&
*ch
!=
'#')
ch++;
}
pbt
=
st.Pop();
return
pbt;
}
void
GetVariable(PBinTree
pbt)
{
PBinTree
vpt
=
pbt;
if
((pbt->data
>=
'a'
&&
pbt->data
<=
'z')
||
(pbt->data
>=
'A'
&&
pbt->data
<=
'Z'))
{
printf
("请输入%c的值(1或0):\n",vpt->data);
scanf
("%c",&vpt->data);
getchar();
}
if
(vpt->lChild
!=
NULL)
GetVariable(vpt->lChild);
if
(vpt->rChild
!=
NULL)
GetVariable(vpt->rChild);
}
char
Caculate(PBinTree
pbt)
{
PBinTree
vpt
=
pbt;
if
(vpt
==
NULL)
{
printf("没有任何表达式可计算!");
return
FALSE;
}
if
(vpt->lChild
==
NULL)
//找到叶子结点
return
vpt->data;
if
(InOpt(vpt->data)
&&
Caculate(vpt->lChild)
&&
Caculate(vpt->rChild))
{
switch(vpt->data)
{
case
and:
if
(Caculate(vpt->lChild)
==
'1'
&&
Caculate(vpt->rChild)
==
'1')
vpt->data
=
'1';
else
vpt->data
=
'0';
break;
case
or:
if
(Caculate(vpt->lChild)
==
'0'
&&
Caculate(vpt->rChild)
==
'0')
vpt->data
=
'0';
else
vpt->data
=
'1';
break;
case
then:
if
(Caculate(vpt->lChild)
==
'1'
&&
Caculate(vpt->rChild)
==
'0')
vpt->data
=
'0';
else
vpt->data
=
'1';
break;
}
}
return
vpt->data;
}
void
main()
{
char*
exp
=
(char*)
malloc
(sizeof(char)*MAXEXP);
printf("****************************************************************************\n");
printf("**
逻辑表达式计算器1.10
**\n");
printf("**
Created
by
YangPengfei([email protected])
**\n");
printf("**
本计算器前只支持或(|)、与(&)、非(!)以及蕴涵(-)运算
**\n");
printf("****************************************************************************\n");
printf("\n");
printf("请输入需要计算的逻辑表达式(需要在表达式后加一个\"#\"号):\n");
gets(exp);
while
(!CheckSyntax(exp))
{
printf("表达式输入错误,请重新输入:\n");
gets(exp);
}
PBinTree
pbt
=
TransferTree(exp);
GetVariable(pbt);
printf
("这个逻辑表达式的值为:
%c
\n",Caculate(pbt));
}