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語言表示
呵呵,簡單啊,你自定義一些符號為與 、或等,在菜單寫明就行代表什麼就行啊