Основы языка Си: структура Си-программы, базовые типы и конструирование новых типов, операции и выражения. Основы языка си

Любая программа, написанная на языке Си, состоит из одной или более "функций", являющихся основными модулями, из которых она собирается.

Пример структуры простой программы на языке Си:

Общий вид

Пример

директивы препроцессора

# include

# define N 10

имя главной функции

начало тела главной функции

объявления переменных и массивов

int x=1; char str[N];

операторы программы

puts(" Введите имя ");

gets(str);

printf("\n %s, Вы %d мой гость!",str,x);

Конец тела главной функции

      1. Директивы препроцессора

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

Наиболее часто используется директива включения в программу файла

# include < name >

где name – имя файла, включаемого в текст программы.

Эту директиву называют директивой подстановки . Она предписывает компилятору поместить на её место файл name . Файл name называется заголовочным. Он содержит объявления данных и функций, используемых в программе. Например, включение в программу директивы

# include < math . h >

позволит использовать в программе стандартные математические функции, такие как sin x, cos x, ln x и т.д. Список стандартных математических функций будет приведён ниже.

Директива

# include < stdio . h >

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

Другой часто используемой директивой является директива определения

#define S1 S2

где S1, S2 – строки символов.

Препроцессор отыскивает в тексте программы строку символов S 1 и заменяет её строкой S 2 . Например, включение в программу директивы

# define P printf

позволит набирать на клавиатуре букву P вместо слова printf .

Эта замена не выполняется внутри текстовых строк (литералов), символьных констант и комментариев, т.е. действие директивы #define не распространяется на тексты, ограниченные кавычками, апострофами и находящимися внутри комментариев.

      1. Главная функция

Каждая программа на языке Си должна содержать объявление функции main (), которая называется главной функцией. Как правило, эта функция не имеет параметров и не возвращает никакого значения. Для указания этого факта используется слово void . Таким образом, строка с именем главной функции обычно имеет вид:

void main(void)

void main()

      1. Переменные и массивы

Массивом называется группа переменных одного типа с общим именем. Именем переменной или массива является идентификатор – последовательность, составленная из символов:

a – z, A - Z , 0 – 9,_(подчеркивание),

причём первым символом не может быть цифра. Строчные и прописные символы латинского алфавита воспринимаются как разные символы. В качестве имени переменной или массива не могут использоваться служебные слова языка Си. Основные служебные слова языка Си приведены в Приложении.

Элементы массива различаются своими номерами (индексами). Индекс может принимать только целые неотрицательные значения. Индекс записывается после имени массива в квадратных скобках. Индексов может быть несколько. В этом случае каждый индекс записывается в своих квадратных скобках.

В языке Си могут использоваться переменные и массивы различных типов. Данные каждого типа занимают определённое количество байт памяти и могут принимать значения из определённого диапазона. Объём этой памяти и, соответственно, диапазон принимаемых значений в разных реализациях языка Си могут различаться. Количество байт памяти, занимаемой переменной определённого типа для конкретной реализация языка Си можно определить с помощью операции sizeof (тип). Например, определить объём памяти, отводимой под переменную целого типа, можно так:

k = sizeof(int);

printf (“ Под переменную типа int отводится %d байт памяти”, k );

В данных методических указаниях рассматриваются три основных типа переменных и массивов, приведены типичные значения объёма занимаемой памяти и диапазона значений (табл. 1):

Таблица 1

Спецификатор типа (Ключевое слово)

Значение

Размер

памяти (байт)

Диапазон значений

Число целого типа

32768 . . . +32767

2147483648 . . . +2147483647

Действительный

Число действительного типа

3.4ּ10 -38 . . . 3.4ּ10 38

(по модулю)

Символьный

128 . . . +127

Несколько подробнее остановимся на переменной типа char . Как видно из табл. 1, переменная типа char занимает один байт памяти. В одном байте памяти можно записать либо целое число без знака из диапазона , либо целое число со знаком из диапазона [–128, 127]. Это число является кодом одного из 256 символов. Символ, соответствующий данному коду, определяется используемой кодовой таблицей. Таким образом, значение переменной типа char может рассматриваться либо как целое число, либо как символ, код которого равен этому числу.

Лекция № 1

Тема: Знакомство с языком C++. Операторы и типы данных

План

3. Переменные и их типы

4. Операторы и математические функции

5. Операторы ввода/вывода на языке С++

6. Пример программы на С++

1. История развития языка программирования С++

