
题 目 二:布尔函数的输出系统
这个是原题,老师说变量是2个,最后只要得到那个公式,就好了,拜托你再看一下,好吗? 展开
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int paramCnt = 2;
char paramList[paramCnt];
paramList[0] = 'P';
paramList[1] = 'Q'; // 固定变量
// 读取生成真值表
int max_size = 1; // 真值表个数
for (int i = 0; i < paramCnt; i++)
{
max_size *= 2;
}
printf("真值表共有%d个值,请依次输入变量值及真值.\n", max_size);
printf("请输入真值表:\n");
int a[max_size][paramCnt + 1];
for (int i = 0; i < max_size; i ++)
{
printf("开始第%d项的真值表达式\n", i + 1);
for (int j = 0; j <= paramCnt; j++)
{
if (j < paramCnt) printf("输入变量%c的值:", paramList[j]);
else printf("输入该项的真值:");
scanf("%d", &a[i][j]); // 这里没有做输入校验,自己添加\输入只能0、1
}
}
// 上面也可以直接让用户输入每项真值,变量值程序自己赋值就行,2个变量时比较操作友好
// 输出表达式
printf("表达式*表示与,+表示或,!表示非:\n");
int flag = 0; // 用来标识是否打出了开头
for (int i = 0; i < max_size; i ++)
{
if (a[i][paramCnt] == 1) // 如果上面不是用0、1表示、而是true\false,则自己替换
{
if (flag != 0) printf(" + ");
flag = 0; // 重置用于判断是否需要在变量前输出*
for (int j = 0; j < paramCnt; j++)
{
if (flag != 0) printf(" * ");
if (a[i][j] == 1) printf("%c", paramList[j]);
else printf("!%c", paramList[j]);
}
flag = 1; // 重置下一项输入需要输出+
}
}
printf("\n");
system("pause"); // 这个devC常用到
return 0;
}
老师说最后只需输出表达式,说要用到多项式的加法与乘法的
#include<stdio.h>
#include<stdlib.h>
int main()
{
const int paramCnt = 2;
char paramList[paramCnt];
paramList[0] = 'P';
paramList[1] = 'Q'; // 固定变量
// 读取生成真值表
int max_size = 1; // 真值表个数
for (int i = 0; i < paramCnt; i++)
{
max_size *= 2;
}
printf("真值表共有%d个值,请依次输入变量值及真值.\n", max_size);
printf("请输入真值表:\n");
int a[max_size][paramCnt + 1];
for (int i = 0; i < max_size; i ++)
{
printf("开始第%d项的真值表达式\n", i + 1);
for (int j = 0; j <= paramCnt; j++)
{
if (j == paramCnt)
{
printf("输入该项的真值( ");
for (int k = 0; k < paramCnt; k++) printf("%c=%d ", paramList[k], a[i][k]);
printf("):");
scanf("%d", &a[i][j]); // 这里没有做输入校验,自己添加\输入只能0、1
}
else
{
if (paramCnt == 2)
{
if (j == 0)
{
a[i][j] = i / 2;
}
else
{
a[i][j] = i % 2;
}
}
else
{
// 多个变量的值,自动赋值还没有做
printf("error use");
}
}
}
}
// 上面也可以直接让用户输入每项真值,变量值程序自己赋值就行,2个变量时比较操作友好
// 输出表达式
printf("表达式*表示逻辑与,+表示逻辑或,!表示逻辑非:\n");
printf("f(%c", paramList[0]);
for (int i = 1; i < paramCnt; i++) printf(",%c", paramList[i]);
printf(") = ");
int flag = 0; // 用来标识是否打出了开头
for (int i = 0; i < max_size; i ++)
{
if (a[i][paramCnt] == 1) // 如果上面不是用0、1表示、而是true\false,则自己替换
{
if (flag != 0) printf(" + ");
flag = 0; // 重置用于判断是否需要在变量前输出*
for (int j = 0; j < paramCnt; j++)
{
if (flag != 0) printf(" * ");
if (a[i][j] == 1) printf("%c", paramList[j]);
else printf("(!%c)", paramList[j]);
flag = 1; // 重置下一项输入需要输出*
}
flag = 1; // 重置下一项输入需要输出+
}
}
printf("\n");
system("pause"); // 这个devC常用到
return 0;
}

2025-07-02 广告