c语言真值表
❶ 如何用c语言做出“构造命题公式的真值表”的程序~
有3种
1.
#include <stdio.h>
#include <string.h>
int main(void)
{
int nNum1,nNum2;
printf("请输入第一个整数:");
scanf("%d",&nNum1);
printf("\n请输入第二个整数:\n");
scanf("%d",&nNum2);
printf("\n输入的两个数为:%d,%d,其大小关系为:",nNum1,nNum2)
if(nNum1 < nNum2){
printf("%d < %d",nNum1,nNum2);
}else
printf("%d > %d",nNum1,nNum2);
return 0;
}
2.
#include <stdio.h>
#include <string.h>
int main(void)
{
int i,nNum,nSum=0;
int a[10]={0};
for(i=0;i<10;i++){
printf("请输入第%d个整数:\n",i+1);
scanf("%d",&a[i]);
}
for(i=0;i<10;i++){
if(a[i]>0){
nSum+=a[i];
nNum++;
}
}
printf("输入的正整数有%d个,其平均值为:%f",nNum,(float)nSum/nNum);
return 0;
}
3.
#include <stdio.h>
#include <string.h>
int main(void)
{
int a[3],nMin,nMax;
int i;
for(i=0;i<3;i++){
printf("请输入第%d个整数:\n",i+1);
scanf("%d",&a[i]);
}
nMin=nMax=a[0];
if(nMin<a[1]){
nMin=a[1];
}
if(nMin<a[2]){
nMin=a[2];
}
if(nMax>a[1]){
nMax=a[1];
}
if(nMax>a[2]){
nMax=a[2];
}
printf("输入的三个数为:%d,%d,%d,最大值为:%d,最小值为:%d",a[0],a[1],a[2],nMax,nMin);
return 0;
}
追分哦!!!!!!!!!!!
❷ 如何用c语言实现真值表
取一个数字的个位,可以分为取整数的个位,和浮点数的个位两种情况:内
1)取一个整数的个位,容可以直接求余
例如 变量 int num=127;
num%10 就可以得到个位的7
2)取浮点数的个位
因为%是不能对浮点数直接运算的,因此需要强制取整之后执行
例如变量 double num=27.83;
((int)num)%10 就可以得到个位的7
❸ 如何用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
这样行吗,你画一下表格吧
*/
❹ 数据结构 c语言 重言式判别 中的真值表是怎样的
数据结构貌似我的书没这个概念,这个是离散数学的,楼主不说概念我都忘记了,因版为不是具体权的题目,也不好说,但是你可以这样:设置标志位,f1=0,f2=0, 假设有3变量a,b,c(也就是变元)你用三从循环如果当前a,b,c取一特定值 时,a,b,c为真f1=1(表示遇见真),否则f2=1(表达式未假),循环结束后,判断:如果f1为真且f2为真那就是既不是重言式也不是矛盾式,如果f1为真f2为假那就是重言式,f1为假f2为真那就是矛盾式,算法可以优化的,考虑到文字不好描述,我没优化算法。。。
❺ 怎么用C语言写一个程序,判断真值表的
main()
{
printf("p≠q")
}
哈哈不懂。
❻ 在C语言中 怎么看逻辑真值表
逻辑关系:L=Aand{[(notb)and(notc)]or[Band(notC)]or[BandC]}----------------------------------------①②③真值表如下:ABCL注释---------------------------------------0XX0(X表示专0或1皆可)属1001①1101②10101111③
❼ 任意输入一个逻辑表达式,输出它的真值表,要用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));
}
❽ 利用c语言测试逻辑门电路的真值表
我实复际上没有听懂你制问题的意思。
你说你要用单片机输出电信号,并采集,判断逻辑功能是否正确。
你可以设计两个按键,对应单片机输出的电信号。(默认状态下,让单片机输出为低电平;按下按键后则输出高电平)然后将单片机对应端口接到你要测量的与非门上。在将与非门的输出端口接到单片机的另一个端口。
扫描这个端口的电平。就可以得出一个真值表了。
不知道我所说的方法能不能帮到你。
❾ c语言输入公示求真值表。不要求太复杂。1个或者2个变元就可以。而且不用带括号。默认从左到右的顺序
非常复杂的项目,看来一定得是非常的高手下功夫才能完成,或者你分开几个步骤问人可能回答的人会更加的踊跃
❿ 真值表的如何用C语言表示
呵呵,简单啊,你自定义一些符号为与 、或等,在菜单写明就行代表什么就行啊