Языка C++, объединяющий в себе свойства языка С и объектно–ориентированного программирова­ния, стал один из главных языков программирования в 90–е годы и твердо продолжает оставаться таким в начале XXI века. Язык C++ получил в наследство от языка С такие качества, как эффективность, компакт­ность, быстрота выполнения и переносимость про­грамм. От объектно–ориентированного программи­рования язык C++ получил новую методологию программирования, позволяющую справиться с возрос­шей сложностью современных задач программирования. А такие элементы языка, как улучшенные шаблоны, привносят в язык C++ еще одну новую методологию программирования: обобщенное программирование. Это тройное наследство является для языка C++ одновре­менно и благословением, и проклятием. Оно делают язык очень мощным, но в то же время и сложным; а это означает, что программистам приходится больше изу­чать.

В последние несколько десятилетий компьютерная тех­нология развивалась поразительными темпами. Языки программирования также претерпели значительную эво­люцию. В 70–е годы такие языки программирования, как С и Pascal, помогли войти в эру структурного программи­рования, принесшего порядок в ту область, которая силь­но нуждалась в этом. Язык С предоставил в распоряже­ние программиста инструменты, необходимые для структурного программирования, а также обеспечил со­здание компактных, быстро работающих программ и возможность адресации аппаратных средств, например, возможность управления портами связи и накопителя­ми на магнитных дисках. Эти качества помогли языку С стать господствующим языком программирования в 80–е годы. Вместе с тем в эти годы появилась новая мо­дель программирования:объектно–ориентированное программирование, или ООП, воплощенное в таких язы­ках, как SmallTalk и C++.

Язык С

Сотрудник компании Bell Laboratories Кена Томпсона в 1969 году разработал язик B (би) для создания других программных систем. Однако этот язык был интерпретируемым, что не позволяло создавать на нем независимые исполняемые файлы. Тем не менее этот язык явился предшественником языка С.

В начале 70–х годов Денис Ритчи из компании Bell Laboratories занимался разработкой опе­рационной системы UNIX. Для выполнения этой ра­боты Ритчи нуждался в таком языке программирования, который был бы кратким, а также мог бы обеспечивать эффективное управление аппаратными средствами и создание компактных, быстро работающих программ. Традиционно такие потребности программистов удов­летворял язык ассемблера, который тесно связан с внут­ренним машинным языком компьютера. Однако язык ассемблера – это язык низкого уровня, т.е. он привязан к определенному типу процессора (или компьютера). Поэтому если программу на языке ассемблера необхо­димо перенести на компьютер другого типа, то ее при­ходится переписывать заново на другом языке ассемб­лера.

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

Язык С, как и большинство основных языков программирования нашего времени, является процедурным.

Язык С++

С развитием объектно–ориентированной технологии возможностей стандартного языка С уже было недостаточно. В результате появился язык С++.

Язык C++, так же как и язык С, является детищем ком­пании Bell Laboratories. Автор Бьярни Страуструп разработал этот язык в начале 80–х годов. По его собственным словам, «язык C++ был спроектирован главным образом так, чтобы мне и моим друзьям не приходилось программировать на ассемблере, С или различных современных языках высокого уровня. Его главная цель состояла в следующем: сделать так, что­бы отдельным программистам было легче и приятнее писать хорошие программы» .

Страуструп создал C++ на основе языка С, так как язык С был кратким, хорошо подходил для системного программи­ровании, был широко доступен и тесно связан с опера­ционной системой UNIX. Объектно–ориентированная часть языка C++ возникла под влиянием языка модели­рования Simula67. Страуструп добавил элементы ООП в язык С, не изменяя при этом существенно сам язык С.

Название C++ происходит от обозначения оператора инкремента ++ в языке С, который добавляет единицу к значению переменной. Название C++ подразумевает, что этот язык является усовершенствованной (++) версией языка С.

Обобщенное программирование

Обобщенное программирование – это еще одна парадигма программирования, поддерживаемая языком C++. Оно имеет общую с ООП цель – упростить повторное ис­пользование кодов программ. Однако, в то время как в ООП основ­ное внимание уделяется данным, в обобщенном про­граммировании упор делается на алгоритмы. И у него другая область применения. ООП – это инструмент дли разработки больших проектов, тогда как обобщенное программирование предоставляет инструменты для вы­полнения задач общего характера, таких как сортиров­ка данных. Термин обобщен­ный означает создание кода программы, независимого от типа данных. В языке C++ имеются данные различных типов – целые числа, числа с дробной частью, симво­лы, строки символов, определяемые пользователем сложные структуры, состоящие из данных нескольких типов. Если, например, требуется сортировать данные различных типов, то обычно для каждого типа создает­ся отдельная функция сортировки. Обобщенное про­граммирование расширяет язык таким образом, что по­зволяет один раз написать функцию для обобщенного (т.е. неопределенного) типа данных и затем использовать ее для разнообразных реальных типов данных. Это обес­печивается с помощью шаблонов языка C++. (начало)

