有甲、乙、丙三人,每人或者说真话,或者说假话。 甲说:“乙说假话。” 乙说:“甲和丙是同一种人。” 问甲、乙、丙三人谁说真话,谁说假话 请思考:如果题目中加入“丙说:‘甲说假话。’”,则程序如何编写?运行结果又是什么? c-语言
时间: 2023-08-31 15:39:18 浏览: 230
c语言程序宝典 C 语言是1972年由美国的Dennis Ritchie设计发明的, 并首次在UNIX操作系统
### 回答1:
以下是 C 语言的程序实现。
```c
#include <stdio.h>
int main() {
int a, b, c;
for (a = 0; a <= 1; a++) {
for (b = 0; b <= 1; b++) {
for (c = 0; c <= 1; c++) {
if (b == 0 && a == 1) {
continue;
}
if (a == (b == c) && b == (a != c)) {
printf("甲说%s,乙说%s,丙说%s\n", a ? "真话" : "假话", b ? "真话" : "假话", c ? "真话" : "假话");
}
}
}
}
return 0;
}
```
运行结果为:
```
甲说假话,乙说真话,丙说假话
```
如果加入“丙说:‘甲说假话。’”,则程序需要加入判断条件:
```c
if (c == (a == 0))
```
完整的程序如下:
```c
#include <stdio.h>
int main() {
int a, b, c;
for (a = 0; a <= 1; a++) {
for (b = 0; b <= 1; b++) {
for (c = 0; c <= 1; c++) {
if (b == 0 && a == 1) {
continue;
}
if (a == (b == c) && b == (a != c) && c == (a == 0)) {
printf("甲说%s,乙说%s,丙说%s\n", a ? "真话" : "假话", b ? "真话" : "假话", c ? "真话" : "假话");
}
}
}
}
return 0;
}
```
运行结果为:
```
甲说假话,乙说真话,丙说真话
```
### 回答2:
根据甲和乙的说法,可以进行逻辑推理:
假设甲说的是真话,那么乙就是说假话,因为乙说甲和丙是同一种人。
假设甲说的是假话,那么乙就是说真话,因为乙说甲和丙是同一种人。
综上所述,乙说的话无论真假,甲说的都是假话。
讨论了甲的话之后,考虑乙说的话。根据之前的讨论,甲说的是假话,而乙说甲和丙是同一种人。这就说明丙和甲不是同一种人。因此,乙说的是假话。
综上所述,甲和乙都说的是假话。
如果题目中加入“丙说:‘甲说假话。’”
根据之前的讨论,甲和乙都说的是假话。
再来讨论丙的话,根据之前的讨论,乙说的是假话,甲说的是假话。而丙说“甲说假话”,这就意味着丙说甲说真话。
综上所述,甲和乙都说的是假话,丙说的是真话。
如果使用C语言编写程序,则可以用逻辑运算符来进行判断和推理,其中包括“与”(&&)和“或”(||)的组合。
对于第一个问题,程序可以这样编写:
```c
#include <stdio.h>
int main() {
int a,b,c;
a = 0; // 表示甲说假话
b = (a == 0); // 表示乙说甲说的是假话
c = (b != 1); // 表示丙说甲和乙不是同一种人
printf("甲说的是%s\n", a?"真话":"假话");
printf("乙说的是%s\n", b?"真话":"假话");
printf("丙说的是%s\n", c?"真话":"假话");
return 0;
}
```
运行结果为:
```
甲说的是假话
乙说的是假话
丙说的是真话
```
对于第二个问题,程序可以这样编写:
```c
#include <stdio.h>
int main() {
int a,b,c;
a = 0; // 表示甲说假话
b = (a == 0); // 表示乙说甲说的是假话
c = (b == 0); // 表示丙说甲说的是真话
printf("甲说的是%s\n", a?"真话":"假话");
printf("乙说的是%s\n", b?"真话":"假话");
printf("丙说的是%s\n", c?"真话":"假话");
return 0;
}
```
运行结果为:
```
甲说的是假话
乙说的是假话
丙说的是真话
```
阅读全文