Форум: "Потрепаться";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
ВнизЕще про C++ Найти похожие ветки
← →
DiamondShark (2002-11-13 23:18) [0]Что напечатает эта программа (попытайтесь ответить не компилируя)
#include <stdio.h>
main()
{
int С = 0;
printf("Что лучше, С или С++? Вот в чем вопрос!");
if (C > C++) printf("Кажется, C лучше")
else if (С == С++) printf("Не знаю. Может Паскаль?")
else printf("Что за вопрос! Конечно С++!")
}
Теоретические выкладки приветствуются ;)
← →
Карлсон (2002-11-13 23:22) [1]хм...
интересно :)))
Си я не знаю, но судя по коду программы, либо вообще вылезет ошибка, т.к. значению C++ не присвоено численного эквивалента, хотя кажись будет первый вариант, т.е. С лучше.
а если же рассуждать иначе, то тогда будет второй :)
я делаю свой выбор на первом варианте :)
← →
CrazyRoger (2002-11-13 23:36) [2]Как я помню вначале произойдет сравнение, а потом значение С увеличится. А во втором случае окажется что равно и выведет строку №2
Шас скомпилю - посмотрю....
← →
kaif (2002-11-13 23:39) [3]++ должно произойти после сравнения. Так что выведется для случая ==
← →
Dmk (2002-11-13 23:43) [4]Function Equality():boolean;
var C: Integer;
begin
Result := LResult(0);
C := 0;
Writeln("Что лучше, С или С++? Вот в чем вопрос!");
If C > (C + 1) then Writeln("Кажется, С лучше")
else if (C = (C + 1)) then Writeln("Не знаю. Может Паскаль?")
else Result := "Что за вопрос! Они оба хороши !!!")
end;
Похоже на правду? :)
← →
CrazyRoger (2002-11-13 23:47) [5]Гад! Во первых нифига она не выдаст если ошибки не исправить. А "С" мог написать и по англицки.
Блин, но почему так?
(Уходит учить язык С)
#include <stdio.h>
main()
{
int C = 0;
printf("Что лучше, С или С++? Вот в чем вопрос!");
if (C > C++) printf("Кажется, C лучше");
else if (C == C++) printf("Не знаю. Может Паскаль?");
else printf("Что за вопрос! Конечно С++!");
}
← →
DiamondShark (2002-11-13 23:52) [6]Люди! Прошу пардона за ошибки! Где-то может быть С (русское ЭС) перепутано с С (аглицкое si). Противный ПунтоСвитчер :(
> Dmk © (13.11.02 23:43)
Фига! Адекватного эквивалента на Паскале не существует.
← →
Adder (2002-11-13 23:56) [7]Если убрать ошибки (";" поставить где надо), то согласна с
kaif © (13.11.02 23:39): "Не знаю. Может Паскаль?" -)))
← →
VictorT (2002-11-13 23:57) [8]
> Dmk © (13.11.02 23:43)
Не совсем правильно повторено, но результат в принципе будет тот-же. В общем-то отличие только в том, что в твоём варианте второе
условие 0>1 а в сишном варианте 1>2, хотя результат один и тот-же :)
← →
esu (2002-11-14 00:12) [9]В первом условии
0 > 0
во втором 1 == 1
Ответ: "Не знаю. Может Паскаль?"
Вот если бы C == ++C тогда ...C++ лучше
← →
Anar (2002-11-14 00:14) [10]
#include <stdio.h>
void main()
{
int C = 0;
printf("Что лучше, С или С++? Вот в чем вопрос!");
if (C > C++) printf("Кажется, C лучше"); // C никогда не может быть больше С+1 => это ложно
else if (C == C++) printf("Не знаю. Может Паскаль?"); // C никогда не может быть = C+1 => это тоже ложно
else printf("Что за вопрос! Конечно С++!"); // остаётся только это и программа её и выводит.
}
Что тут сложного?
← →
Jeer (2002-11-14 00:20) [11]Не так все просто:))
Выводится "Кажется, C лучше"
← →
Карлсон (2002-11-14 00:31) [12]так какой же на самом деле ответ?
Мастера, обьясните плиз!
← →
Jeer (2002-11-14 00:37) [13]Не менее интересная фишка
int i, a[2];
i = 0;
a[i++] = i;
Здесь результат присвоения вообще не предсказуем
← →
Lancelot (2002-11-14 00:45) [14]"++", стоящий после переменной, срабатывает после выполнения основного оператора (т.е., после первого сравнения). А так как С>С быть не может, то С лучше, чем С++ :)
← →
Lancelot (2002-11-14 00:53) [15]
> Jeer © (14.11.02 00:37)
> Не менее интересная фишка
>
> int i, a[2];
> i = 0;
> a[i++] = i;
>
> Здесь результат присвоения вообще не предсказуем
Фигня. Опять же вспоминаем приоритет операций в сишном выржении: сначала происходит присвоение нуля нулевому элементу (а всего элементов два, нулевой и первый), потом I становится равно 1.
← →
Anar (2002-11-14 00:55) [16]Lancelot, Да ты прав.
Пусть так. Если C>C быть не может, то, почему ты решил, что выводится будет "С лучше". Выводится будет "Паскаль лучше", т.к. согласно второму условию C==C (C дейтсвительно равняется C), а потом будет идти инкримент.
Если было бы C=++C, то тогда было бы как я показал выше. Простите немного ошибся.
P.S. Эх, знал бы я Си++ также хорошо как Паскаль... Надо учиться, учиться и учиться.
← →
esu (2002-11-14 01:00) [17]
> А так как С>С быть не может, то С лучше, чем С++ :)
По логике программы будет переход на elseif, а не вывод "С лучше" "!" я там не вижу.
← →
esu (2002-11-14 01:06) [18]
> Jeer © (14.11.02 00:37)
Вроде как a[0] == 0 будет, почему непредсказуем собственно ?
← →
Suntechnic (2002-11-14 01:08) [19]>Lancelot © (14.11.02 00:53)
> Jeer © (14.11.02 00:37)
> Не менее интересная фишка
>
> int i, a[2];
> i = 0;
> a[i++] = i;
>
> Здесь результат присвоения вообще не предсказуем
Фигня. Опять же вспоминаем приоритет операций в сишном выржении: сначала происходит присвоение нуля нулевому элементу (а всего элементов два, нулевой и первый), потом I становится равно 1.
Да нет батенька. Приоритет операций тут ни при чём. Тут важен порядок вычислений. Что будет сначала обсчитано: выражение стоящее слева от оператора присвоения или справа? Так вот этот порядок как раз стандартном не определён и всё будет зависить от реализации конкретного компилятора.
← →
Jeer (2002-11-14 01:10) [20]Lancelot © (14.11.02 00:53)
Упомянутое мной относится к т.н. побочным эффектам - неявное изменение значения переменной в процессе выполнения выражений.
Операции присваивания могут иметь побочный эффект, т.к. порядок вычисления не всегда предсказуем.
Разумеется есть зависимость от компилятора.
И разумеется есть случаи гарантированного порядка выполнения.
ПРи вычислении выражений существуют т.н. контрольные точки по прохождению которых все предшествующие выражения гарантироавнно произведены.
Вот еще один побочный эффект
myfunc(i+1,i=j+2);
Результат в общем случае не предсказуем,т.к. аргументы могут быть вычислены в любом порядке
← →
Lancelot (2002-11-14 01:11) [21]Да, это я набрехал сгоряча. Приоритет у инкремента на самом деле самый большой. Однако си действительно получается лучше, чем си++. Скомпилируйте программу, сами увидите.
Да и во втором случае a[0]=0...
Ладно, рассмотрим табличку:
----------------------------------------------------------------------
# Category ¦ Operator ¦ What it is (or does)
----------------+----------+------------------------------------------
1. Highest ¦ () ¦ Function call
¦ [] ¦ Array subscript
¦ -> ¦ C++ indirect component selector
¦ :: ¦ C++ scope access/resolution
¦ . ¦ C++ direct component selector
----------------+----------+------------------------------------------
2. Unary ¦ ! ¦ Logical negation (NOT)
¦ ~ ¦ Bitwise (1"s) complement
¦ + ¦ Unary plus
¦ - ¦ Unary minus
¦ ++ ¦ Preincrement or postincrement
¦ -- ¦ Predecrement or postdecrement
¦ & ¦ Address
¦ * ¦ Indirection
¦ sizeof ¦ (returns size of operand, in bytes)
¦ new ¦ (dynamically allocates C++ storage)
¦ delete ¦ (dynamically deallocates C++ storage)
----------------+----------+------------------------------------------
3. Member ¦ .* ¦ C++ dereference
access ¦ ->* ¦ C++ dereference
----------------+----------+------------------------------------------
4. Multipli- ¦ * ¦ Multiply
cative ¦ / ¦ Divide
¦ % ¦ Remainder (modulus)
----------------+----------+------------------------------------------
5. Additive ¦ + ¦ Binary plus
¦ - ¦ Binary minus
----------------+----------+------------------------------------------
6. Shift ¦ << ¦ Shift left
¦ >> ¦ Shift right
----------------+----------+------------------------------------------
7. Relational ¦ < ¦ Less than
¦ <= ¦ Less than or equal to
¦ > ¦ Greater than
¦ >= ¦ Greater than or equal to
----------------+----------+------------------------------------------
8. Equality ¦ == ¦ Equal to
¦ != ¦ Not equal to
----------------+----------+------------------------------------------
9. ¦ & ¦ Bitwise AND
----------------+----------+------------------------------------------
10. ¦ ^ ¦ Bitwise XOR
----------------+----------+------------------------------------------
11. ¦ | ¦ Bitwise OR
----------------+----------+------------------------------------------
12. ¦ && ¦ Logical AND
----------------+----------+------------------------------------------
13. ¦ || ¦ Logical OR
----------------+----------+------------------------------------------
14. Conditional¦ ?: ¦ (a ? x : y means "if a then x, else y")
----------------+----------+------------------------------------------
15. Assignment ¦ = ¦ Simple assignment
¦ *= ¦ Assign product
¦ /= ¦ Assign quotient
¦ %= ¦ Assign remainder (modulus)
¦ += ¦ Assign sum
¦ -= ¦ Assign difference
¦ &= ¦ Assign bitwise AND
¦ ^= ¦ Assign bitwise XOR
¦ |= ¦ Assign bitwise OR
¦ <<= ¦ Assign left shift
¦ >>= ¦ Assign right shift
----------------+----------+------------------------------------------
16. Comma ¦ , ¦ Evaluate
----------------------------------------------------------------------
Страницы: 1 вся ветка
Форум: "Потрепаться";
Текущий архив: 2002.12.05;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.008 c