Общая структура программы языке c. Переменные и массивы

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

Первоначально язык Си задумывался как заменитель Ассемблера для написания операционных систем. Поскольку Си - это язык высокого уровня, не зависящий от конкретной архитектуры, текст операционной системы оказывался легко переносимым с одной платформы на другую. Первой операционной системой, написанной практически целиком на Си , была система Unix. В настоящее время почти все используемые операционные системы написаны на Си . Кроме того, средства программирования, которые операционная система предоставляет разработчикам прикладных программ (так называемый API - Application Program Interface ), - это наборы системных функций на языке Си .

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

В данном разделе будут приведены лишь основные понятия языка Си (и частично C++). Это не заменяет чтения полного учебника по Си или C++, например, книг и .

Мы будем использовать компилятор C++ вместо Cи. Дело в том, что язык Си почти целиком входит в C++, т.е. нормальная программа , написанная на Си , является корректной C++ программой. Слово "нормальная" означает, что она не содержит неудачных конструкций, оставшихся от ранних версий Си и не используемых в настоящее время. Компилятор C++ предпочтительнее, чем компилятор Си , т.к. он имеет более строгий контроль ошибок. Кроме того, некоторые конструкции C++, не связанные с объектно-ориентированным программированием, очень удобны и фактически являются улучшением языка Си . Это, прежде всего, комментарии // , возможность описывать локальные переменные в любой точке программы, а не только в начале блока, и также задание констант без использования оператора #define препроцесора. Мы будем использовать эти возможности C++, оставаясь по существу в рамках языка Си .

Структура Си-программы

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

В языке Си исходные файлы бывают двух типов:

  • заголовочные, или h-файлы;
  • файлы реализации, или Cи-файлы.

Имена заголовочных файлов имеют расширение " .h ". Имена файлов реализации имеют расширения " .c " для языка Си и " .cpp ", " .cxx " или " .cc " для языка C++.

К сожалению, в отличие от языка Си , программисты не сумели договориться о едином расширении имен для файлов, содержащих программы на C++. Мы будем использовать расширение " .h " для заголовочных файлов и расширение " .cpp " для файлов реализации.

Заголовочные файлы содержат только описания. Прежде всего, это прототипы функций. Прототип функции описывает имя функции , тип возвращаемого значения, число и типы ее аргументов. Сам текст функции в h-файле не содержится. Также в h-файлах описываются имена и типы внешних переменных, константы , новые типы, структуры и т.п. В общем, h-файлы содержат лишь интерфейсы , т.е. информацию, необходимую для использования программ, уже написанных другими программистами (или тем же программистом раньше). Заголовочные файлы лишь сообщают информацию о других программах. При трансляции заголовочных файлов, как правило, никакие объекты не создаются. Например, в заголовочном файле нельзя определить глобальную переменную. Строка описания

определяющая целочисленную переменную x , является ошибкой. Вместо этого следует использовать описание

означающее, что переменная x определена где-то в файле реализации (в каком - неизвестно). Слово extern (внешняя) лишь сообщает информацию о внешней переменной, но не определяет эту переменную.

Файлы реализации , или Cи-файлы, содержат тексты функций и определения глобальных переменных. Говоря упрощенно, Си -файлы содержат сами программы, а h-файлы - лишь информацию о программах.

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

Файлы реализации могут подключать описания, содержащиеся в заголовочных файлах. Сами заголовочные файлы также могут использовать другие заголовочные файлы. Заголовочный файл подключается с помощью директивы препроцессора #include . Например, описания стандартных функций ввода-вывода включаются с помощью строки

#include

(stdio - от слов standard input /output). Имя h-файла записывается в угловых скобках, если этот h-

Рис.1 Структура программы на языке Си.

Внутренняя структура программы

Исполняемая программа на Си состоит из 4 частей: область команд, область статических данных, область динамических данных, область стека. см. Рис.2.

1. Область команд содержит машинные команды; инструкции, которые должен выполнить микропроцессор.

2. Область статических данных для хранения переменных, с которыми работает программа;

