Файл: Лекция 2. Основы программирования на языке С 1 Состав языка.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 22.11.2023

Просмотров: 37

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.


a = 1; // 5 присваивание глобальной переменной

int a; // 6 локальная переменная a

a = 2; // 7 присваивание локальной переменной

::a = 3; // 8 присваивание глобальной переменной

return 0;

}

int x = 4; // 9 определение и инициализация x

В этом примере глобальная переменная a определена вне всех блоков. Память под нее выделяется в сегменте данных в начале работы программы, областью действия является вся программа. Область видимости - вся программа, кроме строк 6-8, так как в первой из них определяется локальная переменная с тем же именем, область действия которой начинается с точки ее описания и заканчивается при выходе из блока. Переменные b и c - локальные, область их видимости - блок, но время жизни различно: память под b выделяется в стеке при входе в блок и освобождается при выходе из него, а переменная c располагается в сегменте данных и существует все время, пока работает программа.

Если при определении начальное значение переменных явным образом не задается, компилятор присваивает глобальным и статическим переменным нулевое значение соответствующего типа. Автоматические переменные не инициализируются.

Имя переменной должно быть уникальным в своей области действия (например, в одном блоке не может быть двух переменных с одинаковыми именами).

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

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

Примеры выражений:

(a + 0.12)/6

x && y || !z

(t * sin(x)-1.05e4)/((2 * k + 2) * (2 * k + 3))

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


Например, a = b = c означает a = (b = c), а a + b + c означает (a + b) + c.

Порядок вычисления подвыражений внутри выражений не определен: например, нельзя считать, что в выражении (sin(x + 2) + cos(y + 1)) обращение к синусу будет выполнено раньше, чем к косинусу, и что x + 2 будет вычислено раньше, чем y + 1.

Результат вычисления выражения характеризуется значением и типом. Например, если a и b - переменные целого типа и описаны так: int a = 2, b = 5;

то выражение a + b имеет значение 7 и тип int, а выражение a = b имеет значение, равное помещенному в переменную a (в данному случае 5) и тип, совпадающий с типом этой переменной. Таким образом, в С++ допустимы выражения вида a = b = c: сначала вычисляется выражение b = c, а затем его результат становится правым операндом для операции присваивания переменной a.

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

Преобразования бывают двух типов:

  1. изменяющие внутреннее представление величин (с потерей точности или без потери точности);

  2. изменяющие только интерпретацию внутреннего представления.

К первому типу относится, например, преобразование целого числа в вещественное (без потери точности) и наоборот (возможно, с потерей точности), ко второму - преобразование знакового целого в беззнаковое.

В любом случае величины типов char, signed char, unsigned char, short int и unsigned short int преобразуются в тип int, если он может представить все значения, или в unsigned int в противном случае.

После этого операнды преобразуются к типу наиболее длинного из них, и он используется как тип результата.
2.4 Структура программы
Программа на языке С++ имеет определенную структуру. Существует определенная последовательность заранее определенных строк кода, которая приведена в таблице 2.5.
Таблица 2.5 - Структура программы языка С++

#include «stdafx.h»

Подключение заголовочного файла для сборки проекта. Обязательный пункт в Visual Studio, в среде Borland C++ не используется.

#include <название_библиотеки>

Подключение библиотек. Необязательный пункт.

using namespace std;

использование пространства имен. Обязательный пункт в Visual Studio, в среде Borland C++ не используется.

int main()

{ или void main() {

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

Тело_функции_main

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

return 0;} или }

Конец программы. Самый последний оператор. Обязательный пункт.



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

тип_возращаемого_значения имя ([ параметры ]) {

операторы, составляющие тело функции }

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

  • Если функция не должна возвращать значение, указывается тип void;

  • Тело функции является блоком и, следовательно, заключается в фигурные скобки;

  • Функции не могут быть вложенными;

  • Каждый оператор заканчивается точкой с запятой (кроме составного оператора).

Пример структуры программы, содержащей функции main, f1 и f2:

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

int main(){

операторы главной функции

}

int f1(){

операторы функции f1

}

int f2(){

операторы функции f2

}

Программа может состоять из нескольких модулей (исходных файлов).

В языке С++ нет встроенных средств ввода/вывода - он осуществляется с помощью функций, типов и объектов, содержащихся в стандартных библиотеках. Используется два способа: функции, унаследованные из языка С, и объекты С++.

Основные функции ввода/вывода в стиле С:

int scanf (const char* format, … ) // ввод

int printf(const char* format, … ) // вывод

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

Пример программы, использующей функции ввода/вывода в стиле С:

#include

int main(){

int i;

printf(«Введите целое число\n»);

scanf("%d", &i);

printf("Вы ввели число %d, спасибо! ", i);

return 0;

}

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

Третья строка - описание переменной целого типа с именем i.

Функция printf в четвертой строке выводит приглашение «Введите целое число» и переходит на новую строку в соответствии с управляющей последовательностью \n. Функция scanf заносит введенное с клавиатуры целое число в переменную i (знак & означает операцию получения адреса), а следующий оператор выводит на экран указанную в нем строку, заменив спецификацию преобразования на значение этого числа.

Программа с использованием библиотек классов С++:

#include

int main(){

int i;

cout << "Введите целое число\n";

cin >> i;

cout << "Вы ввели число " << i << ", спасибо! ";

return 0;

}

Заголовочный файл содержит описание набора классов для управления вводом/выводом. В нем определены стандартные объекты-потоки cin для ввода с клавиатуры и cout для вывода на экран, а также операции помещения в поток и чтения из потока.


2.5 Программная реализация



Microsoft Visual Studio - это набор инструментов разработки, основанных на использовании компонентов и других технологий для создания мощных, производительных приложений.

Кроме того, среда Visual Studio оптимизирована для совместного проектирования, разработки и развертывания корпоративных решений.

Также Visual Studio позволяет создавать проекты, имеющие пользовательский интерфейс (GUI), работая с разными компонентами, такими как формы, кнопки, списки, меню и т.д.

При загрузке приложения из меню «Пуск/Программы/Microsoft Visual Studio 2017» появляется главное окно c начальной страницей программы, которое представлено на рисунке 2.2.



Рисунок 2.2 - Начальная страница Visual Studio 2017
Программы, которые работают в консоли, т.е. взаимодействие с пользователем происходит посредством черного экрана.

Для создания программы необходимо нажать «Файл/Создать/Проект» или нажать на стартовой странице Visual Studio2017 быструю ссылку «Создать проект», выделенную синим цветом. После выбора создания нового проекта появится другое диалоговое окно «Создать проект», где необходимо выбрать требуемые опции, а именно: в левом столбце необходимо выбрать «Visual C++/Win32», справа наверху – «Консольное приложение Win32», справа внизу вписать имя проекта (например, proga1), в графе расположение выбрать вашу папку, где будут храниться все программы, оставить галочку «Создать каталог для решения». Диалоговое окно «Создать проект» представлено на рисунке 2.3.



Рисунок 2.3 - Диалоговое окно «Создать проект»
После этого нужно нажать «ОК». В главном окне Visual Studio 2017 закроется начальная страница, и откроется файл ConsoleApplication.cpp(левое верхнее поле), окно вывода ошибок и предупреждений «Вывод» (левое нижнее поле), «Командный обозреватель» (правое вертикальное поле). Данный вид представлен на рисунке 2.4.



Рисунок 2.4 – Файл ConsoleApplication.cpp

Файл ConsoleApplication.cpp предназначен для текста программы (или кода программы), здесь будет вписываться операторы, переменные и функции.

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

Вместо командного обозревателя можно включить «Обозреватель решений», в котором видно все файлы и папки, созданные для нового проекта. Для этого необходимо под «Командным обозревателем» нажать кнопку «Обозреватель решений». Далее в появившемся списке раскрыть папки «Файлы исходного кода» и «Заголовочные файлы».

Когда составляется программа в Visual Studio, получается целый проект, который автоматически создается средой Visual Studio. Задача начинающего программиста состоит в том, чтобы напечатать код своей программы в файле *.cpp и запустить программу на выполнение.

Первые две строчки начинаются двумя символами «//». Данные символы означают, что далее на этой строчке следует комментарий, он не воспринимается компилятором как код программы и не будет выдавать ошибку. Удалять эти две строчки не рекомендуется.

Далее следует строчка #include «stdafx.h». Данная строка необходима для сборки нашего проекта. Файл stdafx.h - это один из файлов, автоматически создаваемых для нашей программы, и его можно увидеть в левом столбце Обозревателя решений. Эту строчку также нельзя удалять.



Рисунок 2.6 - Успешное построение проекта
Далее начинается функция int main(). Автоматически Visual Studio называет ее _tmain и вписывает аргументы int argc, _TCHAR* argv[]. В самых простых программах для начинающих программистов, изменяется эта строчка и приводится к виду: int main()  остается return 0, или void main() и стирается return 0. После необходимо собрать проект, нажав в меню «Построение/Построить решение». Тогда в поле «Вывод» начинается проверка кода. Данный код прошел проверку успешно и проект построился.

Для того чтобы запустить пустую программу на клавиатуре необходимо нажать Ctrl+F5. Тогда появится консоль со стандартной надписью после выполнения программы «Для продолжения нажмите любую клавишу…». Консоль представлена на рисунке 2.7.



Рисунок 2.7 - Консоль выполнения программы
После просмотра консоли , нажав на крестик программа закроется.

Чтобы составить программу, которая напишет на экране фразу »Hello world!», в код заготовки нужно добавить несколько строк:

#include // т.к. нужно будет использовать оператор вывода на экран cout

using namespace std; // подключение пространства имен

cout<<«Hello world!»<

// чтобы стандартная фраза «Для продолжения нажмите любую клавишу…» не «налипла» на нашу фразу.



Рисунок 2.8 - Файл с кодом программы

После этого опять строится решение, т.к. код программы был изменен. Если построение выполнилось успешно, то можно запускать программу, нажав Ctrl+F5. Если же построение выдало ошибки, то нужно еще раз все проверить, исправить код, после этого построить проект еще раз. Консоль представлена на рисунке 2.10.



Рисунок 2.9 - Консоль выполнения программы


В процессе работы с приложением Visual Studio может возникнуть множество вопросов. В меню программы предусмотрена справка и стандартные примеры, которые можно посмотреть. Чтобы включить справку, необходимо нажать «Справка/Просмотр справки» или воспользоваться горячими клавишами Ctrl+F1. Чтобы посмотреть примеры кодов, в меню нужно выбрать «Справка/Примеры».