C语言与离散数学的结合--逻辑推理
利用离散数学知识和C语言相关知识
此处有两种类型
1、
根据下面的命题,试用逻辑推理方法确定谁是作案者,写出推理过程。
(1)营业员A或B偷了手表;
(2)若A作案,则作案不在营业时间;
(3)若B提供的证据正确,则货柜末上锁;
(4)若B提供的证据不正确,则作案发生在营业时间;
(5)货柜上了锁。
主要分为三步:
第一步:命题符号化:
A表示A偷的,B表示B偷的,C表示作案不在营业时间,D表示B提供的证据正确,E:表示货柜未上锁
第二步:
用连接词连接 A V B ∧ (┓AVC)∧(┓B V E)∧(┓B V ┓C) ∧┓E
第三步:
最后再用C语言中的连接符号接连 或 是||,且是&&或者+
最后编写成程序。
程序代码:
#include<stdio.h>
int main(){int A,B,C,D,E;//A表示A偷的,B表示B偷的,C表示作案不在营业时间,D表示B提供的证据正确,E:表示货柜未上锁 for(A=0;A<2;A++)for(B=0;B<2;B++)for(C=0;C<2;C++)for(D=0;D<2;D++)for(E=0;E<2;E++){if(5==(A||B)+(!A||C)+(!D||E)+(D||!C)+(!E)){if(A==1){printf("A");
}if(B==1){printf("B");
}}
}return 0;
}
基础C语言解释:|| 表示逻辑或
if 中的条件5==(A||B)+(!A||C)+(!D||E)+(D||!C)+(!E)
表示上述五个条件需要同时满足,其实这五个条件可以用连接词&&实现
即(A||B)&&(!A||C)&&(!D||E)&&(D||!C)&&(!E)
运行结果截图:
2、
5位运动员参加了10米台跳水比赛,有人让他们预测比赛结果
A选手说:B第二,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
比赛结束后,每位选手都说对了一半,请编程确定比赛的名次。
原理:
1表示真,0表示假;
离散数学命题符号化后即可利用C程序编写运行
每位运动员都有五种排名可能,
由已知得每位选手各答对一半,每个人说的两个条件有一个成立,两个条件相加之和为1
即可用循环+判断实现,又需要保证每位选手排名只有一种情况
程序代码:
#include<stdio.h>
int main(){int A,B,C,D,E;for(A=1;A<6;A++)for(B=1;B<6;B++)for(C=1;C<6;C++)for(D=1;D<6;D++)for(E=1;E<6;E++){if(((A==3)+(B==2))==1&&((B==2)+(E==4))==1&&((C==1)+(D==2))==1&&((C==5)+(D==3))==1&&((E==4)+(A==1))==1)//每位选手都说对了一半,1为真,0为假,两者相加为1 {if ((A != B) && (A != C) && (A != D) && (A != E) &&(B != C) && (B != D) && (B != E) &&(C != D) && (C != E) && (D!= E)) //每个人的排名都不能相等 {printf("A=%d B=%d C=%d D=%d E=%d",A,B,C,D,E);return 0;} }}return 0;}
简要说明:((A==3)+(B==2))==1 表示:
== 此符号是一个判断符号,如果符号两边的量相等,则表达式的值为1,否则为0;
A==3、B==2和(…)==1都是逻辑表达式,其值只能是1或0。当表达式为真时,值为1,否则值为0。先判断A==3是否为真,是则值为1,否则为0,再判断B==2的值。设此二式的值的和为C,则再判断C==1的值(1或0)
运行结果截图:
C语言与离散数学的结合--逻辑推理相关推荐
- java 离散算法_用JAVA语言实现离散数学算法
用JAVA语言实现离散数学算法 用JAVA语言实现离散数学算法 * 显示离散数学算法的真值表 * 提供将一个中缀合适公式的真值表输出到某一PrintStream流中的功能 * 以单个大写字母表示变量( ...
- 离散集合运算c语言程序,离散数学集合运算c语言.doc
离散数学集合运算c语言 离散数学集合运算(第一次作业) C语言写法: #include //求长度的运算 void main() { int i,j,n; float A[]; float B[]; ...
- 【应用C】C语言实现离散数学合式公式的递归判断
实现合式公式的递归判断,是大二离散数学老师给我们出的一道编程题,当时也是第一次接触递归,苦思冥想一段时间后写出来了,逻辑应该没多大问题,也测试过一组数据,应该还有BUG,希望有人提醒我,在此分享给各位 ...
- C语言求离散数学中析取合取等
从键盘输入两个命题变元P和Q的真值,求它们的合取.析取.蕴涵和等价四种运算的真值.要求对输入内容进行分析,如果不符合0.1条件需要重新输入,程序有良好的输入输出界面. 代码如下: #include&l ...
- 离散数学真值表(c语言编程实现),C语言 实现离散数学合式公式真值表
我们介绍了什么是合式公式以及怎样用C语言实现判断机制 现在我们来谈谈怎样用C语言去实现合式公式的真值表. 该程序功能就是任意给定一个合式公式我们都能把它的真值表输出出来. 步骤1: 引用上一篇的程序, ...
- C语言 实现离散数学合式公式真值表
我们介绍了什么是合式公式以及怎样用C语言实现判断机制 现在我们来谈谈怎样用C语言去实现合式公式的真值表. 该程序功能就是任意给定一个合式公式我们都能把它的真值表输出出来. 步骤1: 引用上一篇的程序, ...
- C语言:离散数学8.1.5 笛卡尔积
[问题描述] 有两个集合A和B,求这两个集合的笛卡尔积A×B. [输入] 本题有多组测试数据.每组测试数据的格式如下: 第一行先是一个整数n,然后是n个小写字母,整数字母之间均用一个空格分开. 第二行 ...
- 中山大学软件工程c语言,2018中山大学软件工程专硕考研经验分享
我本科是本校的软件工程,17年8月开始准备考研.初试前每天复习9小时,复试前因为忙着毕设没怎么准备.=============================初试=================== ...
- 中国为什么没有自己的编程语言?哲学、数学和语言学是关键
中国为什么没有自己的编程语言?不是不需要,而是缺乏哲学.数学.语言学和编译原理方面的理论和实践,看明白才知道差距不小. 中国为什么没有编程语言 中国都是应用编程语言,很少有自己开发语言的人.应用制造是 ...
最新文章
- By.Xpath快速定位页面元素常用方法
- 【Cocosd2d实例教程三】Cocos2d瓦片地图的导入
- maven junit scope test坑
- 22、Power Query-文本字符的精确提取
- 给所有想从事软件研发的年轻工程师的忠告与建议
- SPOJ-VLATTICE Visible Lattice Points-莫比乌斯反演
- macOS Unlocker3.0
- python restful风格_总结python bottle框架支持jquery ajax的RESTful风格的PUT和DELETE方法
- Java实验9 T6.将对象和数组存储在dat文件中
- c语言将两个文件合成一个,keil中怎么把两个c程序怎么同时同时编译生成一个hex文件...
- 洛谷——P1423 小玉在游泳
- 思科网院Packet Tracer实验(四)连接有线和无线 LAN
- Java 读取shp文件,生成shp文件,通过shp文件自动建库
- 易语言5.4一键破解工具
- jquery-seat-charts 使用-自定义座位号 及 重新加载数据
- 如何安装最纯净的win7系统
- 百读不厌《破窑赋》!真正的千古奇文!
- 百度又一神器发布!网友:牛逼炸了...
- 计算机系学天体物理,中科院南京天文光学技术研究所专业介绍:天体物理
- 那些闪光的思想和智慧-让自己慢下来(36)