Стандартные операторы и функции языка С++. Лекция 4 презентация

Содержание

Слайд 2

Содержание

Операторы
Математические операторы
Побитовые операторы
Операторы присваивания
Логические операторы
Операторы сравнения
Оператор ветвления if
Оператор Switch
Цикл

Оператор goto
Оператор break
Операторы continue return
Функции

ввода/вывода
Функции работы со строками
Математические функции
Контрольные вопросы
Список литературы

Содержание Операторы Математические операторы Побитовые операторы Операторы присваивания Логические операторы Операторы сравнения Оператор

Слайд 3

Операторы

Запись действий, которые должен выполнить компьютер, состоит из операторов. Язык C++ включает все операторы

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

Операторы Запись действий, которые должен выполнить компьютер, состоит из операторов. Язык C++ включает

Слайд 4

Математические операторы

Математические операторы

Слайд 5

Операторы +, -, * и / работают в С++ точно так же, как

и в большинстве других языков. Их можно применять практически ко всем встроенным типам данных. Когда применяется / к целому числу или символу, остаток не используется, например: 10/3 равно 3.
Оператор взятия по модулю % работает в С++ так же, как в некоторых других языках. Надо помнить, что оператор взятия по модулю выдает остаток от целочисленного деления. % не может использоваться с типами float и double.

Операторы +, -, * и / работают в С++ точно так же, как

Слайд 6

Пример кода

Следующий фрагмент демонстрирует его использование:
int х, у;
х = 10;
у = 3;
printf("%d", x/y);

/* выводит 3 */
printf ("%d", х%у); /*выводит1-остаток целочисленного деления */
x = 1;
y = 2;
printf("%d %d", х/у, х%у)/ /* выводит 0 1*/
Последняя строка печатает 0 и 1, так как в результате целочисленного деления 1/2 получается 0 с остатком 1. 1 % 2 выдает остаток 1.

Пример кода Следующий фрагмент демонстрирует его использование: int х, у; х = 10;

Слайд 7

Побитовые операторы

Побитовые операции выполняются над отдельными разрядами или битами чисел. Данные операции производятся

только над целыми числами.

Побитовые операторы Побитовые операции выполняются над отдельными разрядами или битами чисел. Данные операции

Слайд 8

Операторы присваивания

Операции присваивания позволяют присвоить некоторое значения. Эти операции выполняются над двумя операндами,

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

Операторы присваивания Операции присваивания позволяют присвоить некоторое значения. Эти операции выполняются над двумя

Слайд 9

Логические операторы

Логические операции образуют сложное (составное) условие из нескольких простых (два или более)

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

Логические операторы Логические операции образуют сложное (составное) условие из нескольких простых (два или

Слайд 10

Операторы сравнения

Сравнивать можно операнды любого типа, но либо они должны быть оба одного

и того же встроенного типа ( сравнение на равенство и неравенство работает для двух величин любого типа), либо между ними должна быть определена соответствующая операция сравнения. Результат - логическое значение true или false.

Операторы сравнения Сравнивать можно операнды любого типа, но либо они должны быть оба

Слайд 11

Оператор ветвления if

Условный оператор if используется для разветвления процесса вычислений на два

направления. Формат оператора:
if ( выражение ) оператор_1; [else оператор_2;]
Сначала вычисляется выражение, которое может иметь арифметический тип или тип указателя. Если оно не равно нулю (имеет значение true), выполняется первый оператор, иначе - второй. После этого управление передается на оператор, следующий за условным. Одна из ветвей может отсутствовать, логичнее опускать вторую ветвь вместе с ключевым словом else. Если в какой-либо ветви требуется выполнить несколько операторов, их необходимо заключить в блок, иначе компилятор не сможет понять, где заканчивается ветвление. Блок может содержать любые операторы, в том числе описания и другие условные операторы (но не может состоять из одних описаний). Необходимо учитывать, что переменная, описанная в блоке, вне блока не существует.

Оператор ветвления if Условный оператор if используется для разветвления процесса вычислений на два

Слайд 12

Структурная схема условного оператора

Далее представлены примеры условного оператора:
if (a<0) b = 1;


if (ad || a==0)) b++; else {b* = a; a = 0;}
if (aif (a++) b++;
if (b>a) max = b; else max = a;

Структурная схема условного оператора Далее представлены примеры условного оператора: if (a if (a

Слайд 13

В примере 1 отсутствует ветвь else. Подобная конструкция называется «пропуск оператора», поскольку присваивание

либо выполняется, либо пропускается в зависимости от выполнения условия.
Если требуется проверить несколько условий, их объединяют знаками логических операций. Например, выражение в примере 2 будет истинно в том случае, если выполнится одновременно условие aОператор в примере 3 вычисляет наибольшее значение из трех переменных. Фигурные скобки в данном случае не обязательны, так как компилятор относит часть else к ближайшему if.
Пример 4 напоминает о том, что хотя в качестве выражений в операторе if чаще всего используются операции отношения, это не обязательно.
Конструкции, подобные оператору в примере 5, проще и нагляднее записывать в виде условной операции (в данном случае: max = (b > a) ? b : a;).

В примере 1 отсутствует ветвь else. Подобная конструкция называется «пропуск оператора», поскольку присваивание

Слайд 14

Оператор switch

Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений. Формат

оператора:
switch ( выражение ){
case константное_выражение_1: [список_операторов_1]
case константное_выражение_2: [список_операторов_2]

case константное_выражение _n: [список_операторов _n]
[default: операторы ]
}

Оператор switch Оператор switch (переключатель) предназначен для разветвления процесса вычислений на несколько направлений.

Слайд 15

Структурная схема оператора switch

Выполнение оператора начинается с вычисления выражения (оно должно быть целочисленным),

а затем управление передается первому оператору из списка, помеченного константным выражением, значение которого совпало с вычисленным.
После этого, если выход из переключателя явно не указан, последовательно выполняются все остальные ветви. Выход из переключателя обычно выполняется с помощью операторов break или return. Оператор break выполняет выход из самого внутреннего из объемлющих его операторов switch, for, while и do. Оператор return выполняет выход из функции, в теле которой он записан.

Структурная схема оператора switch Выполнение оператора начинается с вычисления выражения (оно должно быть

Слайд 16

Пример кода

#include
int main(){
int a, b, res;
char op;
cout << "\nВведите 1й операнд :

"; cin >> a;
cout << "\nВведите знак операции : "; cin >> op;
cout << "\nВведите 2й операнд : "; cin >> b;
bool f = true;
switch (op){
case '+': res = a + b; break;
case '-': res = a - b; break;
case '*': res = a * b; break;
case '/': res = a / b; break;
default : cout <<"\nНеизвестная операция"; f = false;
}
if (f) cout << "\nРезультат : " << res;
return 0;
}

Пример кода #include int main(){ int a, b, res; char op; cout >

Слайд 17

Цикл с параметром (for)

Цикл с параметром имеет следующий формат:
for ( инициализация; выражение :

модификации) оператор;
Инициализация используется для объявления и присвоения начальных значений величинам, используемым в цикле. В этой части можно записать несколько операторов, разделенных запятой (операцией «последовательное выполнение»), например, так.
for (int i = 0, j = 2; …
int k, m;
for (k = 1, m = 0; …

Цикл с параметром (for) Цикл с параметром имеет следующий формат: for ( инициализация;

Слайд 18

Пример (оператор, вычисляющий сумму чисел от 1 до 100):
for (int i = 1,

s = 0; i<=100; i++) s += i;
Пример (программа находит все делители целого положительного числа):
#include
int main(){
int num, half, div;
cout << "\nВведите число : "; cin >> num;
for (half = num / 2, div= 2; div<= half; div++)
if (!(num % div))cout << div <<"\n";
return 0;
}

Пример (программа печатает таблицу значений функции y=x2+1 во введенном
диапазоне):
#include
int main(){
float Xn, Xk, Dx, X;
printf("Введите диапазон и шаг изменения аргумента: ");
scanf("%f%f%f", &Xn, &Xk, &Dx);
printf("| X | Y |\n");
for (X = Xn; X<=Xk; X += Dx)
printf("| %5.2f | %5.2f |\n", X, X*X + 1);
return 0;
}

Пример (оператор, вычисляющий сумму чисел от 1 до 100): for (int i =

Слайд 19

Чтобы избежать ошибок, рекомендуется:

проверить, всем ли переменным, встречающимся в правой части операторов присваивания

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

Чтобы избежать ошибок, рекомендуется: проверить, всем ли переменным, встречающимся в правой части операторов

Слайд 20

Оператор goto

Оператор безусловного перехода goto имеет формат: goto метка;
В теле той же функции

должна присутствовать ровно одна конструкция вида: метка: оператор;
Оператор goto передает управление на помеченный оператор. Метка - это обычный идентификатор, областью видимости которого является функция, в теле которой он задан.
Использование оператора безусловного перехода оправдано в двух случаях:
принудительный выход вниз по тексту программы из нескольких вложенных циклов или переключателей;
переход из нескольких мест функции в одно (например, если перед выходом из функции необходимо всегда выполнять какие-либо действия).

Оператор goto Оператор безусловного перехода goto имеет формат: goto метка; В теле той

Слайд 21

В любом случае не следует передавать управление внутрь операторов if, switch и циклов.

Нельзя переходить внутрь блоков, содержащих инициализацию переменных, на операторы, расположенные после нее, поскольку в этом случае инициализация не будет выполнена:
int k; …
goto metka; …
{ int a = 3, b = 4;
k = a + b;
metka: int m = k + 1; …
}
После выполнения этого фрагмента программы значение переменной m не определено.

В любом случае не следует передавать управление внутрь операторов if, switch и циклов.

Слайд 22

Оператор break

Оператор break используется внутри операторов цикла, if или switch для обеспечения перехода

в точку программы, находящуюся непосредственно за оператором, внутри которого находится break.

Оператор break Оператор break используется внутри операторов цикла, if или switch для обеспечения

Слайд 23

Операторы continue и return

Оператор перехода к следующей итерации цикла continue пропускает все операторы,

оставшиеся до конца тела цикла, и передает управление на начало следующей итерации.
Оператор возврата из функции return завершает выполнение функции и передает управление в точку ее вызова. Вид оператора: return [ выражение ]; Выражение должно иметь скалярный тип. Если тип возвращаемого функцией значения описан как void, выражение должно отсутствовать.

Операторы continue и return Оператор перехода к следующей итерации цикла continue пропускает все

Слайд 24

Функции ввода/вывода

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

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

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

Слайд 25

Работа с потоком начинается с его открытия. Поток можно открыть для чтения и/или

записи в двоичном или текстовом режиме. Функция открытия потока имеет формат: FILE* fopen (const char* filename, const char* mode);
При успешном открытии потока функция возвращает указатель на предопределенную структуру типа FILE, содержащую всю необходимую для работы с потоком информацию, или NULL в противном случае. Первый параметр - имя открываемого файла в виде С-строки, второй - режим открытия файла:
"r" - файл открывается для чтения;
"w" - открывается пустой файл для записи (если файл существует, он стирается);
"a" - файл открывается для добавления информации в его конец;
"r+" - файл открывается для чтения и записи (файл должен существовать);
"w+" - открывается пустой файл для чтения и записи (если файл существует, он стирается);
"a+" - файл открывается для чтения и добавления информации в его конец.

Работа с потоком начинается с его открытия. Поток можно открыть для чтения и/или

Слайд 26

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

чтение и запись потока байтов выполняют функции fread и fwrite,
чтение

символа из потока - getc, fgetc, из стандартного потока stdin - getchar,
запись символа в поток - putc, fputc, в стандартный поток stdout - putchar,
чтение строки из потока - fgets, из стандартного потока stdin - gets,
запись строки в поток - fputs, в стандартный поток stdout - puts,
форматированный ввод из потока - fscanf, из стандартного потока stdin -
scanf, из строки - sscanf,
форматированный вывод в поток - fprintf, в стандартный поток stdout -printf, в строку - sprintf.

Основные функции ввода/вывода потока чтение и запись потока байтов выполняют функции fread и

Слайд 27

Приведенная ниже программа построчно считывает данные из текстового файла в буферную переменную s,

затем формирует из них структуру mon и записывает ее в двоичном режиме в выходной файл. Далее иллюстрируется считывание из этого файла произвольной записи.

#include "pch.h"
#include
#include
#include
using namespace std;
int main(){
FILE *fi, *fo;
if((fi = fopen("d:\\c\\file.txt", "r")) == 0){
cout << "Ошибка открытия входного файла"; return 1;}
if((fo = fopen("d:\\c\\binfile.out", "w+b")) == 0){
cout << "Ошибка открытия выходного файла"; return 1;}
const int dl = 80;
char s[dl];
struct{
char type[20];
int opt, rozn;
char comm[40];
}mon;

int kol = 0; // Количество записей в файле
while (fgets(s, dl, fi)){
// Преобразование строки в структуру:
strncpy(mon.type, s, 19); // Описание strncpy см. в приложении 6
mon.type[19]='\0';
mon.opt = atoi(&s[20]); // Описание atoi см. в след. разделе
mon.rozn = atoi(&s[25]);
strncpy(mon.comm, &s[30], 40);
fwrite(&mon, sizeof mon, 1, fo);
kol++;
}
fclose(fi);
int i; cin >> i; // Номер записи
if (i >= kol){cout << "Запись не существует"; return 1;}
// Установка указателя текущей позиции файла на запись i:
fseek(fo, (sizeof mon)*i, SEEK_SET);
fread(&mon, sizeof mon, 1, fo);
cout << "mon.type " << mon.type << "opt " << mon.opt
<< " rozn " << mon.rozn << endl;
fclose(fo);
return 0;
}

Приведенная ниже программа построчно считывает данные из текстового файла в буферную переменную s,

Слайд 28

Функции работы со строками

Строка представляет собой массив символов, заканчивающийся нуль-символом. В С++

есть две возможности работы со строками: функции, унаследованные из библиотеки С (заголовочный файл или ), и библиотечный класс С++ string, предоставляющий более широкие возможности представления, обработки и контроля строк.
В заголовочных файлах и содержатся полезные функции преобразования строк в числа (обратные преобразования можно сделать с помощью функции sprintf):
double atof(const char* p) преобразует переданную строку в double;
int atoi(const char* p) преобразует переданную строку в int;
long atol(const char* p) преобразует переданную строку в long.

Функции работы со строками Строка представляет собой массив символов, заканчивающийся нуль-символом. В С++

Слайд 29

Пример (программа заполняет массив типа double из строки):

#include "pch.h"
#include
#include
#include
using

namespace std;
int main(){
char s[] = "2, 38.5, 70, 0, 0, 1", *p = s;
double m[10];
int i = 0;
do{
m[i++] = atof(p);
if (i>9)break;
}
while(p = strchr(p, ','), p++);
for( int k = 0; kreturn 0;
}

Пример (программа заполняет массив типа double из строки): #include "pch.h" #include #include #include

Слайд 30

Математические функции

Математические функции

Слайд 31

Контрольные вопросы

В чем заключается задача операторов?
Какие операторы упрощают структуру программного кода в несколько

раз?
Какой оператор является заменой множественного использования операторов if ?
В чем заключается задача оператора switch?
Когда вызываются функции?
Какая функция используется для вычисления квадратного корня?
В языке С++ допустимо иметь несколько функций с одним и тем же именем? Почему?

Контрольные вопросы В чем заключается задача операторов? Какие операторы упрощают структуру программного кода

Слайд 32

Список литературы

Павловская Т.А. С/С++. Программирование на языке высокого уровня / Т. А. Павловская.

- СПб.: Питер, 2004. - 461 с.: ил.
Павловская Т.А. С/С ++. Структурное программирование: Практикум / Т.А. Павловская, Ю.А. Щупак. СПб.: Питер, 2007. - 239 с.: ил.
Павловская Т. А., Щупак Ю. А. C++. Объектно-ориентированное программирование: Практикум. - СПб.: Питер, 2006. - 265 с: ил.
Кольцов Д.М. 100 примеров на Си. - СПб.: “Наука и техника”, 2017 - 256 с.
5 Доусон М. Изучаем С++ через программирование игр. - СПб.: “Питер”, 2016. - 352.
Седжвик Р. Фундаментальные алгоритмы на С++. Анализ/Структуры данных/Сортировка/Поиск: Пер. с англ. Роберт Седжвик. - К.: Издательство “Диасофт”, 2001. - 688с.
Сиддкхартха Р. Освой самостоятельно С++ за 21 день. - М.: SAMS, 2013. - 651 с.
Стивен, П. Язык программирования С++. Лекции и упражнения, 6-е изд. Пер. с англ. - М.: ООО "И.Д. Вильямс", 2012. - 1248 с.
Черносвитов, А. Visual C++: руководство по практическому изучению / А. Черносвитов . - CПб. : Питер, 2002. - 528 с. : ил.

Список литературы Павловская Т.А. С/С++. Программирование на языке высокого уровня / Т. А.

Имя файла: Стандартные-операторы-и-функции-языка-С++.-Лекция-4.pptx
Количество просмотров: 59
Количество скачиваний: 0