Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
Fon Eberkopff
3 / 3 / 2
Регистрация: 06.02.2015
Сообщений: 21
Записей в блоге: 29
1

K&R: Решение упражнения 1.1

07.02.2015, 12:03. Просмотров 930. Ответов 2
Метки нет (Все метки)

Всем привет! )
Для обобщения опыта новичков и получения советов от ветеранов предлагаю публично обсуждать возможные решения упражнений из классической книги "Язык программирования С: ANSI C" (второе издание) в той последовательности, в которой они встречаются в книге.
Предлагаю следующую схему: я создаю тему с названием упражнения, выписываю само упражнение, предлагаю решение или выражаю просьбу помочь с решением. Далее рассматриваем любые способы решения данного упражнения.
На просторах интернета так же встречаются решения. Считаю уместным их тоже здесь рассматривать...
Начнём.

Упражнение 1.1. Запустите программу "hello, world" на выполнение в вашей системе. Поэкспериментируйте с ней выбрасывая определённые фрагменты программы и наблюдая за сообщениями об ошибках, которые будут появляться в связи с этим.

Вариант от K&R:
C
1
2
3
4
5
6
#include <stdio.h>
 
main()
{
    printf("Hello, world");
}
Сохраним этот исходный код в файл "kr_ex1_1.c".
Компилирование этого кода безболезненно проходит при наборе текста в gedit (текстовой редактор) и запуска в терминале на выполнение следующей строки: "gcc kr_ex1_1.c -o kr_ex1_1 && ./kr_ex1_1".

Но вот Дмитрий Храмов обратил внимание, что компилятор встроенный в Geany ругается:
http://dkhramov.dp.ua/index.php?n=Comp.KR01

У меня Geany написал:
C
1
2
3
4
5
6
7
8
9
gcc -Wall -o "kr_ex1_1" "kr_ex1_1.c" (в каталоге: /home/fe/c/KR)
kr_ex1_1.c:3:1: warning: return type defaults to ‘int[-Wreturn-type]
 main()
 ^
kr_ex1_1.c: In function ‘main’:
kr_ex1_1.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
Сборка прошла успешно.
Компилятор Qt точно так же ругается:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
11:37:56: Running steps for project proj2_qt_hello...
11:37:56: Configuration unchanged, skipping qmake step.
11:37:56: Starting: "/usr/bin/make" 
gcc -c -m64 -pipe -g -Wall -W -fPIE  -I/usr/lib/x86_64-linux-gnu/qt5/mkspecs/linux-g++-64 -I../proj2_qt_hello -I. -o main.o ../proj2_qt_hello/main.c
g++ -m64 -o proj2_qt_hello main.o    
../proj2_qt_hello/main.c:3:1: warning: return type defaults to 'int' [-Wreturn-type]
 main()
 ^
../proj2_qt_hello/main.c: In function 'main':
../proj2_qt_hello/main.c:6:1: warning: control reaches end of non-void function [-Wreturn-type]
 }
 ^
11:37:56: The process "/usr/bin/make" exited normally.
11:37:56: Elapsed time: 00:00.
Получается, что на примере простейшей программы мы видим заботу современных IDE о том, чтобы был указан тип возвращаемого значения для основной функции программы - main, через указания типа возвращаемого значения "int main..." и добавления в конце основной функции main "return 0;"

В итоге:
C
1
2
3
4
5
6
7
#include <stdio.h>
 
int main()
{
    printf("hello, world");
    return 0;
}
И больше никто не ругается.

Решение через массив:
http://www.programmingsimplified.com/c-hello-world-program

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
int main()
{
  char string[] = "Hello World";
 
  printf("%s\n", string);
 
  return 0;
}
Есть ещё размышления на тему "hello, world"?
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.02.2015, 12:03
Ответы с готовыми решениями:

Что делает эта строчка: ++x &amp;&amp; ++y || ++z; ?
Что делает эта строчка? ++x &amp;&amp; ++y || ++z;

K&R задание 1.9 Решение с использованием символьного массива, почему не работает?
Здравствуйте! Изучаю язык и азы программирования по книге Ритчи. В ней...

K&R 2.2 Напишите цикл, не используя || и &&
эквивалентный этому циклу for (i = 0; i &lt; lim-1 &amp;&amp; (c=getchar()) != '\n' &amp;&amp; c...

В чем отличие & и && ?
В чем отличие &amp; и &amp;&amp; ? например if (px == x &amp;&amp; py == y) и if (px...

Нужны готовые упражнения по учебнику: Стивен Прата
Нужны готовые упражнения по учебнику: Стивен Прата (СИ)

2
drfaust
330 / 217 / 79
Регистрация: 02.10.2008
Сообщений: 839
Записей в блоге: 1
Завершенные тесты: 1
07.02.2015, 12:55 2
K&R не совсем совпадает с ANSI-C стандартами. Например, если не указан тип, возвращаемый функцией, то подразумевается тип int, и копилер матюгается, что нужно вернуть int, а return или exit() нету.

А это вариант, где народ пытается предусмотреть всё возможное и невозможное http://ftpmirror.gnu.org/hello/hello-2.10.tar.gz
1
Evg
Эксперт CАвтор FAQ
19634 / 7326 / 551
Регистрация: 30.03.2009
Сообщений: 20,488
Записей в блоге: 30
08.02.2015, 11:40 3
Цитата Сообщение от Fon Eberkopff Посмотреть сообщение
Но вот Дмитрий Храмов обратил внимание, что компилятор встроенный в Geany ругается:
Только это не ошибка, а предупреждение. Т.е. программа с точки зрения стандарта языка скомпилируется и получится бинарный код, но компилятор тебя предупреждает о том, что ты ведёшь себя плохо и крутые пацаны так поступать не должны. Конкретно в данном случае недочёт в исходнике на работоспособность не влияет, но есть целый ряд предупреждений, которые говорят о том, что в исходнике программы есть логическая ошибка

Цитата Сообщение от Fon Eberkopff Посмотреть сообщение
И больше никто не ругается
Если в gcc будешь подавать опцию -Wall (выдача кучи всяких предупреждений), то увидишь то же самое

Добавлено через 1 минуту
Да и вообще, полезно себе завести привычку использовать gcc с опциями -Wall -Werror. Первая опция выдаёт наиболее важные предупреждения (но не все возможные, как может показаться по названию опции), а вторая превращает предупреждения в ошибку, в итоге программа с предупреждениями компилироваться не будет до тех пор, пока все предупреждения не устранить
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.02.2015, 11:40

Матрица. Подсчитать количество строк, ВСЕ элементы которых >=6 && <=8
Дан табель отметок. Нужно посчитать количество хорошистов. (Отметки &gt;=6 &amp;&amp; &lt;=8)...

Переписать цикл без использования операторов && и ||
Нижеприведенный цикл нужно написать без использования операторов &amp;&amp; и || : ...

Каким можно заменить операцию &&
Приветствую #include&lt;stdio.h&gt; int main (void) { int a=5;b=60;c; c=a&amp;&amp;amp;b;...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru