如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其类型

供稿:hz-xin.com     日期:2025-01-13
C或C++编程:任意输入命题公式,按照公式推理求解主合取范式(不能使用真值表)。

扫描命题公式,找出->符号,转化成┐∪形式
扫描┐符号,若后面一位是(就┐内移各项取反∪∩颠倒
扫描┐符号,若 后面1位是┐符号就消去2个┐符号
扫描∪符号,若前面1位是)或后面1位是(,则使用∪对∩的分配律
等幂律\交换律得到合取范式
扫描相邻()内的项,找出缺失项,修改公式为 (原括号内内容∪缺失项)∩(原括号内内容∪┐缺失项)
扫描相邻()内各项,前一位为┐的记1,其他为0
得到的数个数字转化为10进制输出为∏(, , , ,)

有3种
1.
#include <stdio.h>
#include <string.h>

int main(void)
{
int nNum1,nNum2;

printf("请输入第一个整数:");
scanf("%d",&nNum1);
printf("
请输入第二个整数:
");
scanf("%d",&nNum2);
printf("
输入的两个数为:%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个整数:
",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个整数:
",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;
}
追分哦!!!!!!!!!!!

#include<iostream>
#include<string>
using namespace std;
string calcValue(string value1);
string calcValueNop(string value1);
string caclAnd(string x,string y);
string caclOr(string x,string y);
string caclNot(string x);
int main()
{ string in,varList="";//="!a+b^c"
cout<<"请输入命题公式: 注意: !,^,+,(,),字母为合法,不要有数字、空格,括号也要匹配!"<<endl;
cin>>in;
cout<<"输入命题公式"<<in<<"的真值表如下:"<<endl;
int length=in.length();
for(int i=0;i<length;i++)
{
char code=in[i];
if( ((code>=97)&&(code<123)||((code>=65))&&(code<81))&&varList.find(code,0)==-1 )
varList+=code;
}
int n=varList.length();
for(i=0;i<n;i++)
cout<<varList[i]<<"\t";
cout<<in<<"\t\t"<<"值"<<endl;

int m=1;
int flag;
char *trow=new char[n];
for(i=0;i<n;i++){m*=2;trow[i]='0';}
for(i=0;i<m;i++)
{
for(int j=0;j<n;j++)
cout<<trow[j]<<"\t";
string value1=in;
for(j=0;j<n;j++)
{
char x=varList[j];
for(int k=0;k<length;k++)
if(value1[k]==x)
value1[k]=trow[j];
}
cout<<value1<<"\t\t"<<calcValue(value1)<<endl;
flag=1;
for(j=n-1;j>-1;j--)
{ int temp;
temp=int(trow[j])-48;
flag=flag+temp;
if(flag==2)
{
trow[j]='0';
flag=1;
}
else
{
trow[j]='1';
flag=0;
break;
}
}
}

delete trow;
return 0;
}

string calcValue(string value1)
{
int nlp=value1.find('(',0);
int nrp=value1.length();
string x="",v="";
int i=nlp+1;
while(nlp>=0)
{
x=value1.substr(i,1);
if(x=="(")
{
nlp=i;
i++;
}
else
{
if(x==")")
{
nrp=i;
v=calcValueNop(value1.substr(nlp+1,nrp-nlp-1));
value1=(nlp>0?value1.substr(0,nlp):"")+v+((nrp+1)<=value1.length()?value1.substr(nrp+1):"");
nlp=value1.find('(',0);
i=nlp+1;
}
else
{
i=i+1;
}
}
if(i>=value1.length())
{
nlp=value1.find('(',0);
i=nlp+1;
}
}
return calcValueNop(value1);
}

string calcValueNop(string value1)
{
int nnot=value1.find('!',0);
while(nnot>=0)
{
value1=(nnot>0?value1.substr(0,nnot):"")+caclNot(value1.substr(nnot+1,1))+((nnot+2)<=value1.length()?value1.substr(nnot+2):"");
nnot=value1.find('!',0);
}
int nand=value1.find('^',0);
while (nand>0)
{
value1=((nand-1)>0?value1.substr(0,nand-1):"")+caclAnd(value1.substr(nand-1,1),value1.substr(nand+1,1))+((nand+2)<=value1.length()?value1.substr(nand+2):"");
nand=value1.find('^',0);
}
int nOr=value1.find('+',0);
while (nOr>0)
{
value1=((nOr-1)>0?value1.substr(0,nOr-1):"")+
caclOr(value1.substr(nOr-1,1),value1.substr(nOr+1,1))+
((nOr+2)<=value1.length()?value1.substr(nOr+2):"");
nOr=value1.find('+',0);
}
return value1;
}

string caclAnd(string x,string y)
{
if ((x=="1") && (y=="1"))
{
return "1";
}
else
{
return "0";
}

}

string caclOr(string x,string y)
{
if ((x=="0") && (y=="0"))
{
return "0";
}
else
{
return "1";
}
}
string caclNot(string x)
{ if (x=="1")
{
return "0";
}
else
{
return "1";
}
}

如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其...
string calcValueNop(string value1);string caclAnd(string x,string y);string caclOr(string x,string y);string caclNot(string x);int main(){string in,varList="";\/\/="!a+b^c"cout<<"请输入命题公式: 注意: !,^,+,(,),字母为合法,不要有数字、空格,括号也要匹配!"<<e...

C语言:编写程序从键盘输入不定数量的正整数?
不考虑数据的存储,直接循环累计即可。想要数据存储:方法一:定义一个非常大的数组,循环输入并检测输入值,累计求平均。方法二:动态数组,根据有效输入,实时扩展数组地址长度。方法三:把每个数字创建成结构体,构建链表,实现自由扩展和删除。下面我的代码是用方法二写的:include <stdio.h> include <...

编写一个c程序,从键盘输入一个长度为10的实型一维数组,然后顺序输出...
首先定义一个长度为10的实型一维数组,然后使用循环结构从键盘读取十个实数值。接着遍历数组,比较元素大小,记录下最大值及其位置。最后输出数组所有元素,并显示最大值及其下标。下面是具体实现代码:include"stdio.h"define N 10 void main(){ double arr[N];int i, k;double max;printf("请输入...

C语言编程:从键盘上输入任意整数,逆序输出其各位数字,同时求出其位数及...
循环执行1、2步,加入输出(完成要求:逆序)、累和(完成要求:求和,实现:sum+=x)直至分解出最后一位(n\/10 = 0)。

用C语言编写一个程序,从键盘上输入一个小写字母,将其本身及对应的大写字...
prinft("大写字母是:%c\\n",ch);} else(printf("请输入大写字母");)示例三:include <stdio.h> main(){ char c; \/\/声明变量 scanf("%c",&c); \/\/键盘上取值 printf("%c %c",c,ch-'a'+'A');\/\/本身和大写输出 } ...

用c语言办我编写一个程序。实现从键盘输入10个整数统计非负数并计算非...
include <stdio.h> main(){ int a[10],i,sum=0,count=0;for(i=0;i<10;i++){ scanf("%d",&a[i]);if(a[i]>=0){ sum=sum+a[i];count++;} } printf("total %d feifushu.\\nThe sum of them is %d",count,sum);getch();} ...

C语言编程:从键盘任意输入三个数,编写求其最大值、最小值的函数,用指针...
程序如下:#include<stdio.h>#define MAXSIZE 10main(){int a[MAXSIZE];int k;printf("please inter ten number:");for(k=0;k<MAXSIZE;k++){ scanf("%d",&a[k]);} Fun(a);for(k=0;k<MAXSIZE;k++)printf("%d,",a[k]);} void Fun(int a[]){ int i;int temp;int Max...

用c语言编写:从键盘输入一个数,判断是否都能被3整除
1、打开软件,找到文件,新建项目,点击项目新建一个文件。2、会弹出这样的界面,选择为win32控制台程序,输入名称,然后点击确定。3、继续点击下一步 4、在源文件右键,添加,新建项目;然后跳出窗口选择C++文件(.cpp),最后点击添加。5、写一下代码 6、运行结果如下:...

编写一个汇编程序,要求将用键盘输入的小写字母转换成大写字母并显示出来...
1、打开软件Visual C++6.0,新建一个C源程序,书写C语言程序。2、首先定义两个字符型变量,代码:char c1,c2;从键盘中输入一个大写字母,代码:c1=getchar();。3、大写字母与小写字母的ASCII值相差32。代码:c2=c1+32;。将大写字母转化成小写字母。4、输出小写字母。使用putchar()函数,可以输出...

用C语言编写一个程序: 从键盘输入 10 个整数,求出其中的最大值...
程序:include<stdio.h> int main(){ int arr[10] = {0};int i = 0;int max = 0;int min = 0;printf("请输入10个整数:");for (i = 0; i < sizeof(arr)\/ sizeof(arr[0]); i++){ scanf("%d",&arr[i]);} max = arr[0];for (i = 0; i < sizeof(arr) \/ ...