netlib.narod.ru< Назад | Оглавление | Далее >

1.1. Начнем, пожалуй

Единственный способ выучить новый язык программирования — это писать на нем программы. При изучении любого языка первой, как правило, предлагают написать приблизительно следующую программу:


Напечатать слова Hello world


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

Си-программа, печатающая «Hello world», выглядит так:

  #include <stdio.h>

  main()
  {
    printf ("Hello world\n");
  }

Как запустить эту программу, зависит от системы, которую вы используете. Так, в операционной системе UNIX необходимо поместить исходный текст программы в файл с именем, заканчивающимся символами .c, например в файл hello.c, который затем компилируется с помощью команды

  cc hello.c

Если вы все сделали правильно — не пропустили где-либо знака и не допустили орфографических ошибок, то компиляция пройдет «молча» и вы получите файл, готовый к исполнению и названный a.out. Если вы теперь запустите этот файл на выполнение командой

  a.out

программа напечатает

  Hello world

В других системах правила запуска программ на выполнение могут быть иными; чтобы узнать о них, поговорите со специалистами.

Теперь поясним некоторые моменты, касающиеся самой программы. Программа на Си, каких бы размеров она не была, состоит из функций и переменных. Функции содержат инструкции, описывающие вычисления, которые необходимо выполнить, а переменные хранят значения, используемые в процессе этих вычислений. Функции в Си похожи на подпрограммы и функции Фортрана или на процедуры и функции Паскаля. Приведенная программа — это функция с именем main. Обычно вы вольны придумывать любые имена для своих функций, но main — особое имя: любая программа начинает свои вычисления с первой инструкции функции main. Это означает, что каждая программа должна в каком-то месте содержать функцию с именем main.

Обычно функция main для выполнения своей работы пользуется услугами других функций; одни из них пишутся самим программистом, а другие берутся готовыми из имеющихся в его распоряжении библиотек. Первая строка программы:

  #include <stdio.h>

сообщает компилятору, что он должен включить информацию из стандартной библиотеки ввода-вывода. Эта строка встречается в начале многих исходных файлов Си-программ. Стандартная библиотека описана в главе 7 и приложении В.

Один из способов передачи данных между функциями состоит в том, что вызывающая функция передает список значений, называемых аргументами. Этот список помещается в круглых скобках после имени функции. В нашем примере main определена как функция, которая не ждет никаких аргументов, на что указывает пустой список аргументов ( ).



#include <stdio.h>                 Включение информации о стандартной библиотеке
main()                             Определение функции с именем main
                                   не получающей никаких аргументов
{                                  Инструкции main заключаются в фигурные скобки
    printf("hello, world\n");      main вызывает библиотечную функцию printf
                                   для печати строки символов
}                                  \n представляет символ перехода на новую строку

Первая программа на Си



Составляющие функцию инструкции заключаются в фигурные скобки { }. Функция main содержит только одну инструкцию

  printf("Hello world\n");

Чтобы вызвать функцию необходимо указать ее имя, после которого следует список аргументов, заключенный в круглые скобки. Таким образом, приведенная выше строка — это вызов функции printf с аргументом "Hello world\n". Функция printf — это библиотечная функция, которая в данном случае напечатает последовательность символов, заключенную в двойные кавычки.

Последовательность символов в двойных кавычках, такая как "Hello world\n", называется символьной строкой или строковой константой. Пока что в качестве аргументов для printf и других функций мы будем использовать только символьные строки.

В Си комбинация \n внутри строки символов обозначает символ перехода на новую строку и при печати вызывает переход к левому краю следующей строки. Если вы удалите \n (стоит поэкспериментировать), то обнаружите, что печать не закончится переходом на новую строку. Символ перехода на новую строку следует указывать в аргументе функции printf явным образом. Если вы попробуете что-нибудь вроде

  printf("Hello world
  ");

компилятор выдаст сообщение об ошибке.

Функция printf никогда не вставляет символ перехода на новую строку автоматически, так что одну строку можно напечатать по частям с помощью нескольких вызовов функции printf. Нашу первую программу можно написать так:

  #include <stdio.h>
  
  main()
  {
    printf("Hello ");
    printf("world");
    printf("\n");
  }

В результате ее выполнения будет напечатана та же строка, что и раньше.

Обратите внимание, что \n обозначает только один символ. Такие особые комбинации символов, начинающиеся с обратной наклонной черты, и называемые управляющими последовательностями, широко применяются для обозначения трудно представимых или невидимых символов. Среди прочих в Си имеются символы \t, \b, \", \\, обозначающие соответственно табуляцию, возврат на один символ назад («забой» последнего символа), двойную кавычку и саму наклонную черту. Полный список таких символов представлен в параграфе 2.3.


Упражнение 1-1


Выполните программу, печатающую «Hello world», в вашей системе. Поэкспериментируйте, удаляя некоторые части программы, и посмотрите, какие сообщения об ошибках вы получите.



Упражнение 1-2


Выясните, что произойдет, если в строковую константу в аргументе функции printf вставить управляющую последовательность \x, где х — символ, не входящий в представленный выше список.



netlib.narod.ru< Назад | Оглавление | Далее >

Сайт управляется системой uCoz