2. Структура программы на С++

Программа C++ строится из отдельных блоков, на­зываемых функциями. Как правило, программа разделя­ется на ряд крупных задач, а затем для выполнения этих задач разрабатываются отдельные функции.

Большинство программ на С++ имеют следующий вид:

раздел подключения заголовочных файлов

заголовок программы (функции)

тело функции

Заголовок программы

Программа C++ состоит из одного или более модулей, называемых функциями. Выполнение программы начи­нается с функции, имеющей имя main(), поэтому в про­грамме обязательно должна присутствовать функция с таким именем. Если в про­грамме нет такой функции, то в нет и законченной программы; компилятор в этом случае указывает, что функция main() не была определена.

Описание такой функции выполняют в разделе заголовка программы и записывают в виде:

Важно учитывать тот факт, что компилятор С++ различает регистр символов. Поэтому, имя функции, набранное в другом регистре (например: Main() или MAIN()), будет распознаваться как неправильное.

Раздел подключения заголовочных файлов

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

Каждая программа на С++ вначале имеет директиву вида:

#include

Эта директива приводит к тому, что препроцессор добавляет в программу содержимое файла iostream. Это типичное для препроцессора действие: добавление или изменение текста в исходном коде перед компиляцией.

Директива #include приводит к тому, что содержимое файла iostream пере­дается в компилятор вместе с содержимым исходного файла. В сущности, содержимое файлаiostream заменя­ет в программе строку #include . Исходный файл не изменяется, а объединенный файл, созданный из исходного файла и файла iostream, обрабатывается на следующем этапе компиляции.

Такие файлы, как iostream, называются файлами вклю­чения (поскольку они включаются в другие файлы) или заголовочными файлами (поскольку они включаются в начале файла). Компиляторы C++ поставляются со мно­гими заголовочными файлами, каждый из которых под­держивает отдельное семейство программных средств. Заголовочные файлы в языке С по традиции имеют рас­ширение h, это самый простой способ идентификации типа файла по его имени. Например, заголовочный файл math.hподдерживает различные математические функ­ции языка С++.

Заголовочные файлы находятся в папке Include среды разработки Turbo C++. Если при запуске программы выдается ошибка, указывающая на отсутствие подключаемого заголовочного файла, то в среде Turbo C++ необходимо выполнить настройку. Для этого выполните команду Options – Directories, в поле Include Directoriesвведите..\INCLUDE, а в поле Library Directories введите..\LIB.

Тело функции

Тело функции содержит инструкции для ком­пьютера, т.е. определяет то, что собственно делает фун­кция.

Тело функции имеет следующий вид:

описание переменных;

операторы;

Как видно тело функции заключается в фигурные скобки. Описание переменных будет рассмотрено в следующем разделе лекции.

Оператор представляет собой инструкцию для компьютера. Чтобы понять исходный код, компилятор должен знать, когда заканчивается один оператор и начи­нается другой. В некоторых языках программирования используются разделители операторов. В языке Pascal один оператор от следующего отделяется точкой с запятой. В некоторых случаях точку с запятой в языке Pascal можно опускать, например, после оператора перед словом END, когда фактически не происходит разделение двух операторов. Но в языке C++, так же как и в языке С, применяется скорее признак (указатель) конца, чем разделитель. Признак конца – это точка с запятой, которая отмечает конец оператора; она является скорее частью оператора, чем разделителем между операторами. Практический резуль­тат заключается в том, что в языке C++ никогда нельзя опускать точку с запятой.

Инструкция RETURN 0 указывает на завершение работы функции и возврат в вызывающую программу. В главной функции main() эту инструкцию можно не указывать.

