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

作者&投稿:红潘 (若有异议请与网页底部的电邮联系)
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-free5软件安装,打开后,新建一个空白文件。注意:如果是软件工程的话,就要新建工程 第二步:打开构建-构建选项-选择编译,设置类别为c-language,在两个iso名称的选项框上打钩(如图),点击确定。第三步:开始编写程序,编写完成后,点击运行(快捷键为F5),然后看下面的构建表中是否...

用C语言编写程序(两个矩阵相加)
用C语言编写程序(两个矩阵相加)代码如下:\/ MatrixAddition.c 实现两个矩阵相加 \/ include<stdio.h> const int COLS=3;void printMatirx(int *pArray,int rows,int cols);void printMatirx2(int (*pArray)[COLS],int rows);int main(){ int A[3][4]={{15,10,9,12},{18,14,8,7},...

如何用C语言编写程序输入一个正整数n,编程序输出从2到n间的所有完数...
C语言实现如下:include<stdio.h> void main(){ int i,j,k,n;scanf("%d",&n); \/\/输入一个正整数n for(i=2;i<=n;i++){ k=0;for(j=1;j<=i-1;j++)if(i%j==0) k+=j;if(k==i) printf("%d\\n",i);\/\/判断i的所有真因子之和是否等于i,是则输出i。} } 注意:...

用c语言编写一程序实现如下功能:输入1、2、3、4、5、6、70(分别对应星 ...
{ \/\/判断月份是否为1或2y--;m += 12;} c = y \/ 100; y = y - c * 100; w = (c \/ 4) - 2 * c + (y + y \/ 4) + (13 * (m + 1) \/ 5) + d - 1; while (w < 0) w += 7; w %= 7; if (w == 0) printf ("星期日"); else printf ("星期%d", w); re...

用C或C++编写程序,要求: 输入命题公式,给出它的主合取范式和主析取范...
例如运行时,从键盘输入:p∧q∨r程序能根据这个输入求出主析取范式:(!p∧!q∧r)∨(!p∧q∧r)∨(p∧!q∧r)... 用C或C++编写程序,要求:输入命题公式,给出它的主合取范式和主析取范式。例如运行时,从键盘输入:p∧q∨r程序能根据这个输入求出主析取范式:(!p∧!q∧r) ∨(!p∧q∧r) ∨(p∧!q...

怎么用C语言编写一个程序,输入三个数值,然后输出其中最大者。
有很多方法,初学的话不必用数组,用三个变量比较清晰:include<stdio.h> int main(){ int a,b,c;printf("输入第一个数:");scanf("%d",&a);printf("输入第二个数:");scanf("%d",&b);printf("输入第三个数:");scanf("%d",&c);if(a<b) \/\/比较前两个数,如果第二个数大,就把...

如何用c语言编程序
Private Sub Command1_Click()For i = 4 To 1 Step -1 Print Tab(5 - i);For j = 1 To 2 * i - 1 Print "*";Next j Print Next i End Sub Private Sub Command1_Click()n = CInt(InputBox("N="))Dim a$(10)Max = 1 For i = 1 To n a(i) = InputBox("第" & ...

用C语言编写程序,输出ASCII码
用C语言编写程序,然后输出ASCII码可以将字符以整数形式输出即为输出ASCII码,具体编程的思路和方法如下:1.首先定义一个变量a作为需要输出ASCII码的变量,这里演示以字符变量a为例。2.接着使用scanf()函数接受从键盘输入的字符。3.然后使用printf()语句将字符a用整数的格式输出。4.最后运行程序,就可以...

用C语言编写下列程序?
include <stdio.h> int main(){ int a=1,b=2,c=3,t;t=a;a=b;b=t;t=b;b=c;c=t;printf("a=%d,b=%d,c=%d\\n",a,b,c);return 0;} 请点击输入图片描述 include <stdio.h> int main(){ int a=1234,t;for(t=0;a;a\/=10)t=t*10+a%10;printf("%d\\n",t);return ...

C语言文件的编译与执行的四个阶段并分别描述
开发C程序有四个步骤:编辑、编译、连接和运行。任何一个体系结构处理器上都可以使用C语言程序,只要该体系结构处理器有相应的C语言编译器和库,那么C源代码就可以编译并连接到目标二进制文件上运行。1、预处理:导入源程序并保存(C文件)。2、编译:将源程序转换为目标文件(Obj文件)。3、链接:将...

昆都仑区13824618966: 如何用C或C+编程序实现:从键盘任意输入一个命题公式,用真值表法判断其类型 -
温刷口炎: #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="";...

昆都仑区13824618966: C语言编程实现:从键盘中输入任意一个多位的整数(位数不确定),将其每一位之间都用$分隔符分割之后... -
温刷口炎: #include<stdio.h> void print(int a) { if(a<10) printf("%d",a); else { print(a/10); printf("$%d",a%10); } } void main() { int a; printf("请输入:"); scanf("%d",&a); print(a); }

昆都仑区13824618966: C语言中编程实现:从键盘键入一个大写字母,立即回显出其小写字母 -
温刷口炎: #include <stdio.h>#include <ctype.h> void main() {char buffer[] = "a 19-YEAR-OLD SAYS HE'S READY TO MAKE A DIFFERENCE.";int i = 0;scanf("%s", &buffer);while(buffer[i] != '\0'){if(isupper(buffer[i]))printf("%c", buffer[i] + 32);...

昆都仑区13824618966: 用C语言编程实现从键盘任意输入10个整数,统计其中奇数的个数,并计算这些奇数的和. -
温刷口炎:[答案] int main() { int temp; /* 用于临时保存输入的整数*/ int sum = 0; /*用于求和*/ int count = 0; int i; /* 输入这10个数*/ for (i = 0; i < 10; i++) { scanf("%d", &temp); if (temp % 2) { count++; sum...

昆都仑区13824618966: 如何用C语言实现从键盘任意输入n个数. -
温刷口炎: 手动管理内存 int max = 100; int* tmp = 0; int* buf = malloc(sizeof(int)*max); for (int i = 0; scanf("%d", buf+i); ++i) { if (i > max) // 如果buf已经满了, 那么内存扩大一倍 buf = realloc(buf, sizeof(int)*(max*=2) ); } 可以一直安全的输入到2的32次方除以8个数字, 如果内存够的话

昆都仑区13824618966: C语言编程实现求从键盘上任意输入的10个数中的最小的数 -
温刷口炎: #include <stdio.h> int main() { int i=0; int a[10]; int s; for(i=0;i<10;i++) scanf("%d",&a[i]); for(i=0;i<10;i++) { if(a[i]<a[i+1]) a[i+1]=a[i]; } printf("the result is:%d",a[9]); } 补充一下,这个程序仅限于输入整数

昆都仑区13824618966: c语言怎么从键盘输入数据,用程序怎么编 -
温刷口炎: 我用的是vc6,一般格式是: #include<iostream> using namespace std; int main() {cin>>a;return 0; }在cin>>的后面可以输入数据

昆都仑区13824618966: 用c++编写程序 实现从键盘输入一个三位数 在程序中将各个位的数字取出后独立输出 -
温刷口炎: #include <stdio.h> void main() {int i;int a,b,c;int x;printf("请输入一个三位数:\n");scanf("%d",&x);for (i=0;i<3;i++){a=x/1%10;b=x/10%10;c=x/100%10;}printf("个位--%d,十位--%d,百位--%d\n",a,b,c);system("pause"); }

昆都仑区13824618966: 从键盘上任意输入一个整数,利用c语言程序设计实现判断该数是否为质数,并输出判断结果 -
温刷口炎: #include "stdio.h" int main(int argc,char *argv[]){ int n,i; printf("Please enter a positive integer...\nn="); if(scanf("%d",&n)!=1 || n<1){ printf("Input error, exit...\n"); return 0; } printf("%d is ",n); if(n>2 && !(n&1) || n<2) printf("not a prime ...

昆都仑区13824618966: 编写C语言程序,实现从键盘输入a,b,c,3个整数,然后按从小到大的顺序输出 -
温刷口炎: 其实很简单啊...用IF语句,Scanf作为键盘接收A,B,C这3个数,T是用来比较大小的.#include<stdio.h> main() { int a,b,c,t; printf("请输入a,b,c这3个数:");scanf('%d%d%d",&a,&b,&c); printf("a=%d,b=%d,c=%d\n",a,b,c); if(a>b) /*...

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网