Member 13593396 Ответов: 2

Найдите выходные данные данного кода с соответствующим объяснением


#include<conio.h>
#include<stdio.h>
using namespace std;
int main()
{   int i=4,j=-1,k=0,w,x,y,z;
  w=i||j||k;
  x=i&&j&&k;
  y=i||j&&k;
  z=i&&j||k;
	printf("w=%d x=%d y=%d z=%d\n",w,x,y,z);
	getch();
	return 0;
}


Что я уже пробовал:

У меня есть выход, но я не могу этого понять ....Пожалуйста, дайте мне какое-нибудь объяснение

Richard MacCutchan

Прочтите свои заметки по курсу или получите копию справочного руководства по Си, в котором объясняются все логические операторы. Кроме того, научитесь использовать интервалы в коде, чтобы сделать его читабельным.

2 Ответов

Рейтинг:
8

CPallini

Сначала давайте напишем это как должное C программа (как C++ не является C):

#include <stdio.h>
int main()
{
  int i=4, j=-1, k=0, w, x, y, z;
  w = i || j || k;
  x = i && j && k;
  y = i || j && k;
  z = i && j || k;
  printf("w=%d x=%d y=%d z=%d\n", w, x, y, z);
  getchar();
  return 0;
}


Затем рассматривать
w = i || j || k = (4) || (-1) || (0) = true AND true AND true = true = 1;

где выражения с "истинным", "и" и т. д. являются "воображаемыми", просто чтобы проиллюстрировать, как происходит оценка.
x = i && j && k = .. = true AND true AND false = false = 0;

y = i || j && k = .. = true OR (true AND false) = true OR false = true = 1;

z = i && j || k = .. = (true AND true) OR false = true OR false = true = 1;


в последних двух выражениях вы видите следующее: C правила приоритета операторов[^] в действии (приоритетность && оператор выше, чем приоритет оператора. || оператор).


Member 13593396

Спасибо вам, сэр, за помощь.......

Рейтинг:
1

OriginalGriff

Извините, но это ваше домашнее задание, а не наше, так что вам придется делать работу здесь.

Начните с того, что помните, что C не имеет "истинного" или "ложного" - он считает любое число, которое не равно нулю, "истинным", а любое число, которое равно нулю, - "ложным".
Затем помните, что || и && являются логическими операторами, а не двоичными: поэтому выход a || b или a && b должен быть "истинным" (ненулевым) или "ложным" (нулевым).
Наконец, посмотрите, что делают логические операторы AND и OR: это довольно просто, и результаты становятся очевидными.


Member 13593396

сэр, я получил выход как w=1 x=0 y=1 z=2, но я не могу понять, почему????

OriginalGriff

а) нет, это не так. Посмотреть снова.
б) какую часть того, что вы получили, вы не поняли?