3. Область динамических данных для размещения дополнительных данных, которые появляются в процессе работы программы (например, временных переменных).

4. Стек используется для временного хранения данных и адресов возврата из функций.


тело функции /*тело функции*/

printf("Hello World!");

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



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

3-я строка – начало тела функции. {} определяют тело функции (в Паскале - это begin и end)

4-я строка – комментарий, он не компилируется, а только поясняет что делается.

5-я строка – библиотечная функция – печатать на экране, выражение в скобках на этой строке – параметр функции, он всегда берётся в кавычки.

; - это признак оператора Си, это часть оператора, а не разделитель операторов, как в Паскале.

Советы, как сделать программу читаемой:

1) Выбирать осмысленные имена

2) Использовать комментарии

3) Использовать пустые строки для того, чтобы отделить одну часть функции от другой

4) Помещать каждый оператор в другой строке.

БАЗОВЫЕ ЭЛЕМЕНТЫ ЯЗЫКА СИ

Рассмотрим обязательные элементы, с помощью которых должна оформляться программа на Си:

1. Комментарии – используются для документирования программы. Любая программа должна содержать комментарии: какой алгоритм применяется, что делает программа…

Ø 1 способ : /* Текст */ - в любом месте программы.

Как только компилятор встречает /**/, он их пропускает. Компилятор игнорирует /* */, так как он не в состоянии интерпретировать язык, отличающийся от языка Си. То есть, если вы хотите исключить из компиляции какую-то строку, то заключите её в /**/.

Ø 2 способ : если комментарий большой, то используем такой тип

/* Строка 1 - для комментария любой длины

строка 3*/

Ø 3 способ : // - текст до конца строки.

2. Идентификатор - это имя, которое присваивается какому-либо объекту (переменной). Используются строчные и прописные буквы, цифры и знак подчёркивания. Строчные и прописные буквы различаются. (В Бейсике не различаются). Если назвать переменную name, Name или NAME, то это будут разные переменные.

Начинаются идентификаторы с буквы или знака подчеркивания. Например, _name. Но не рекомендуется начинать с _, так как этот знак используется для глобальных имен сомого языка Си.

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

b – байт; ch – однобайтовый символ;

w – слово; f – флаг;

l – длинное слово; fn – функция;

u – беззнаковое; p – указатель;

с – счетчик; d – разность двух пре-х

cz – строка; и т.д.

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

ДАННЫЕ В ПРОГРАММЕ НА СИ

Каждая программа оперирует с данными . Они присутствуют в программе в виде переменных и констант.

Данные, которые могут изменяться или которым может присваиваться значения во время выполнения программы, называются переменными .

Данные, которым устанавливаются определенные значения и они сохраняют свои значения на всем протяжении работы программы, называются константами.

Константы

Константы - это фиксированные значения. Значение, будучи установлено, больше не меняется. Константы бывают различных типов. Типы отличаются по принципу размещения в памяти ЭВМ, а для человека по виду записи. В Си существует 7 ключевых слов, используемых для указания на различные типы данных: int, long, short, unsigned, char, float, double.

Типы констант :

a) Целые и длинные целые . Записываются в десятичной, восьмеричной и шестнадцатеричной системе счисления. Они могут быть знаковые и беззнаковые.

Десятичная система: целые константы занимают 16 бит памяти, и принимают диапазон значений: -32768 до +32767 (2 15) . Если константа беззнаковая, то диапазон удваивается: 0 до 65535 (за счет того, что 15-й разряд – знаковый используется под число). Для обозначения беззнакового числа используют суффикс u (unsigned), например 123u.

Если число больше 40000, то компилятор автоматически преобразует его в отрицательное число, поэтому суффикс u обязателен:40000u. В примере 123u компилятору все равно – есть суффикс или его нет, так как это число входит в диапазон 32767.

Длинное целое занимает 32 бита , диапазон значений

± 2147483648 (знаковое длинное – long). Если вы поставили суффикс l , то, несмотря на число, будет занято 32 бита. Например: -5326l

