Структура и лексема языка
программирования С++
Лекция 3
Что такое программирование?
С/С++
Базовые понятия.
Ввод/вывод.
исходная
информация
(данные)
компьютер
выходная
информация
(результат)
Физическое устройство: полупроводниковые
элементы
Все данные хранятся и обрабатываются в двоичном
виде
111101010101001011110000001111010101101110101
100101010101001010101010101001000000000000000
000010101010101111100000110101010101011101010
Алгоритм – конечная последовательность точно
определённых действий (операций), приводящих к
однозначному решению поставленной задачи.
Программа – алгоритм решения задачи, записанный
на языке программирования.
Языки программирования:
низкого уровня
высокого уровня
Языки программирования низкого уровня – языки
программирования близкие к программированию
непосредственно в машинных кодах процессора.
Писать программу в двоичном коде невозможно
крайне тяжело…
1111010101010010111100000011110101011011
1010110010101010110000000010101111101010
гораздо более удобно заменить машинные
коды мнемониками:
1010101
push
Языки программирования высокого уровня – языки
программирования, средства которых обеспечивают
запись программы в более простом (чем программы,
написанные на ЯП низкого уровня) виде.
С/С++, С#, Java, Python, PHP, R, Basic, Perl, Matlab,
Ruby, Delphi…
Основные элементы ЯП
Алфавит – набор символов или групп символов,
рассматриваемых как единое целое, с помощью которых
составляется текст программы.
Оператор – основная конструкция ЯП, определяющая
конкретное действие.
Синтаксис – правила построения конструкций ЯП с
помощью алфавита и операторов языка.
Семантика – смысл и правила использования этих
конструкций.
Почему С/С++?
Почему С/С++?
языки низкого уровня
Быстродействие,
гибкость,
управление памятью
язык С
языки высокого уровня
Разработка системного
программного обеспечения
Операционные системы
(windows, unix), базы
данных (Oracle, MySQL, MS
SQL Server) и др.
* Источник: https://www.tiobe.com/tiobe-index/
Базовые понятия
Структурное программирование
Структурное программирование позволяет
проектировать алгоритмы только из трех элементарных
алгоритмов. Каждый модуль является иерархией этих
элементарных алгоритмов. Алгоритм, состоящий только
из этих трех элементарных алгоритмов, присутствующих
на всех его уровнях, называется структурным.
Основная теорема структурного программирования
утверждает, что любой алгоритм можно преобразовать
к структурному виду.
Тремя элементарными структурными алгоритмами
являются следующие.
1. Следование, или цепочка, или составная
инструкция.
2. Выбор, или ветвление, или условная инструкция.
3. Цикл, или возврат, или циклическая инструкция.
Объектно-ориентированное программирование
Компьютер = аппаратура + программы, а программа =
алгоритм + данные.
Объектно-ориентированное программирование
(ООП) организует данные и алгоритмы,
обрабатываемые программой. При этом программист
создает формы данных и алгоритмы, соответствующие
основным характеристикам решаемой проблемы.
Модели данных и алгоритмы, их обрабатывающие,
называются классами, а объекты — это конкретные их
представители, используемые в программе. Из общих
объектов создаются другие, более
специализированные. Механизм создания таких
подобъектов называется наследованием. В итоге
данные программы представляют из себя объектную
модель — дерево объектов, начиная с самого верхнего
наиболее абстрактного и общего объекта.
Визуальное программирование
Визуальное программирование существенно
облегчает программирование для графического
интерфейса типа Windows, который состоит из
множества графических объектов: кнопок, окон,
меню и т. д. Система визуального
программирования предоставляет программисту:
1) готовую объектную визуальную модель,
содержащую множество графических диалоговых
объектов (кнопки, окошки, меню и т. д.) и
программных модулей, которые их реализуют;
2) среду визуального программирования, в которой
графические диалоговые объекты, которые будут
определять интерфейс программы, просто
размещаются на экране мышью.
Язык программирования, программа
Чтобы создать компьютерную программу, нужно
записать алгоритм по специальным правилам на языке
программирования, который понимает и человек, и
компьютер. Такая запись называется исходным
текстом программы, или программой. Программа
пишется в простом текстовом редакторе. Затем
программа переводится в машинные коды,
выполняемые процессором компьютера, специальной
программой-переводчиком.
Компилятор — программа-переводчик с языка
программирования в машинные коды, а процесс
перевода — это компилирование программы. Комплекс
программ, включающий компилятор и другие средства
написания программ, называется системой
программирования.
Возможны два способа компиляции.
Первый способ называется трансляцией и заключается в
компилировании сразу всей программы в машинные коды. Затем
строится выполняемый файл, содержащий эту программу. И только
потом программа выполняется путем запуска выполняемого файла.
Благодаря трансляции получается более быстрая по времени
работы программа, но выполняемый файл имеет большой объем.
Кроме того, выполняемый файл запускается только на компьютере
того типа, где программа была транслирована.
Второй способ. При интерпретации компьютер читает программу
по одной строке и сразу выполняет эту строку. При интерпретации
программу не надо переводить всю сразу в машинные коды, и
поэтому она имеет маленький объем, равный объему исходного
текста программы. Такая программа запускается на любом
компьютере, на котором находится интерпретатор или
виртуальная машина.
Несколько определений:
Функция – часть программы, которая выполняет
законченную последовательность действий и имеет
связи с другими функциями.
Оператор – структурная единица языка, в С/С++
всегда оканчивается ;
Переменная – поименованная область памяти.
КОММЕНТАРИИ
Комментарии бывают двух типов:
Однострочные
// Это первый однострочный комментарий
// Это второй однострочный комментарий
Многострочный комментарий
/*
Это многострочный комментарий
В нем размещается многострочный текст
*/
Препроцессор убирает комментарии из текста
программы перед компиляцией
Структура программы
функция main
главная функция программы
#include <iostream> //директива препроцессора
using namespace std; /*использование стандартного
пространства имен*/
int main()
//заголовок функции main
{
cout<<“Hello, world!”; //вывод на экран
return 0;
}
ТРАНСЛЯЦИЯ ИСХОДНОГО КОДА
*.cpp
Исходный код
Препроцессор
*.cpp
Заголовочные
файлы
*.h
Библиотечные
файлы
*.lib
*.dll
Полный текст
Компилятор
Объектный код
*.obj
Компоновщик
*.exe
Исполняемый код
ПЕРЕМЕННЫЕ
Объявить переменную – значит дать ей имя и указать
тип данных.
Инициализировать переменную – дать переменной
значение.
Тип данных влияет на:
размер памяти,
выделяемый под
переменную
данные, которые
могут храниться
в переменной
Типы данных
Целочисленные
(char, short, int, long, long long)
С плавающей точкой
(float, double)
Логические
(bool)
Символьные
(char)
РАЗМЕРЫ СТАНДАРТНЫХ ТИПОВ
Заголовок
Байт
bool
1
char
1
short int (short)
2
long int (long)
4
long long int (long long)
8
unsigned char
1
unsigned short
2
unsigned long
4
unsigned long long
8
float
4
double
8
long double
8
int
системно-зависимый (чаще 4
байт)
Правила именования переменных:
имя переменной может содержать буквы
английского алфавита, цифры и знак подчеркивания;
язык С является регистрозависимым;
желательно, чтобы имена были говорящими и
короткими
int max_index = 100;
bool result;
float pi=3.14;
ОПЕРАЦИИ
Деление операций по функциональному назначению
Арифметические
(+, -, *, /, %);
Присваивание
(=);
Сравнение
(==,!=,>=,<=);
Арифметические
с (+=,-=,*=,/=);
присваиванием
Инкремент, декремент
(++,--);
Логические
(!,&&,||);
Логические побитовые
(&,^,>>,<<,~);
Адресные
(*,&);
Доступ к полям структур и (.,->);
объединений
Прочие
(?:,sizeof()
Операции различаются:
Арностью (количество операндов, принимаемых
операцией)
Приоритетом (определяет порядок выполнения
операций)
Ассоциативностью (слева направо, справа налево)
ПРИОРИТЕТ ОПЕРАЦИЙ
Операторы
Выполняются
слева направо
справа налево
() [] -> .
::
! ~ ++ -- + * & (type) sizeof
.* ->*
*
/ %
слева направо
+ слева направо
<< >>
слева направо
< <= > >=
слева направо
== !=
слева направо
&
слева направо
^
слева направо
|
слева направо
&&
слева направо
||
слева направо
?:
справа налево
= += -= *= /= %= &= ^= |=
<<= >>= справа налево
,
слева направо
ВВОД/ВЫВОД ДАННЫХ
Библиотека iostream
Операторы cout и cin
1. Подключение библиотеки:
#include <iostream>
2. Использование стандартного пространства
имен:
using namespace std;
В противном случае, необходимо каждый раз
указывать стандартное пространство имен
std::cout<<“Hello, world!”;
Вывод на экран: оператор cout и операция <<
Вывод фразы :
cout<<“Hello, world!”;
Вывод значения переменной:
float pi=3.14;
cout<<pi;
Каскадирование операции <<
cout<<“Значение числа пи, равно: ”<<pi;
Переход на новую строку endl
cout<<“Значение числа пи, равно: ”<<endl<<pi;
Для ввода с клавиатуры используются:
оператор cin и операция >>
int data;
cout<<“Введите число”;
cin>>data;
Операцию >> тоже можно каскадировать.
Библиотека stdio.h
Функции printf, scanf
Необходимо подключить библиотеку
#include “stdio.h”
Практика
Устанавливаем DEV C++ (или Visual Studio)
Создаем консольное приложение (File->New->Project->Console
Application)
Практика
Устанавливаем DEV C++ (или Visual Studio)
Создаем консольное приложение (файл->создать->проект>пустой проект)
Добавляем файл с исходным кодом
Рабочий экран Dev C++
Создание консольного
приложения
• Задача. Составить схему алгоритма и
программу для вычисления значений
функций Y и F для заданных значений
переменной x и постоянной a= 1. Вывести
на экран значения F, Y для
соответствующих значений x=4 и x=1,7.
Создание консольного приложения
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
#include "stdafx.h"
#include <conio.h>
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
double x, a = 1.2, Y, F;
cout << "x="; cin >> x;
Y = a*pow(x, 5)*(atan(a + x) - sqrt(abs(x - a)) + log(pow(x + 1, 2)));
F = sin(a*x) - exp(-x) + log(x - a + 2);
cout << "Y=" << Y << endl;
cout << "F=" << F;
//_getch();
return 0;
}
Создание консольного приложения
• Запускаем приложение
Создание консольного приложения
• В диалоговом окне щелкаем по кнопке
<Yes>
Создание консольного приложения
• Если нет ошибок, то программа начинает
работать.
• Вводим исходные данные и получаем
результат.
Язык С++. Алфавит языка
<алфавит> :: = <буквы> | <цифры> | <ограничители>
<буквы> :: = A | B | …| Z | a | b | …| z | _
<цифры> :: = 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
<ограничители>::=<знаки операций>|<скобки> |
<зарезервированные слова>| <разделители>
Пробел является разделителем.
Комментарий - это текст, начинающийся знаками // и до
конца строки или текст, заключенный между знаками /*
*/. Может содержать буквы (в том числе и русские),
цифры, специальные знаки. Используется для
обозначения участков программ или пояснения команд.
Может располагаться в любом месте программы.
; - завершает оператор.