Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
0 / 0 / 0
Регистрация: 15.06.2021
Сообщений: 4

Что выводит следующая программа?(объясните код из задачи из Дейтелов)

14.07.2021, 01:25. Показов 2936. Ответов 31
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Объясните, пожалуйста, код ньюфагу.
я бы мог пропустить эти задания и дальше читать книгу, но мне интересно, что происходит в этом коде, собственно, поэтому я тут.


}
C
1
2
3
4
5
6
7
8
9
10
11
12
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
main()
{
int count = 1;
 
   while (count <= 10)
   {
    printf("%s\n", count % 2 ? "***" : "+++++++"); // что за тип данных %s? как работает " % 2 ? "? что делает : ?
    ++count;
   }
}

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
main()
{
    int row = 10, column; // зачем тут вторая переменная и что происходит с ими обеими?
    while (row >= 10)
    {
        column = 1;
        while (column <= 10)
        {
            printf("%s", row % 2 ? "<" : ">"); // опять же, полностью непонятна эта строчка кода
            ++column;
        }
        --row;
        printf("\n");
    }
}// как получается так, что выводится >>>>>>>>>>  ?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.07.2021, 01:25
Ответы с готовыми решениями:

Посмотрите, что выводит следующая программа, и исправьте ее так, чтобы получилась пятиконечная звезда
Посмотрите, что выводит следующая программа, и исправьте ее так, чтобы получилась пятиконечная звезда. import tkinter master =...

