Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.05;
Скачать: CL | DM;

Вниз

Еще про 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;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.012 c
7-14839
Azbul
2002-10-05 07:23
2002.12.05
Как установить системнок время


1-14543
TankMan
2002-11-25 21:40
2002.12.05
Есть ли вообще проверка, на корректрость введенного IP?


1-14564
ret_Avr
2002-11-24 19:43
2002.12.05
Как StringGrid отправить в Word?


1-14647
sashok
2002-11-24 16:07
2002.12.05
Цвет в CheckListBox


8-14699
Groove
2002-06-19 15:37
2002.12.05
mediaplayer & tarckbar