请教PREP两道逻辑思维题目题目万分

您的访问出错了(404错误)
很抱歉,您要访问的页面不存在。
1、请检查您输入的地址是否正确。
进行查找。
3、感谢您使用本站,3秒后自动跳转至网站首页命令行小项目(8)
命题逻辑应用系统
1 问题描述
&&&&&& 该系统要求实现命题逻辑中基本算法及其应用系统,包括真值表的计算、主析取和主合取范式的计算。通过此课题,熟练掌握命题公式的计算机表示、命题等价常见算法的实现,实现一个简单的命题逻辑应用系统。
2 需要实现的功能或函数
(1)计算显示任一个命题公式的真值表;
(2)计算命题公式的主析取范式;
(3)计算命题公式的主合取范式;
(4)判断两个命题公式是否等价(或蕴含);
(5)如有可能,试着利用命题公式的推理关系解决下列逻辑问题:
&一对夫妻带着他们的一个孩子在路上碰到一个朋友。朋友问孩子:“你是男孩还是女孩?”朋友没听清孩子的回答。孩子的父母中某一个说,我孩子回答的是“我是男孩”,另一个接着说:“这孩子撒谎,她是女孩。”这家人中男性从不说谎,而女性从来不连续说两句真话,也不连续说两句假话。试问这小孩性别,以及谁是其父亲,谁是其母亲?
(6)有个简单直观的界面,以便显示使用上述函数功能。
#include &cstdio&
#include &cstring&
#include &string&
#include &algorithm&
#include &iostream&
#include &stack&
#include &map&
string epr, epr1, epr2;
string pdnf, //pdnf析取, pcnf合取
map &char, bool& //哈希表
stack &char&
//用于得到后缀表达式
stack &int&
//用于计算表达式的真值
int val[26];
bool CanIn(char fir, char sec) //能否入栈
switch(fir)
//设置栈内,栈外元素优先级
case '#': i = 0;
case '(': i = 1;
case '~': i = 3;
case '&': i = 5;
case '|': i = 7;
case '&': i = 9;
case '!': i = 11;
case ')': i = 12;
switch(sec)
case '#': o = 0;
case '(': o = 12;
case '~': o = 2;
case '&': o = 4;
case '|': o = 6;
case '&': o = 8;
case '!': o = 10;
case ')': o = 1;
void to_suffix()
//中缀表达式转后缀表达式
while(st.size())
string tmp = &&;
//中间变量,用来存后缀表达式
st.push('#');
//'#'为栈底标记
int len = epr.length();
for(int i = 0; i & i++)
if(mp[epr[i]])
//如果当前是字母,则直接加到后缀表达式中
tmp = tmp + epr[i];
if(CanIn(st.top(), epr[i])) //拿当前的字符和栈顶元素相比,若栈顶元素优先级小于栈外优先级,则入栈
st.push(epr[i]);
else if(epr[i] == ')')
//处理括号嵌套
while(st.top() != '(')
tmp = tmp + st.top();
//如果栈顶元素优先级大于栈外元素优先级,则将元素出栈,直到栈顶元素优先级小于栈外优先级
tmp = tmp + st.top();
}while(!CanIn(st.top(), epr[i]));
st.push(epr[i]);
while(st.top() != '#')
//把剩余元素出栈
tmp = tmp + st.top();
//此时tmp为得到的后缀表达式,赋值给epr
//cout && &epr = & && epr &&
void Or(int a, int b)
res = res & 1 ? 1 :
dst.push(res);
void And(int a, int b)
dst.push(res);
void Not()
int a = dst.top();
dst.pop();
res = a == 1 ? 0 : 1;
dst.push(res);
void If(int a, int b)
//条件运算
res = (b == 1 && a == 0) ? 0 : 1;
dst.push(res);
void Iif(int a, int b)
//双条件运算
res = (a == b) ? 1 : 0;
dst.push(res);
void cal()
//计算真值
while(dst.size())
//清空栈dst
dst.pop();
int len = epr.length();
for(int i = 0; i & i++)
if(mp[epr[i]])
for(int j = 0; j & 26; j++)
if(epr[i] == (j + 'A'))
dst.push(val[j]);
if(epr[i] != '!')
a = dst.top();
dst.pop();
b = dst.top();
dst.pop();
switch(epr[i])
case '|':
case '&':
And(a, b);
case '!':
case '~':
Iif(a, b);
case '&':
void Input1()
//输入一个表达式
printf(&请输入两个真值表达式: (! 否定), (| 析取), (& 合取), (& 条件), (~ 双条件)\n&);
void preprea() //处理表达式
mp.clear();
int len = epr.length();
for(int i = 0; i & i++)
if(epr[i] &= 'A' && epr[i] &= 'Z')
if(mp[epr[i]] == false)
mp[epr[i]] =
//记录那些字母在表达式中
//num表示表达式中有几种字母
void Input2()
//输入两个表达式
epr1 = &&;
epr2 = &&;
printf(&请输入两个真值表达式: (! 否定), (| 析取), (& 合取), (& 条件), (~ 双条件)\n&);
printf(&请输入第一个\n&);
cin && epr1;
printf(&请输入第二个\n&);
cin && epr2;
//idx是字母的标号,cnt表示已经处理的字母的个数,p标记是否输出真值表
void DFS(int idx, int cnt, int p)
//深度优先搜索得到真值表和主范式
if(cnt == num)
if(res == 1)
pdnf += &(&;
int c = 0;
for(int i = 0; i & 26; i++)
char t[1];
t[0] = i + 'A';
string ch(t);
if(mp[ch[0]])
if(val[i] == 1)
pdnf += &!& +
if(c != num)
pdnf += &&&;
pdnf += &)&;
pdnf += &|&;
pcnf += &(&;
int c = 0; //记录字母个数
for(int i = 0; i & 26; i++)
char t[1];
t[0] = i + 'A';
string ch(t);
if(mp[ch[0]]) //判断字母是否存在
if(val[i] == 0)
pcnf += &!& +
if(c != num)
pcnf += &|&;
pcnf += &)&;
pcnf += &&&;
for(int i = 0; i & 26; i++)
if(mp[i + 'A'])
printf(&%d\t&, val[i]);
printf(&%d\n&, res);
int idxx = 0;
for(int i = i & 26; i++)
if(mp[i + 'A'])
val[idxx] = 1;
DFS(idxx + 1, cnt + 1, p);
val[idxx] = 0;
DFS(idxx + 1, cnt + 1, p);
void Print(bool p)
//输出真值表和主范式, 若p==0,则输出真值表
for(int i = 0; i & 26; i++)
if(mp[i + 'A'])
printf(&%c\t&, i + 'A');
printf(&res\n&);
int idx = 0;
//idx用来记录0 - 26分别于A - Z对应
for(int i = 0; i & 26; i++)
if(mp[i + 'A'])
val[idx] = 1;
DFS(idx + 1, 1, p);
val[idx] = 0;
DFS(idx + 1, 1, p);
void output_table()
//输出真值表接口函数
preprea();
to_suffix();
printf(&真值表为:\n&);
void output_pcnf()
//输出主合取范式接口函数
preprea();
to_suffix();
pcnf = &&; //初始化
int len = pcnf.length();
if(len == 0)
printf(&永真式\n&);
pcnf.erase(pcnf.length() - 1);
cout && &主合取范式:& && pcnf && endl &&
void output_pdnf()
//输出主析取范式接口函数
preprea();
to_suffix();
pdnf = &&;
int len = pdnf.length();
if(len == 0)
printf(&永假式\n&);
pdnf.erase(pdnf.length() - 1);
cout && &主析取范式:& && pdnf && endl &&
//判断两个表达式的关系
//原理: 命题A与命题B若等价则(A&-&B)永真,又永真式无主合取范式
命题A与命题B若存在蕴含关系(如A蕴含B)则(A-&B)永真,又永真式无主合取范式
void judge_two()
bool flag1 = false, flag2 =
epr = &(& + epr1 + &)& + &~& + &(& + epr2 + &)&;
preprea();
to_suffix();
pcnf = &&;
int len = pcnf.length();
if(len == 0)
printf(&\n两命题公式等价\n&);
if(!flag1)
epr = &(& + epr1 + &)& + &&& + &(& + epr2 + &)&;
preprea();
to_suffix();
pcnf = &&;
len = pcnf.length();
if(len == 0)
cout && endl && epr1 &&
printf(&蕴含\n&);
cout && epr2 &&
epr = &(& + epr2 + &)& + &&& + &(& + epr1 + &)&;
preprea();
to_suffix();
pcnf = &&;
len = pcnf.length();
if(len == 0)
cout && endl && epr2 &&
printf(&蕴含\n&);
cout && epr1 &&
if(!flag1 && !flag2)
printf(&两命题公式既不等价又不存在蕴含关系\n&);
void solve() //解决逻辑问题
printf(&问题描述:\n&);
printf(&一对夫妻带着他们的一个孩子在路上碰到一个朋友.\n&);
printf(&朋友问孩子:\&你是男孩还是女孩?\&朋友没听清孩子的回答.\n&);
printf(&孩子父母中某一个说,我孩子回答的是\&我是男孩\&,另一个接着说:\&这孩子撒谎,她是女孩.\&\n&);
printf(&这家人中男性从不说谎,而女性从来不连续说两句真话,也不连续说两句假话.\n&);
printf(&试问这小孩性别,以及谁是其父亲,谁是其母亲?\n\n&);
printf(&解决如下, 设:\n\n&);
printf(&P表示命题:第一个说话的是父亲\n&);
printf(&Q表示命题:第一个人说的话为真\n&);
printf(&R表示命题:第二个人说的第一句为真\n&);
printf(&S表示命题:第二个人说的第二句为真\n&);
printf(&根据已知矛盾信息,我们可以得到以下几种矛盾情况\n&);
printf(&1. P&!Q
(即第一个说话的是父亲,父亲说谎)\n&);
printf(&2. P&Q
(即第一个说话的是父亲,父亲没说谎,此时若母亲两句话都真或都假\n&);
则与已知矛盾,若一真一假,则均与父亲所说的矛盾)\n&);
printf(&3. !P&(!(R&S)) (即第二个说话的是父亲,两句中有假话)\n&);
printf(&4. !P&Q
(即第一个说话的是母亲,且母亲说的是真的,则因为父亲不说假话)\n&);
,因此父亲的话为真与母亲的话矛盾\n&);
printf(&得到矛盾的四种情况,把他们或在一起得到表达式:\n&);
printf(&(P&!Q)|(P&Q)|(!P&(!(R&S)))|(!P&Q)\n&);
printf(&求解该表达式的真值表:\n&);
epr = &(P&!Q)|(P&Q)|(!P&(!(R&S)))|(!P&Q)&;
preprea();
to_suffix();
printf(&\n从真值表可以看出只有0 0 1 1的时候没有矛盾\n&);
printf(&即母亲先说且说谎,父亲后说没说谎,于是可得到答案:\n\n&);
printf(&第一个说话的是母亲\n&);
printf(&第二个说话的是父亲\n&);
printf(&孩子是女孩\n&);
void Menu() //菜单
printf(&\n欢饮使用\n&);
printf(&请选择操作:\n&);
printf(&1 - 输出真值表\n&);
printf(&2 - 输出主合取范式\n&);
printf(&3 - 输出主析取范式\n&);
printf(&4 - 比较两命题公式是否等价或蕴含\n&);
printf(&5 - 解决题目中的逻辑问题\n&);
printf(&6 - 退出\n&);
int main()
while(true)
char tp[2]; //选择操作
scanf(&%s&, tp);
if(tp[0] & '6' || tp[0] & '1')
printf(&错误输入\n&);
if(tp[0] == '1')
output_table();
else if(tp[0] == '2')
output_pcnf();
else if(tp[0] == '3')
output_pdnf();
else if(tp[0] == '4')
judge_two();
else if(tp[0] == '5')
else if(tp[0] == '6')
printf(&谢谢使用\n&);
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:555916次
积分:13238
积分:13238
排名:第970名
原创:795篇
评论:119条
文章:124篇
阅读:50985
文章:10篇
阅读:5354
文章:45篇
阅读:22723求提供一些逻辑思考类的题目.
求提供一些逻辑思考类的题目.要有内容的,像爱因斯坦的谁养鱼,能想上半个小时的.越多越好.
1.有一个大家庭,父母共养有7个子女,从大到小分别是ABCDEFG,这7个孩子的情况是这样的:(1)A有3个妹妹;(2)B有1个哥哥;(3)C是老三,她有2个妹妹;(4)E有2个弟弟.从以上情况可以得出,这7个孩子的性别分别是( ).2.某宿舍住着甲、乙、丙三个人,一个出生在长沙市,一个出生在武汉市,一个出生在重庆市.他们所学的专业,一个是会计,一个是营销,一个是中文.已知:①乙不是学中文的;②乙不出生在重庆市;③丙不出生在长沙市;④学习会计的不出生在武汉市;⑤学习中文的出生在长沙市.根据上述条件,可推出甲所学的专业是:A.会计\x05\x05\x05B.营销\x05\x05\x05C.中文\x05\x05\x05D.无法推断3.在某政府机关的公务员中,理科毕业的多于文科毕业的,女性多于男性.如果上述断定是真的,以下哪项关于该机关公务员的断定也一定是真的?I.文科毕业的女性多于文科毕业的男性II.理科毕业的男性多于文科毕业的男性III.理科毕业的女性多于文科毕业的男性A.只有I和Ⅱ\x05\x05B.只有Ⅲ\x05\x05\x05C.只有Ⅱ和Ⅲ\x05\x05D.I、Ⅱ和Ⅲ4.甲、乙和丙,一位是山东人,一位是河南人,一位是湖北人.现在只知道:丙比湖北人年龄大,甲和河南人不同岁,河南人比乙年龄小.由此可以推知:A.甲不是湖北人B.河南人比甲年龄小C.河南人比山东人年龄大D.湖北人年龄最小5.几位同学对物理竞赛的名次进行猜测.小钟说“小华第三,小任第五.”小华说:“小闽第五,小官第四.”小任说:“小钟第一,小闽第四.”小闽说:“小任第一,小华第二.”小官说:“小钟第三,小闽第四.”已知本次竞赛没有并列名次,并且每个名次都有人猜对.那么,具体名次应该是()6.有红、蓝、黄、白、紫五种颜色的皮球,分别装在五个盒子里.甲、乙、丙、丁、戊五人猜测盒子里皮球的颜色.甲:第二盒是紫的,第三盒是黄的.乙:第二盒是蓝的,第四盒是红的.丙:第一盒是红的,第五盒是白的.丁:第三盒是蓝的,第四盒是白的.戊:第二盒是黄的,第五盒是紫的.猜完之后打开盒子发现,每人都只猜对了一种,并且每盒都有一个人猜对.由此可以推断:6.某机关田径运动会有3个短跑项目,分别是60米、100米和200米.老张、老王和老李分别参加了其中的一种,而且三人参赛的项目还不一样.小张、小王和小李作了以下猜测:小张:老张参加了60米,老王参加了100米.小王:老李没参加100米,老王参加了60米.小李:老张没参加60米,老王参加了200米.如果他们的猜测都对了一半,则以下哪项为真?8.甲乙丙丁四人的车分别为白色、银色、蓝色和红色.在问到他们各自车的颜色时,甲说:“乙的车不是白色.”乙说:“丙的车是红色的.”丙说:“丁的车不是蓝色的.”丁说:“甲、乙、丙三人中有一个人的车是红色的,而且只有这个人说的是实话.”如果丁说的是实话,那么以下说法正确的是:A.甲的车是白色的,乙的车是银色的B.乙的车是蓝色的,丙的车是红色的C.丙的车是白色的,丁的车是蓝色的D.丁的车是银色的,甲的车是红色的9.甲、乙、丙、丁、戊、已是一个家族的兄弟姐妹,已知:甲是男孩,有3个姐姐;乙有一个哥哥和一个弟弟;丙是女孩,有一个姐姐和一个妹妹;丁的年龄在所有人当中是最大的;戊是女孩,但是她没有妹妹;已既没有弟弟也没有妹妹.从上述叙述中,可以推出以下哪项结论?A.已是女的且年龄最小B.丁是女的C.六个兄弟姐妹中女孩的数量多于男孩的数量D.甲在六个兄弟姐妹中排行第三
与《求提供一些逻辑思考类的题目.》相关的作业问题
我认为都与第一题一样,考虑为三角形.比如第三题,有一边是固定的,那么另三边相加不能比固定边短,所以最短应大于固定边的2倍比如第二题,有2边是固定的,那么另2边相加不能比已知2边之差短,所以最短应大于固定最大边的2倍 再问: 能不能说详细一点。 再答: 我用举例好说点 3. 三边定长:A = 10,B+C+D=? 假设B
早上好!老刘和警察局长在路边说话,这时来一小孩对局长说,他的爸爸和他的爸爸打起来了.是怎么回事?那两个爸爸指的是谁?小孩是谁的儿子?答案:一个是小孩的爸爸,一个是局长的爸爸,警察局长是小孩的妈妈
1、《我骄傲,我是炎黄子孙》2、《赞我中华》3、《祖国在我心》4、《青春中国》5、《我赞中华魂》希望能为你提供一些参考!
1.单调递减区间为(—5,5)F'(x)=3x^2+a
那一刻,我明白了感动 微风拂过杨柳,太阳睁开惺忪的睡眼,一天的生活马上就要开始了.今天,我甚是高兴,因为我们要做一件有意义的事情,那就是给我们班的张燕捐款,告诉她,世界上还有很多人在爱着她. 推开班级的大门,就看见了讲台上一个画满爱心的募捐箱,黑板上用艺术字写了几个大字:只要人人都献出一点爱,世界就会变的更美好.还给教
这是一元次方程与一元二次函数相结合的题,解此类题的关键就是按要求列方程就可以了!第一题的等量关系为:原数x(1+增长率)的n次方=现在数   n:表示连续月数可年数设每月的增长百分率为x,可得:160(1+x)^2=2501+x=5/4x=1/4 即:x=25%第二题的等量关系为:销量x(售价-进价)=总利润设售价应为
分析:(1)根据所给解析式可知函数过原点,并过点(60,5),由这两点即可得出答案.(2)乙慢跑的速度即是乙慢跑所行的路程s(千米)关于时间t(分钟)的函数解析式的斜率;(3)甲修车后行驶路程是3km,所用时间是20min,即可求出速度;(4)甲乙相遇,体现在(1)中的图形即是它们的交点,即求出交点得出答案.(1)所画
信/文书:签名=节目单:演员阵容签名是文书的一个作者演员是节目的表演者.
1.一般加速度问题例题1:物体沿直线做匀变速直线运动,已知在第3s内的位移是4.5m,在第10s内的位移是11.5m,求物体运动的初速度和加速度.方向一:利用基本公式求S=V0t+at2/2有第三秒内位移4.5=(3 V0+ a*9/2)—(2 V0+ a*4/2)= V0—a*5/2,又第十秒内位移11.5=(10
1、某厂办公室丢失空调遥控器一个.据厂办王秘书反映,有A、B、C、D、E五个调皮的小孩在丢失遥控器的当天到过办公室.于是把他们找来,分别进行询问.A说:它(指遥控器)是C拿的.B 说:它,要不是D拿的,就一定是C拿的.C说:它可能是A拿的,也可能是B拿的.D说:它肯定不是E拿的.E说:它不是B拿的,也不是A拿的.事后证
亲~~0708prep逻辑纯题目版全上传了~~好好看吧!
直接去对数符号就行了,但要注意两点:一是增减性,二是定义域因为以10为底的对数函数是增函数所以由原不等式得2x+1>x-1且x-1>0所以x>1所以原不等式的解集为(1,+无穷大)
1.矩阵A的行列式=他所有特征值的乘积=(-1)*1*2=-22.A的行列式不等于0,他是满秩的,秩=33.B的特征值=A的特征值平方+2A的特征值-1;所以分别为-2,2,74.B相似的对角矩阵是以他的特征值为对角线元素的,即为:-2,0,0 0, 2,0 0, 0,7或者 7, 0,0-2,0,0 0, 2,0对角
集合相等的问题需注意2点:1、元素相等,这是列出求未知量的方程组;如这题a=a,1=a^2,b=ab或者a=a,1=ab,b=a^2.解得a=1,b是任意实数;或者a=-1,b=0;或者a=b=1;2、元素互异,这是排除不合题意的解;如这题a=1,b是任意实数时A中元素不互异了,舍去;a=b=1时同样;只有=-1,b=
解题思路: 多读多记多积累,准确理解作文的主题,把握中心设计好开篇结尾。解题过程: 这是我的世界 一花一世界,一草一寸天。一朵花,平凡至极,却因生长而拥有了一个世界;一棵小草,微不足道,却能给世间增添无限生机。我亦如此,渺小,却因存在而拥有了我的世界,这就是我的世界。   我的世界是一个爱与欢笑的天堂。在妈妈温暖的怀抱
换元法.令t=x+1.f(t)=3(x+1)-1=3t-1f(x)=3x-1记住对应法则f作用的括号里的整体取值范围相同.希望可以帮到你.
本题可用导数做,y“=1-8/x3,令y’
一个日本人做在石头上和杀死四个人,猜一字 再答: 答:照 再答: 一个日本人拿着刀做在石头上和杀死四个人,猜一字ps刚发错了
①而且长得一样快.农夫将8头牛赶到2公顷的牧场,牛5天吃完了草;如果农夫将8头牛赶到4公顷的牧场,牛15天可吃完草.问:若农夫将这8头牛赶到6公顷的牧场,这块牧场够这些牛吃几天?②17头牛吃28公亩的草,84天可以吃完;22头牛同样牧场33公亩的草54天可吃完,几头牛吃同样牧场40公亩的草,24天可吃完?(假设每公亩牧

我要回帖

更多关于 考验逻辑思维的题目 的文章

 

随机推荐