C语言题目:已知某班有4位同学:A、B、C、D。其中有一位同学做了好事,但不知是谁。当被询

已知某班有4位同学:A、B、C、D。其中有一位同学做了好事,但不知是谁。当被询问时,A说:不是我;B说:是C;C说:是D;D说:他胡说。已知其中有三个人说的是真话,一个人说的是假话。请根据以上信息,编写程序,找出做了好事的人。
(提示:C语言中,某个表达式为“真”即值为1,为“假”即值为0;本题中要认真考虑4位同学的话应如何用关系表达式表示?)

#include <stdio.h>
int main()
{
 int s,a,b,c,d;         /*变量s代表做好事的同学,abcd代表ABCD同学的说法的正确性*/
 for(s='A';s<='D';s++)  /*穷举可能性,用字符'A'--'D'代表4个同学*/
 {
  a=(s!='A');          /*A说不是我: s!='A'*/
  b=(s=='C');          /*B说是C : s=='C'*/
  c=(s=='D');          /*C说是D: s=='D'*/
  d=(s!='D');          /*D说C胡说: s!='D'*/
  if((a+b+c+d)==3)     /*如果有3个人说的是真的就结束循环并输出*/
  {
   printf("做好事的同学是:%c\n",s);
   break;
  }
 }
 return 0;
}

 结果:

温馨提示:内容为网友见解,仅供参考
第1个回答  2013-10-10
用表达式,思路有点混乱,但是我知道答案是C追问

请用C语言解答

第2个回答  2013-10-10
#include <stdio.h>
//答案是C说假话.
int main(void) {
int A = 1, B = 0, C = 0, D = 0;
if (A && C && D && !D) {
printf("A");
return 0;
}
A = 0, B = 1, C = 0, D = 0;
if (!A && !C && D && !D) {
printf("B");
return 0;
}
A = 0, B = 0, C = 1, D = 0;
if (!A && C && !D && !D) {//D说实话也就是说D不是.
printf("C");
return 0;
}
A = 0, B = 0, C = 0, D = 1;
if (!A && C && D && !D) {
printf("D");
return 0;
}
}本回答被网友采纳
相似回答