0 – 4294967295 беззнаковое длинное - (unsigned long). Диапазон увеличивается за счет 31-го бита. Используются суффиксы ul , например, 32659ul.

Восьмеричная система :

Если число начинается с цифры 0, оно интерпретируется как восьмиричное число

16 битов 0 ¸ 077777

0100000 ¸ 0177777u

32 бита 0200000 ¸ 01777777777l

020000000000 ¸ 037777777777ul

Шестнадцатеричная система :

Если число начинается с символа 0х, то оно интерпретируется как шестнадцатиричное

16 битов 0x0000 ¸ 0x7FFF

0x8000 ¸ 0xEFFFu

32 бита 0x10000 ¸ 0x7FFFFFFFl

0x80000000 ¸ 0xFFFFFFFFul

b) Вещественные константы . Это числа с плавающей точкой. Значение имеет дробную часть. По умолчанию все вещественные константы имеют тип двойной точности double . Занимают в памяти 8 байт (даже если 0,0). Диапазон значений ±1*10 ± 307 , можно записать и в научной форме, например: 0,5е+15 или

1,2е-3=1,2*10 -8 =0,0012.

Принудительно можно задать формат одинарной точности float . Число будет занимать 4 байта , используется суффикс f (5.7 f). Соответсвенно диапазон сужается ±1*10 ± 37

А также расширенной точности long double – 10 байт . (3.14L)

Знак + можно не писать. Разрешается опускать либо десятичную точку, либо экспоненциальную часть, но не одновременно (.2; 4е16). Можно не писать дробную либо целую часть, но не одновременно (100.; .8е-5)

c) Символьные константы. Это набор символов, используемых в ЭВМ.

Делятся на 2 группы: печатные и не печатные (управляющие коды). Символьная константа включает в себя только 1 символ, который необходимо заключить в апострофы и занимает 1 байт памяти.

Любой символ имеет своё двойное представление в таблице ASCII. В программе символьные константы вводятся в одинарных кавычках, при компиляции в программу подставляется числовое значение символа из ASCII. Один символ занимает 1 байт.

Символ "А" "a" " " "\n"

Его код 65 97 32 10

Как целый тип данных "A"=0101 8 , 01000001 2 , 41 16 , 65 10 . Коды запоминать не надо.

Управляющие коды начинаются с символа \ и тоже заключаются в апострофы. Наиболее распространенные управляющие коды:

\n – переход на новую строку

\t – табуляция (сдвиг курсора на некоторое фиксированное значение)

\b – шаг назад (сдвиг на одну позицию назад)

\r – возврат каретки (возврат к началу строки)

\f – подача бланка (протяжка бумаги на 1 страницу)

\’ - апостроф

\” - кавычки

Последние три знака могут выступать символьными константами, а также применяться в функции printf() , поэтому применение их в качестве символов может привести к ошибке. Например, если мы хотим вывести строку «Символ \ называется слеш», то оператор должен выглядеть так:

рrintf(«Символ \\ называется слеш»);

a) Строковые константы - содержат последовательность из 1 и более символов, заключённых в " ". Расходуется по 1 байту на любой символ + 1байт на так называемый ноль-символ - признак конца строки. Ноль-символ – не цифра ноль, он означает, что количество символов в строке (N) должно быть на 1 байт больше (N+1), чтобы обозначать конец строки (компилятор его прибавляет сам автоматически). Например: «строка текста» занимает (13+1) байт;

«Мир» -

Программа, написанная на C# состоит из следующих блоков:

  • объявление пространства имен (своего рода контейнера);
  • объявление класса (основная сущность программы);
  • методы класса (подпрограммы), как минимум метод Main ;
  • операторы и выражения;
  • комментарии.

Пример простейшей программы

Давайте рассмотрим простейшую программу, написанную на C#. Это будет консольное приложение, выводящее строку «Hello World» (своего рода классика, для первой программы в практике программиста). Код такой программы приведен ниже, давайте рассмотрим его:

//Подключение пространства имен System using System; //Объявление пространства имен namespace ProgramStructure { //Объявление класса class Program { //Главный метод программы static void Main(string args) { //Вывод строки Console.WriteLine("Hello World!"); //Вспомогательный оператор Console.ReadKey(); } } }