В тексте программ допускается использовать комментарии. В языке C++ комментарии обозначаются двойной на­клонной чертой (//). В программах C+ + можно использовать комментарии из языка С, которые заключены между символами /* и */.

Поскольку комментарий из языка С заканчивается не символом конца строки, а символом */, его можно продол­жать на несколько строк. В программах можно использо­вать любой из этих двух видов комментариев или оба вместе. (начало)

Пожалуйста, приостановите работу AdBlock на этом сайте.

Я надеюсь вы уже установили себе на компьютер какую-нибудь IDE и научились в ней компилировать программы. Если нет, то

Все программы, написанные на языке Си, имеют общую структуру. О которой мы и поговорим в этом уроке. В этом нам поможет наша первая программа, написанная на предыдущем шаге.

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

Рис.1 Карта "Структура программ на языке Си." Начальный уровень.

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

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

Листинг 1. Программа 1. Печатает «Hello, World!»

#include

Листинг 2. Программа 2

Int main(void) { int a, b, c; a = 5; b = 10; c = a+b; return 0; }

Листинг 3. Программа 3

#include int main(void) { FILE *fp; fp = fopen("input.txt", "w"); fprintf(fp, "This is Sparta!"); fclose(fp); return 0; }

Не торопитесь смотреть продолжение урока и правильный ответ на эту задачу. Для начала попробуйте ответить самостоятельно. После этого нажмите кнопку "Смотреть продолжение!"

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

Листинг 4. Главная функция любой программы на языке Си - функция main.

Int main(void) { return 0; }

Что же это за конструкция. Это объявление функции main. Такая функция обязательно есть в каждой программе, которая написана на языке Си.Большая программа или маленькая, компьютерная игра или программа "Hello, World!", написана вами или Биллом Гейтсом -- если программа написана на языке Си -- в ней есть функция main. Это так сказать главная функция нашей программы. Когда мы запускаем программу, то можно думать, что запускаем функцию main этой программы.

Остановимся на секундочку. Мы, кажется, уже кое-что выяснили о структуре программ на языке Си. Любая программа на языке Си должна содержать функцию main. Отобразим этот факт на нашей карте знаний "Структура программ на языке Си."

Рис.2 Карта "Структура программ на языке Си." Функция main.

Теперь карта не напрягает нас своей зияющей пустотой. Продолжим наши исследования.

Давайте я расскажу немного о функции main и о функциях вообще.

Перед именем функции написано int, это сокращение от слова integer, которое переводится с английского, как "целое". Подобная запись означает, что когда функция main завершит свою работу, она должна вернуть вызывающей программе (в нашем случае это операционная система) какое-нибудь целое число. Обычно, для функции main это число ноль, которое оповещает операционную систему: "Мол, всё хорошо. Происшествий не случилось."

Случалось ли вам видеть сообщения об ошибках на экране своего компьютера? Обычно там пишут что-то вроде "Программа аварийно завершена... бла-бла-бла... Код -314." Вот это примерно тоже самое. Разница в том, что когда случаются проблемы операционная система нас об этом оповещает, а когда всё хорошо она нас лишний раз не беспокоит.

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

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

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

Вы можете спросить, а почему именно нуль? А чёрт его знает! Просто так обычно делают. Можно, в принципе, возвращать какое-нибудь другое целое число, например 100, или -236. Лишь бы оно было целым числом. Помните про int? Поэтому и целое.

Вот мы и разобрались с функцией main. Ещё один момент. То что записано в фигурных скобках обычно называют "тело функции" (или описание функции), а первую часть, та что перед фигурными скобками называется заголовок функции.

Вернёмся теперь к нашей первой программе "Hello, World" и посмотрим, что там к чему.

Листинг 5. Программа «Hello, World»

#include int main(void) { printf("Hello, World!\n"); return 0; }

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

Листинг 6. Директива include

#include

Данная строчка это сообщение компилятору. Такие сообщения, начинающиеся с символа #, называются директивами компилятора. Буквально: «подключи файл stdio.h». Во время компиляции вместо этой строчки вставится содержимое файла stdio.h. Теперь немного поговорим об этом файле. stdio.h (от англ. STanDart Input Output) это заголовочный файл, в нем описаны различные стандартные функции, связанные с вводом и выводом.

Возникает резонный вопрос "А зачем нам писать эту строчку? Зачем нам вообще понадобилось вставлять сюда этот файл?" Это нужно для того, что бы в своей программе, мы могли использовать стандартную функцию вывода на экран printf().

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

Так же и компилятор. Когда он встречает какую-нибудь функцию, он ищет её описание (т.е. что она должна делать и что обозначает) в начале программы (с самого начала и до момента её использования в программе). Так вот, функция printf() описана в файле stdio.h. Поэтому мы и подключаем его. А вот когда мы его подключим, компилятор сможет найти функцию printf(), иначе он выдаст ошибку.

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

Рис.3 Карта "Структура программ на языке Си." Блок подключения заголовочных файлов.

Продолжим разбираться с нашей программой.

Листинг 7. функция printf()

Printf("Hello, World!\n");

В этой строке мы вызываем стандартную функцию вывода на экран printf(). В данном простейшем случае мы передаем ей один параметр, строку, записанную в кавычках, которую надо вывести на экран, в нашем случае это Hello, World! \n. Но постойте, а что это за \n? На экране, во время запуска программы, никаких \n не было. Зачем тогда мы тут это написали? Данная последовательность это специальный символ, который является командой перейти на следующую строку. Это как в MS Word нажать клавишу Enter. Таких специальных символов несколько, все они записываются с помощью символа "\" - обратный слеш. Такие специальны символы называются управляющими символами. Потом я еще покажу вам их. В остальном на экране появится именно то, что вы написали в двойных кавычках.

Кстати, обратите внимание, каждая команда языка Си заканчивается символом «;» (точкой с запятой). Это похоже на точку в конце предложения, в русском языке. В обычном языке мы разделяем точкой предложения, а в языке программирования Си, точкой с запятой отделяем команды друг от друга. Поэтому ставить точку с запятой обязательно. Иначе компилятор будет ругаться и выдаст ошибку.

Чтобы вызвать какую-нибудь функцию, необходимо написать её имя и указать передаваемые ей параметры в круглых скобках. У функции может быть один или несколько параметров. А может не быть параметров вовсе, в таком случае в скобках писать ничего не нужно. Например, выше мы вызвали функцию printf() и передали ей один параметр строку, которую необходимо вывести на экран.

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

Листинг 8. Стандартная заготовка для программ на языке Си.

#include int main(void) { return 0; }

Ну вот вроде бы и всё. Этом первый урок можно считать законченным. Хотя нет, ещё один момент есть.

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


Исходный код программы-открытки есть в архиве с исходными кодами этого урока. Экспериментируйте! У вас всё получится.

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

Первоначально язык Си задумывался как заменитель Ассемблера для написания операционных систем. Поскольку Си - это язык высокого уровня, не зависящий от конкретной архитектуры, текст операционной системы оказывался легко переносимым с одной платформы на другую. Первой операционной системой, написанной практически целиком на Си , была система 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) С – современный язык, его структура побуждает программиста использовать в своей работе методы: нисходящего проектирования, структурного программирования, модульную структуру программ.

