用 C语言模拟买猫的过程

这是一个防止代码丢的笔记

最近在学习C语言,同时也在读《编码》这本书,读着读着突然有一种想把编码中的电路实现出来的想法,由于现实世界中缺少材料(大量的电线、开关和灯泡等等),所以产生了用C语言模拟计算机的想法。
刚刚用C语言把第10章(逻辑与开关)中的买猫过程的电路用C语言模拟了一下,结果(0, 0, 1)和书中的完全一样,以后打算以这些代码为基础构建出一台冯·诺依曼机,为了防止硬盘损坏等原因导致代码丢失,所以把所有代码都放在CSDN上。

现实问题、表达式与电路

先定义8个集合, M = 公猫,F = 母猫, N = 绝育的猫, U = 未绝育的猫, T = 褐色的猫, B = 黑色的猫, W = 白色的猫, O = 其他颜色的猫。

现实问题

你走进一家宠物店,并且说:“我想要一只公猫,已绝育的,白色的或褐色的都可以;或者一只母猫,已绝育的,除了白色其他任何颜色都可以;或者,只要是一只黑猫就行。

可以用如下布尔表达式描述

(M * N * (W + T)) + (F * N * (1 - W) + B

用电路表示此问题在这里插入图片描述

用代码解决问题

这部分代码模拟了店员给你拿三次小猫的过程

第一次,一只未绝育的褐色公猫。结果:0(不是你想要的);
第二次,一只已绝育的白色母猫。结果:0(不是你想要的);
第三次,一只已绝育的灰色母猫。结果:1(是你想要的)。

代码部分

#include <stdio.h>
#include <stdbool.h>

bool cat(bool M, bool F, bool N, bool U, bool T, bool B, bool W, bool O);

int main()
{
	//
	bool M = 0; // male
	bool F = 0; // female
	bool N = 0; // sterilisation
	bool U = 0; // no sterilisation
	bool T = 0; // tan
	bool B = 0; // black
	bool W = 0; // white
	bool O = 0; // other
	//
	// scanf("%d %d %d %d %d %d %d %d", &M, &F, &N, &U, &T, &B, &W, &O);
	

	{
		bool M = 1;
		bool T = 1;
		bool U = 1;
		printf("%d\n", cat(M, F, N, U, T, B, W, O));
	}
	{
		bool F = 1;
		bool N = 1;
		bool W = 1;
		printf("%d\n", cat(M, F, N, U, T, B, W, O));
	}
	{
		bool F = 1;
		bool N = 1;
		bool O = 1;
		printf("%d\n", cat(M, F, N, U, T, B, W, O));
	}


	return 0;
}

bool cat(bool M, bool F, bool N, bool U, bool T, bool B, bool W, bool O){
	bool ret = 0;
	ret = (M && N && (W || T)) || (F && N && (1 - W)) || B;
	return ret;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值