Первая строка данной программы, это комментарий. Комментарии никак не влияют на работу программы, они нужны для человека, который будет сопровождать код программы (дорабатывать её, исправлять ошибки и т.п.).

Вторая строка программы (using System; ) является оператором, который подключает стандартное пространство имен System . По сути, мы получаем доступ к набору классов имеющихся в «контейнере» System . Как видно, данная строка состоит из двух слов, первое (ключевое слово using ) означает, что мы хотим подключить пространство имен, а второе System — название нужного пространства имен.

В конце второй строки стоит символ «;», который обозначает завершение оператора. Каждый оператор программы должен заканчиваться таким символом.

Четвертая строка программы снова является комментарием, ровно как и строки 7, 10, 13, 15. Комментарии в C# начинаются с символов «//» (две косые черты, два слэша), и действуют только до конца строки.

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

В пятой строке (namespace ProgramStructure ) объявляется своё пространство имен, оно называется «ProgramStructure». Пространство имен является своего рода контейнером, и оно ограничивается фигурными скобками (открывающей — строка 6 и закрывающей — строка 19), следующими за его названием. Таким образом, все что находится между строками 6 и 19 принадлежит пространству имен ProgramStructure .

В строке 8 объявляется класс с именем «Program», это основной и единственный класс нашей программы. Как можно заметить, для объявления класса служит ключевое слово class за которым следует имя класса. В программе, может быть и не один, а несколько классов. Как правило, класс состоит из набора методов, которые определяют так называемое поведение класса (если хотите, функциональность). Границы класса, так же как и пространства имен обозначаются фигурными скобками (строки 9 и 18). В нашем случае, класс имеет только один метод, это метод Main .

В строке 11 как раз и объявляется метод Main . Этот метод является главным в нашей программе, так называемая точка входа в программу. Это означает, что при запуске программы, первым будет выполняться именно метод Main . Каждый метод тоже имеет границы, которые так же обозначаются фигурными скобками (строки 12 и 17).

Метод Main нашей программы содержит только два оператора. Эти операторы значатся в строках 14 и 16. Первый выводит сообщение «Hello World!». А второй, является вспомогательным, он заставляет программу ждать нажатие клавиши на клавиатуре, и не дает её до этого момента завершить свое выполнение (без этого оператора, программа бы вывела строку и быстро закрылась, так что мы даже не успели прочитать что она вывела).

А теперь попробуйте собрать и запустить это программу в Visual Studio. Для этого нужно:

  • запустить Visual Studio;
  • создать новый проект консольного приложения;
  • скопировать строки 13-16 из приведенного выше примера;
  • вставить эти строки в метод Main созданного в Visual Studio проекта;
  • нажать клавишу F5.

О том как создавать проект консольного приложения в Visual Studion я подробно рассказывал в , советую прочитать его.

СТРУКТУРА ПРОСТОЙ ПРОГРАММЫ

Теперь, после того как мы привели конкретный пример, вы готовы к тому, чтобы познакомиться с несколькими общими правилами, касающимися программ, написанных на языке Си. Программа состоит из одной или более функций, причем какая-то из них обязательно должна называться main() . Описание функции состоит из заголовка и тела. Заголовок в свою очередь состоит из директив препроцессора типа #include и т. д. и имени функции.

РИС. 2.4. Структура функции в языке Си: заголовок и тело.

Из книги C++ автора Хилл Мюррей

1.6 Структура программы Программа на С++ обычно состоит из большого числа исходных файлов, каждый из которых содержит описания типов, функций, переменных и констант. Чтобы имя можно было использовать в разных исходных файлах для ссылки на один и тот же объект, оно должно

Из книги Домашний архитектор. Подготовка к ремонту и строительству на компьютере автора Булат Виталий

Структура программы Super Home Suite Рассмотрим главное окно программы Super Home Suite (демонстрационной версии 3.5.2) (рис. 2.1). Рис. 2.1. Главное окно программы Super Home SuiteВверху расположено системное меню, включающее разделы команд для управления программой, редактированием данных,

Из книги Информатика и информационные технологии: конспект лекций автора Цветкова А В

Структура программы Окно программы PromOffice Euroremont (рис. 3.1) состоит из нескольких частей. Вверху находится горизонтальная панель с главным меню, под ней – панель инструментов. Остальную область окна занимают панели для работы с данными. В последней версии программы в правом

Из книги Информатика и информационные технологии автора Цветкова А В

1. Структура программы на ассемблере Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность предложений языка,

Из книги Язык программирования С# 2005 и платформа.NET 2.0. автора Троелсен Эндрю

47. Структура программы на ассемблере Программа на ассемблере представляет собой совокупность блоков памяти, называемых сегментами памяти. Программа может состоять из одного или нескольких таких блоков-сегментов. Каждый сегмент содержит совокупность предложений

Из книги Язык программирования Си для персонального компьютера автора Бочков C. О.

Структура простой программы на C# Язык C# требует, чтобы вся логика программы содержалась в рамках определения некоторого типа (вспомните из главы 1, что термин тип используется для обозначения любого элемента множества {класс, интерфейс, структура, перечень, делегат}). В

Из книги Создаем вирус и антивирус автора Гульев Игорь А.

СТРУКТУРА ПРОГРАММЫ Исходная программа Исходная программа представляет собой совокупность следующих элементов: директив препроцессора, указаний компилятору, объявлений и определений. Директивы препроцессора специфицируют действия препроцессора по преобразованию

Из книги Язык Си - руководство для начинающих автора Прата Стивен

Структура и процесс загрузки COM-программы Что же представляет собой COM-программа, как она загружается в память и запускается?Структура COM-программы предельно проста – она содержит только код и данные программы, не имея даже заголовка. Размер COM-программы ограничен

Из книги Linux и UNIX: программирование в shell. Руководство разработчика. автора Тейнсли Дэвид

Структура и процесс загрузки EXE-программы В отличие от COM-программ, EXE-программы могут состоять из нескольких сегментов (кодов, данных, стека). Они могут занимать больше 64Кбайт.EXE-файл имеет заголовок, который используется при его загрузке. Заголовок состоит из

Из книги Конец холивара. Pascal vs C автора Кривцов М. А.

ПРИМЕР ПРОСТОЙ ПРОГРАММЫ НА ЯЗЫКЕ СИ Давайте рассмотрим простую программу на языке Си. Следует сразу сказать, что такой пример нужен нам лишь для выявления некоторых основных черт любой программы, написанной на языке Си. Далее мы дадим пояснения к каждой строке, но, перед

Из книги Linux и все, все, все... Статьи и колонки в LinuxFormat, 2006-2013 автора Федорчук Алексей Викторович

18.5.1. Простой цикл for Этот цикл просто выводит на экран список, который состоит из " 1 2 3 4 5". Чтобы получить доступ к каждой переменной, в качестве параметра имя_переменной указывается "loop".$ pg for_i#!/bin/sh# for_ifor loop in 1 2 3 4 5doecho $LOOP doneПриведенный выше сценарий выводит следующие данные:$

Из книги Описание языка PascalABC.NET автора Коллектив РуБоард

1. Структура программы на языке Pascal В программе на Pascal выделяют следующие основные разделы: заголовок программы, описания, операторы. Разделы отделяются друг от друга точкой с запятой. В конце программы ставится точка. Каждый раздел начинается со своего ключевого

Из книги автора

1. Структура программы на языке C Программа может состоять из одной или нескольких, связанных между собой, функций, главная из которых называется main – именно с нее начинается выполнение программы. Поэтому, наличие функции с таким именем в любой программе

Из книги автора

Создаём простой пул Освоив ранее основные понятия, мы научились понимать ZFS. Для обратной же задачи – чтобы ZFS понимала нас – нужно ознакомиться с её командами. Главные из них – две: zpool для создания и управления пулами, и zfs для создания и управления наборами данных.

Из книги автора

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

Из книги автора

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