Что напечатает на экране следующая программа?
void main() { int x; clrscr(); x=2*2&lt;&lt;2-1&amp;1; printf(&quot;%d\n&quot;,x); x=1+2*3%4-5^6; ...

Напишите, что выведет на экран следующая программа:
1 Напишите, что выведет на экран следующая программа: Program V2_Z1; Var A,B:Integer; Procedure F1(Var X,Y:Integer);

31
13 / 13 / 0
Регистрация: 21.10.2011
Сообщений: 58
14.07.2021, 20:12
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Именно! Об этом и речь. Когда не делается упоминания стандарта, тогда речь автоматически идет о самом последнем стандарте языка.
Только в вашем мозгу, автоматически речь идет о самом новом стандарте, в остальных случаях это требуется обозначить
Вероятно вы и операционную систему подразумеваете и компилятор?

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Странный вопрос. Любой С код, который не нарушает требования С17, является кодом С17. Не понимаю, почему нужно объяснять такие очевидные вещи.
Пожалуйсте не включайте дурака, я имел ввиду код, в котором используются фичи из C17, много такого кода видели?
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,327
14.07.2021, 20:35
Цитата Сообщение от fish9370 Посмотреть сообщение
Только в вашем мозгу, автоматически речь идет о самом новом стандарте, в остальных случаях это требуется обозначить
Нет, конечно. Так принято во всех уважающих себя форумах по языкам программирования.

Странно, что приходится объяснять такую естественную вещь. Да и какие могут быть альтернативы? Предложите.

Цитата Сообщение от fish9370 Посмотреть сообщение
Вероятно вы и операционную систему подразумеваете и компилятор?
Что за чушь? Нет никаких "операционных систем" и "компиляторов". Есть только стандартный язык С. Для вопросов, специфичных конкретным "операционным системам" и "компиляторам" обычно заводятся отдельные форумы, специально для этого предназначенные. В том числе они есть и здесь, на cyberforum.ru.

Обсуждения поведения конкретных реализаций языка С боле чем уместно и в этом форуме, но, разумеется, требует явного указания конкретной реализации.

Цитата Сообщение от fish9370 Посмотреть сообщение
Пожалуйсте не включайте дурака, я имел ввиду код, в котором используются фичи из C17, много такого кода видели?
Нет, не много. Но тогда возникает вопрос, зачем вы вообще притащили в эту тему упоминание каких-то конкретных стандартов языка. (Напомню, что сделали это именно вы.) Тема-то никакой привязки к конкретным стандартам не имеет вообще. Это ли не "включение дурака"?
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
14.07.2021, 20:36
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
вторгаясь в область видимости уже существующего i, не разрушаем ли мы его значение, которое может быть кому-то еще нужно?
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
То есть все понимают, что по условию сравнения нам НЕ нужно значение переменной цикла после завершения цикла.
Ну вы "все" между собой уже договоритесь как-нибудь, а то путаетесь в показаниях.
На самом деле спор пустой. Всё проще: если голова до отказа забита догмами, одна из которых звучит, как
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
переменные лучше объявлять максимально локально
то именно так всегда и поступайте!

Не по теме:

Очень понравилось про

Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Очевидно их никто не научил
Действительно, Дейтлы - дурачки какие-то! Пишут книжки, сами не понимают, о чём...


А если немного задуматься, почему переменную, чаще всего используемую, как счётчик циклов, называют именно i, "всем" станет очевидно, что от слова integer. То есть объявив один раз в начале функции int i и используя её исключительно, как счётчик циклов, не прийдётся каждый раз встречая в программе for (i = 0; ... возвращаться в начало программы, чтобы посмотреть, как там она объявлена. Ну и в качестве бонуса, как я "мимо кассы" заметил, сразу после цикла можно посмотреть, дошёл ли он до конца, не нагромождая при этом нелепых конструкций, единственное объяснение которым - опять же тупое следование догмам, которые по сути и догмами-то не являются. Просто рекомендации, иногда полезные, иногда не очень...
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,327
14.07.2021, 21:20
Цитата Сообщение от easybudda Посмотреть сообщение
опять же тупое следование догмам, которые по сути и догмами-то не являются. Просто рекомендации, иногда полезные, иногда не очень...
Разумеется.

Все популярные рекомендации типа "good practices" являются по своей сути "догмами". С таким же успехом можно заявлять, что использование циклов for/while/do является не более чем следованием некоей "догме", в том время как все эти конструкции можно реализовать через if и goto. С таким же успехом можно утверждать, что все логически операции можно записать через "исключающее или", а те, кто утверждает, что логические выражения в терминах !, && и || более удобочитаемы - лишь "догматики".

Но в данном случае мы все таки говорим не о таком абсурдном предложении использовать goto, а об общеизвестном, широко принятом и интуитивно естественном правиле: минимизировать область видимости переменной. Есть разница.

Что интересно, кстати, в книгах Дейтела и Детела (в том числе и в этой) встречаются ссылки на "CERT C Secure Coding Standard", где тоже присутствуют все базовые законы/правила/рекомендации грамотного программирования на С. Присутствует, разумеется, и эта рекомендация (https://wiki.sei.cmu.edu/confl... +functions). Однако в своих примерах они сами нередко его нарушают.


Цитата Сообщение от easybudda Посмотреть сообщение
Ну вы "все" между собой уже договоритесь как-нибудь, а то путаетесь в показаниях.
Да что вы говорите?

Всем понятно, что в первом утверждении идет речь об проблеме удобочитаемости кода, как было ясно сказано изначально. То есть о трудности понимания семантики кода посторонним "читателем" - человеком, который в общем случае заранее не имеет ни малейшего представления об этой семантике, а имеет на руках лишь код, который ему надо "прочитать".

А во втором утверждении идет речь о постановке задачи для нас здесь - "писателей", т.е. людей которые, наоборот, уже заранее знают требуемую семантику кода и на основе этого выбирают способ написания еще не написанного кода.

Это диаметрально противоположные случаи. Странно, что такую очевидную разницу между "писателем" и "читателем" кода приходится разжевывать.
0
фрилансер
 Аватар для Алексей1153
6500 / 5731 / 1134
Регистрация: 11.10.2019
Сообщений: 15,338
14.07.2021, 21:21
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
переменные лучше объявлять максимально локально
категорически поддерживаю!
0
13 / 13 / 0
Регистрация: 21.10.2011
Сообщений: 58
14.07.2021, 21:38
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
Что за чушь? Нет никаких "операционных систем" и "компиляторов".
с вами все ясно, успехов
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,327
14.07.2021, 21:44
Цитата Сообщение от TheCalligrapher Посмотреть сообщение
С таким же успехом можно утверждать, что все логически операции можно записать через "исключающее или",
Оговорился. Имелись в виду "стрелка Пирса" или "штрих Шеффера".

Цитата Сообщение от fish9370 Посмотреть сообщение
с вами все ясно, успехов
Вот и славненько.
0
226 / 184 / 80
Регистрация: 13.04.2014
Сообщений: 694
15.07.2021, 09:30
Цитата Сообщение от easybudda Посмотреть сообщение
опять же тупое следование догмам, которые по сути и догмами-то не являются. Просто рекомендации, иногда полезные, иногда не очень...
можно написать всю программу в main и не писать своих функций. код будет дублироваться, если нужен этот функционал несколько раз выполнить. естественно такой код стараются вынести в отдельную функцию, что было проще писать и читать код. надеюсь в этом случае не нужно вам доказывать, что так реально удобнее всем




тоже самое применимо к объявлению переменных(так тоже реально удобнее всем, и тем кто читает код и тем кто пишет), это должно было стать очевидно из прошлых постов. если переменная не нужна в вышестоящей или соседней по вложенности области видимости, то ее следует оттуда убрать.

1. человек читающий код, не будет на нее отвлекаться и сможет сосредоточить свое внимание на том, что действительно сейчас используется. внимание не безгранично

2. такой код легче рефакторить, чем меньше область видимости переменной, тем проще понять какой код взаимодействует с переменной, что ускорит рефакторинг

3. эту переменную никто случайно не изменит во время выполнения программы

4. я бы что-нибудь написал еще насчет оптимизаций, что зачем в стек класть раньше времени, но я в этом далеко не эксперт, но думаю, что в этом есть какой-то смысл. (буду рад, если объясните мне, что это никак не влияет)

5. не нужно извращаться в названиях переменных, если такое имя уже занято переменной с другим типом. что в итоге приведет к еще большим проблемам при чтении кода

6.примеры с тем, что нужно потом использовать значение счетчика после цикла — откровенно не очень. я предложил сделать отдельную переменную для этого т.к. у каждой переменной должно быть свое предназначение. Но это назвали костылем. а объявлять переменную в самом верху, чтобы можно было ее везде использовать — не костыль??? В одном месте она счетчик(смещение для указателя на массив) для цикла, в другом месте это число на котором цикл оборвался, в третьем это например возраст (бизнес-логика бывает разная, от нее зависит код)

такое ощущение, что вы просто экономите переменные, что реально не имеет место быть

очень тяжело приходить в проект и читать код, где все переменные объявлены глобальными или в начале функции(хотя используются где-то внутри один раз в каком-нибудь цикле или if/else блоке) и ищи потом где и как они используются. это очень не профессионально
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13212 / 6845 / 1825
Регистрация: 18.10.2014
Сообщений: 17,327
15.07.2021, 10:10
Цитата Сообщение от asdzxc Посмотреть сообщение
4. я бы что-нибудь написал еще насчет оптимизаций, что зачем в стек класть раньше времени, но я в этом далеко не эксперт, но думаю, что в этом есть какой-то смысл. (буду рад, если объясните мне, что это никак не влияет)
Это очень правильный момент, но в то же время это хорошо формализуемая задача, которая прекрасно решается компилятором.

То есть да, можно сказать, что ограничивая время жизни переменной вы помогаете оптимизатору. Но на самом деле оптимизатору в таких вопросах ваша помощь не нужна - она и сам прекрасно со всем справится.

Цитата Сообщение от asdzxc Посмотреть сообщение
очень тяжело приходить в проект и читать код, где все переменные объявлены глобальными или в начале функции
За сваливание всех переменных в одну кучу в начале функции нужно лупить по рукам разу и больно. Об этом спору нет.
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
 Аватар для easybudda
12843 / 7592 / 1766
Регистрация: 25.07.2009
Сообщений: 13,981
15.07.2021, 10:50
Цитата Сообщение от asdzxc Посмотреть сообщение
можно написать всю программу в main и не писать своих функций. код будет дублироваться, если нужен этот функционал несколько раз выполнить. естественно такой код стараются вынести в отдельную функцию, что было проще писать и читать код. надеюсь в этом случае не нужно вам доказывать, что так реально удобнее всем
А я где-то утверждал, что нужно все переменные объявлять в начале функции, даже, если какие-то из них встречаются всего пару раз внутри одного блока? У вас у "всех" (с TheCalligrapher на пару) очаровательная привычка доводить любое не вписывающееся в ваши представления утверждение до абсурда и вываливать абсолютный бред как бы от автора утверждения. У Л. Кэррола в книжке "Алиса в стране чудес" два персонажа были с той же логикой - Шляпник и Мартовский Заяц.
Не нужно доходить до фанатизма. Если переменная используется с одной целью но в разных местах функции, то её проще объявить в начале функции. Если переменная нужна только внутри блока, то её и нужно объявлять в этом блоке.
1
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
15.07.2021, 11:03
Совершенно верно, фанатизм в любом виде вреден.
Цитата Сообщение от easybudda Посмотреть сообщение
очаровательная привычка доводить любое не вписывающееся в ваши представления утверждение до абсурда и вываливать абсолютный бред как бы от автора утверждения
5 баллов!
1
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
16.07.2021, 08:09
lozka, у вас оператор if-else будет понятнее ? Если да, то можно попробовать:

1.
Цитата Сообщение от lozka Посмотреть сообщение
printf("%s\n", count % 2 ? "***" : "+++++++");
Можно переписать в эквивалентном виде (понятнее):
C
1
2
3
4
    if (count % 2 != 0)               // или if (count % 2)
        printf("%s\n", "***");        // или printf("***\n");
    else
        printf("%s\n", "+++++++");    // или printf("+++++++\n");

2.
Цитата Сообщение от lozka Посмотреть сообщение
printf("%s", row % 2 ? "<" : ">");
И аналогично:
C
1
2
3
4
    if (row % 2 != 0)         // или if (row % 2)
        printf("%s", "<");    // или printf("<");
    else
        printf("%s", ">");    // или printf(">");
Все уже ясно ? Ок. Успехов !
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.07.2021, 08:09

Напишите, что выведет на экран следующая программа
Напишите, что выведет на экран следующая программа: Program V1_Z1; Var A,B: Integer; Procedure F1 (X,Y:Integer); Begin ...

Определите, что выведет следующая программа на экран
Определите, что выведет следующая программа на экран. Максимально подробно объясните свой ответ var a , b : i n t e g e r ; f u n c...

Что выведет на экран следующая программа и почему?
2. Что выведет на экран следующая программа и почему? x = 1 def double_x(): global x x *= 2 print(x,...

Что выведет на консоль следующая программа и почему?
выведет 15, нужно обьяснить почему class Person { private int age = 15; public int Age { get { return age; } ...

Определите, что выведет следующая программа на экран
Определите, что выведет следующая программа на экран. var a , z , x , y , p : integer ; procedure p2 (var y : integer ; var z : integer...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
32
Ответ Создать тему
Новые блоги и статьи
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства. Жизнь действительно предъявляет каждому. . .
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
Лето уходит
kumehtar 17.08.2026
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины". За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html Задача: . . .
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
Часы электронные
Uhbif79 12.08.2026
Выкладываю программу часов. Программа позволяет: 1. Использовать системное время и дату, 2. Есть возможность вводить время и дату вручную. 3. Реализованы 2 будильника: начало и конец рабочего дня. . . .
Часы с будильником на основе класса QLCDNumber
Uhbif79 12.08.2026
Всем добрый день, выкладываю программу часов с будильником на основе класса QLCDNumber. Здесь я пробовал самостоятельно создавал классы, впервые столкнулся с видимостью переменной одного класса из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru