1 | |||||||||||
Тест на знание Си18.07.2023, 22:04. Показов 744. Ответов 9
Метки нет Все метки)
(
Здравствуйте !
Учу Си по онлайн-курсу. Даны два следующих кода :
Буду рад если обьясните...
0
|
18.07.2023, 22:04 | |
Ответы с готовыми решениями:
9
Тест на знание C++ Тест на знание Delphi Тест на знание php |
![]() 1789 / 1248 / 621
Регистрация: 17.03.2022
Сообщений: 3,957
|
|
18.07.2023, 22:15 | 2 |
![]() Решение
Ну очевидно, что в одном случае инкремент z срабатывает, в другом - нет.
А разница в том, что для вычисления значения первого логического выражения нужно выяснить, что находится в последней его части (x && y дают 0, результат определяется оставшейся частью), а во втором случае - нет, до инкремента дело просто не доходит.
1
|
![]() 1789 / 1248 / 621
Регистрация: 17.03.2022
Сообщений: 3,957
|
|
18.07.2023, 22:32 | 4 |
max_sk, а погуглить вы самостоятельно не можете?
Первая. И, что интересно, в данном случае эта информация вам совершенно не нужна. Нет. А вот тут перед изучением языка полезно немного изучить матлогику (ну или просто немного подумать, припомнив сведения из 2, кажется, класса школы).
1
|
19.07.2023, 19:11 [ТС] | 5 |
Почитал тут статью Майкрософта на эту тему... То есть, если я правильно понимаю в выражении x && y || z++ x && y дают false ( логическое 0 ) и дальше 0 || z дают true, т.е. логическое 1 и поэтому выполняется z++, т.е. z становится равным 6.
В следующем коде дано выражение x && y && z++. X && y дает логическое 0 и далее 0 && z тоже дает логическое 0. И поэтому z++ не выполняется и z остается 5 Я прав ? Тогда почему утверждается, что операция ++ имеет больший приоритет, чем && и ||, если сначала выполняются они ?
0
|
Заблокирован
|
|
19.07.2023, 19:19 | 6 |
Только в том случае, когда нужно выполнить эту операцию. Но если заведомо результат логической операции равен false, никаких дальнейших вычислений проводиться не будет: зачем?
Об этом всегда необходимо помнить, чтобы на "UB" не нарваться (которое на самом деле не UB, а косяк программиста).
1
|
![]() 1789 / 1248 / 621
Регистрация: 17.03.2022
Сообщений: 3,957
|
|
19.07.2023, 19:49 | 7 |
Да, только вам это уже в первом ответе было написано.
Потому что это постинкремент, ключевая часть выделена жирным. Сначала используется значение, потом выполняется инкремент. Но если значение не используется...
1
|
Неэпический
![]() |
|
20.07.2023, 12:09 | 8 |
Это особенность операторов && и ||. Назовем её "ленивые вычисления" - если результат правой части ни на что повлиять не может, то вычисление и не выполняется.
Соответственно, для логического ИЛИ правая часть не имеет смысла, если левая равна TRUE - TRUE || (что угодно) всегда даст TRUE. А для логического И правая часть не имеет смысла, если левая часть равна FALSE - FALSE && (что угодно) всегда даст FALSE.![]() ![]() x && y || z++; x && y && z++; при x=1,y=0,z=5; , тогдаx && y всегда дает FALSE (1 && 0 = 0 ), следовательно:FALSE || z++; FALSE && z++; В первом случае, правая часть может повлиять на результат (левая часть равна 0), поэтому z++ вычисляется.Во втором случае, правая часть не может повлиять на результат (левая часть равна 0), поэтому z++ не вычисляется.
0
|
![]() 481 / 347 / 64
Регистрация: 09.03.2016
Сообщений: 3,436
|
||||||
20.07.2023, 13:26 | 9 | |||||
Когда то разбирался....
На плюсы похоже, да здесь ни чего особенного нет...
0
|
Вездепух
![]() ![]() ![]() 12866 / 6731 / 1809
Регистрация: 18.10.2014
Сообщений: 17,035
|
|
20.07.2023, 20:52 | 10 |
Нет, не правильно. Ни о каком "дальше 0 || z дают true" речи не идет.
Значение имеет только то, что "x && y дают false". Это значит, что для того, чтобы вычислить || , левой части недостаточно. Нужно вычислять правую часть, то есть z++ . При этом и происходит увеличение z .Нет, опять же "далее 0 && z тоже дает логическое 0" здесь ни при чем. Значение имеет только то, что x && y дает 0. Это сразу означает, что все выражение дает 0. Вычислять последнюю часть, то есть z++ , в такой ситуации не требуется (и не разрешается). Поэтому z не меняет значения.Приоритеты операций не имеют никакого отношения к порядку их выполнения. Приоритеты операций диктуют только способ синтаксического разбора выражения: какие операнды нужно отдать каким операторам. А на то, что выполнять "сначала", приоритеты операций никакого влияния не оказывают.
0
|
20.07.2023, 20:52 | ||||||
Помогаю со студенческими работами здесь
10
Тест на знание ассемблера Тест на знание Windows Тест на знание предмета Пройдите тест на знание ATmega Программа тест на знание Си++ не работает Искать еще темы с ответами Или воспользуйтесь поиском по форуму:
|
|
Новые блоги и статьи
![]() |
||||
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
|
Предсказание ветвлений - путь к высокопроизводительному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
|
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
|
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
|
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
|
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
|
Позиционирование Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
|
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
|
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
|
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
|