2) С – эффективный язык. Программы на С отличаются компактностью и быстротой выполнения.

3) С – переносимый или мобильный язык.

4) С – мощный и гибкий язык.

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

6) С – удобный язык, он структурирован и вместе с тем не слишком ограничивает свободу программистам.

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

Программирование деятельность по составлению программы.

Программа -это описание алгоритма решения задачи, заданной на языке ЭВМ.

Команда предписание, определяющее очередной шаг.

Пример команды : С=А+В, где А, В-операнды, +- операция.

Операция -это то, что должна сделать ЭВМ согласно каждой команде.

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

Пример №1:

# include

{void main(void) //заголовок головной функции программы

сout << “Здравствуй, С!\ n”;

1 строка : подключение вспомогательных библиотек, ориентированных на ввод и вывод данных разных типов в поток.

2 строка: заголовок головной функции программы. Cout-оператор вывода информации << – помещение в класс данных, \n-переход к новой строке вывода.

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

Использование С.

1. Программы и данные.

2. Схема выполнения программы на ЭВМ:

Пример №1:

# include < stdio.h>

printf ("Я учусь в БГУИР\ n");

1 строка: команда препроцессора include, включающая файл stdio.h, который описывает библиотечную функцию printf.

2 строка: определение функции с именем main, не получающей никаких аргументов. Инструкция main заключается в фигурные скобки. Функция main обращается к библиотечной ф-ции printf для печати, заданной в последовательности литер. Наклонная черта (\ n) - литера новая строка, переход к новой строке.

Для выполнения программы на ПВЭМ, необходимо сделать следующие действия:

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

2) Транслировать ее в стандарте этого языка.

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

4) Загрузить в оперативную память.

5) Выполнить и получить результат.


СХЕМА КОМПЕЛЯЦИИ

Транслятор – это компьютерная программа по переводу программы, написанной на языке программирования, в форму понятную для компьютера. На выходе компилятора получается файл с расширением obj. Исполняемый файл или загрузочный модуль представляет собой файл, содержащий откомпилированную и готовую к выполнению программу. Borland C++ является средой для разработки программ, которые включают в себя как компилятор, так и некоторые другие инструменты.

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

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

а) Общая структура программы на С без обращения к подпрограмме:

б) Общая структура программы на С с обращением к подпр-ме:

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




Top