Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Потрепаться";
Текущий архив: 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
14-14725
Marser
2002-11-13 00:24
2002.12.05
What is the Delphi7?


1-14662
kingdom
2002-11-22 18:18
2002.12.05
Как распознать COM?


4-14873
M@xim
2002-10-25 10:10
2002.12.05
Диалог OpenFolder или чтото подобное


14-14807
Romkin
2002-11-14 11:31
2002.12.05
Последствия встречи в Москве II


4-14861
TankMan
2002-10-21 00:43
2002.12.05
Помогите сделать тип данных....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский