Арифметические операции:
+ (плюс, унарный и бинарный)
- (минус, унарный и бинарный)
* (умножение)
/ (деление)
% (остаток от деления)
Следует заметить, что целое деление дает целый результат: 7/2 есть 3. Над целыми может выполняться операция % получения остатка: 7%2 равно 1.
При присваивании и арифметических операциях C++ выполняет все осмысленные преобразования между основными типами, чтобы их можно было сочетать без ограничений.
Логические операции:
& (поразрядная операция И), && (логическое И)
| (поразрядная ИЛИ), || (логическое ИЛИ)
^ (исключающее ИЛИ)
<< (логический сдвиг влево)
>> (логический сдвиг вправо)
В языке C логические операции применяются к целым, так как в С нет отдельного логического типа данных. При этом значение 0 интерпретируется как «Ложь», а все значения, отличные от нуля – «Истина». В языке C++ имеется тип данных bool, однако логические операции также могут применяться и к целочисленным типам.
Операции сравнения:
== (два подряд идущих знака равно – сравнение на равенство)
!= (не равно)
< (меньше) > (больше)
<= (меньше или равно) >= (больше или равно)
В C++ есть операция присваивания =, а не оператор присваивания, как в некоторых языках, например, Турбо Паскале. Операция не только присваивает значение справа левому аргументу, но и возвращает это значение. Таким образом, присваивание может встречаться в неожиданном контексте; например, x=3*(a=2*x); Это бывает полезно: a=b=c; означает присвоение c переменной b, а затем переменной a.
Другим свойством операции присваивания является то, что она может совмещаться с большинством бинарных операций, таким образом, появляются операции +=, -=, *=, /=, %= (например, x+=5; то же самое, что x=x+5;).
Операция ‘,’ (запятая) – операция последовательного вычисления. Вычисляет значение левого и правого операнда, возвращает значение правого операнда. Например: x=2, b=3 – то же самое, что и x=2; b=3;
Унарные операции:
Операция sizeof(объект) – возвращает размер в байтах того объекта, к которому применяется.
Операции -- и ++ - декремент и инкремент – уменьшают или увеличивают значение аргумента на 1. Могут быть записаны как перед операндом (префиксная форма), так и после операнда (постфиксная форма). Если знак операции записан перед операндом, то изменение операнда происходит до его использования в выражении. Например:
x=3; a=++x; //a=4, x=4
Ещё пример:
x=3; a=++x+ ++x; //a=10, x=5
В данном примере x увеличивается на единицу два раза, после чего вычисляется выражение.
В языке C++ имеется одна тернарная операция – условная операция, которая имеет следующий формат:
операнд1? операнд2: операнд3
Если операнд1 не равен 0, то результатом операции будет являться значение операнда 2, иначе – операнда 3.
Операторы-выражения
Оператор-выражение состоит из выражения, за которым следует точка с запятой. Например: a = b*3+c; b*8; x++;
Блоки (составные операторы)
Блок - это список операторов, заключенный в фигурные скобки: { a=b+2; b++; }
Блок позволяет рассматривать несколько операторов как один.
Условные операторы
Оператор if имеет стандартный формат:
if (выражение) оператор [else другой оператор]
Пример:
if(i<j) i++; else j++;
if(i==0) {i++;f(i+j);} else {i--;g(i+j);}
Оператор switch. Предназначен для организации выбора из нескольких вариантов. Например:
int i=2;
switch(i)
{case 1: i+=2;break;
case 2: i*=3;break;
case 0: i/=2;break;
case 4: i-=5;break;
default:;
}
Циклы
Оператор for – наиболее общий способ организации цикла. Имеет следующий формат:
for(выражение1;выражение2;выражение3) тело цикла
Выражение1 обычно используют для установки начального значения переменных, управляющих циклом. Выражение2 – это выражение, определяющее условие, при котором тело цикло будет выполняться. Выражение3 определяет изменения переменных, управляющих циклом, после каждого тела цикла. Например:
#include <iostream.h>
main()
{int i,b; //выведем квадраты чисел от 1 до 9
for(i=1;i<10;i++)
{b=i*i; cout <<i<<” “<< b << end;
} return 0;
}
Оператор while - цикл с предусловием.
while (выражение) оператор
аналогичен такому же оператору в Турбо Паскале.
Оператор do while – цикл с постусловием.
do оператор while(выражение);
Тело цикла выполняется хотя бы один раз. Если выражение ложно, выполнение цикла заканчивается, иначе продолжается. Аналогичен циклу repeat в Турбо Паскале, но, в отличие от него, в данном случае после while записывается не условие окончания, а условие продолжения цикла.
Пример:
int i=2;
do i+=2; while(i<10); cout << i;
В теле циклов можно использовать операторы break и continue. break выходит из тела цикла, continue передаёт управление на очередную итерацию цикла.
Функции
Определение функции имеет вид:
[тип_результата] имя_функции([список_формальных_параметров])
{тело_функции}
Такие языки, как Pascal, делают различие между процедурами и функциями, но в C++ функции играют обе роли. Если тип результата не указан, то функция возвращает значения типа int. Если функция ничего не возвращает, в качестве типа указывается void.
Cписок_формальных_параметров – это последовательность объявлений формальных параметров, разделённых запятыми. Даже если функция не имеет параметров, наличие круглых скобок обязательно, вместо параметров рекомендуется указать ключевое слово void или ничего не указывать.
Тело функции – блок. Функция возвращает значение с помощью оператора return выражение;
Пример:
//функция, вычисляющая произведение двух чисел
int mul(int x,int y)
{ return x*y;
}
Следует помнить, что параметры в функцию передаются по значению. Например, в следующей функции есть ошибка:
void change(int x, int y)
{int k=x; x=y; y=k;
}
void main()
{int a=3,b=7;change(a,b);
}
Здесь формальные параметры x и y меняются местами, но значения a и b останутся неизменными. В исправленной версии функции аргументы передаются по ссылке:
void change(int &x, int &y)
{ int k=x; x=y; y=k;
}
Ввод-вывод в стиле С
В С++ основная используемая библиотека ввода/вывода – iostream (потоки ввода /вывода). В ней для ввода используется стандартный объект – cin, а для вывода – cout. Например,
cout<<”Введите два числа”; cin>> a>>b;
Однако представляет интерес и библиотека языка С, которая содержит разнообразный ассортимент функций ввода-вывода. Для их использования необходимо подключить файл заголовка:
#include <stdio.h>
Форматированный вывод выполняется функцией printf:
printf(“формат”, список аргументов);
Команда формата в начала содержит знак ‘%’, затем – код формата. Некоторые коды формата:
%с – отдельный символ
%d – десятичное число
%e – десятичное число с мантиссой и порядком
%f – деятичное с плавающей точкой
%s – строка символов
Пример:
print(“Hi %c %d %s”,’c’,10,”there!”);
получится: Hi c 10 there!
Для форматированного ввода используется функция scanf:
scanf (“формат”,список аргументов);
Список аргументов должен содержать адреса переменных, куда будут помещены значения. Например:
int count;
scanf(“%d”,&count);//&count–адрес переменной count
Массивы
Массив объявляется путём указания после имени переменной квадратных скобок
тип имя_переменной [количество элементов];
Пример: int s[10] - массив из 10 целых чисел.
char mas[20] - строка на 20 символов
Нумерация элементов массива начинается с нуля. В C++ не выполняется проверка выхода индекса за границы массива, поэтому при программировании нужна аккуратность.
В следующем примере массив с заполняется случайными числами в интервале [-100, 100]
#include <stdlib.h>
#include <time.h>
void main()
{ int i, c[10]; randomize();
for(int i=0;i<10;i++) c[i]=random(201)-100;
}
При объявлении массива можно его сразу инициализировать:
int a[5]={3,5,7,11,13};
Если список значений короче длины массива, то остальные элементы инициализируются нулями.
Аналогично объявляются многомерные массивы:
тип имя [size1][size2]…[sizeN]
Пример: int t[4][10]; // объявляется двумерный массив из 40 элементов (4 строки, 10 столбцов)
обратиться к произвольному элементу массива можно так: t[i][j]
!!! не перепутайте c Pascal, t[i,j] – неправильная запись, но компилятор при этом ошибку не выдает (вспомним про операцию «запятая»)
Если одномерный массив инициализируется при объявлении, то его размер можно не указывать – компилятор сам его подсчитает:
int a[]={1,2,3};
Многомерный массив можно рассматривать как массив, элементы которого, в свою очередь, являются массивами. Например:
int a[5][10];
при этом a[0], a[1], …,a[4] – одномерные массивы (строки матрицы a)
Варианты индивидуальных заданий
Вариант 1
1. Составить программу, определяющую, проходит ли кирпич с размерами A*B*C через круглое отверстие диаметром D (A,B,C,D задаются оператором ввода).
2. Дано натуральное число n. Bычислить n! (произведение 1*2*...*n)
3. Вывести на экран все простые числа, не превосходящие заданное
число М, которое вводится с клавиатуры. Простые числа не имеют других делителей, кроме единицы и самого себя.
4. Задан массив L из N элементов. Определить произведение всех положительных элементов и сумму всех отрицательных элементов. Число N и значения элементов массива задаются вводом.
5. В массиве C из N элементов найти элемент, имеющий наименьшее значение и поменять его местами с последним элементом. Значение N задать при помощи ввода, а сам массив сформировать из случайных чисел в диапазоне от -100 до 100.
6. Определить максимальное и минимальное значение элементов матрицы размерами N*M (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от 10 до 200.
7. Дана целочисленная квадратная матрица порядка n. Найти номера строк:
a) все элементы которых – нули;
б) все элементы которых одинаковы.
Найти максимальный из элементов на главной и побочной диагоналях.
Вариант 2
1. Вводится произвольное число X. Вывести на экран, четное оно или нечетное. Нуль не является ни четным, ни нечетным.
2.Вычислить сумму N слагаемых (N задается оператором ввода):
S=1+1/2+1/4+1/8+1/16+...
3. Вывести на экран N первых простых чисел, начиная с единицы. N вводится с клавиатуры. Простые числа не имеют других делителей, кроме единицы и самого себя.
4. В массиве A из N элементов определить сумму положительных и отрицательных элементов. Число N и значения элементов массива задаются вводом.
5. Задан массив A из N элементов и массив B из M элементов. Сформировать массив L из массивов A и B путем их слияния так, чтобы сначала располагались все элементы массива A, а затем все элементы массива B. Значения N и M ввести с клавиатуры, а массивы A и B сформировать из случайных чисел в диапазоне от -10 до 100.
6. Определить сумму всех элементов матрицы размерами N*M (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –10 до 50.
7. Дана целочисленная квадратная матрица порядка n. Найти номера строк:
а) все элементы которых четны;
б) в которых нет ни одного нулевого элемента.
Приравнять к нулю все элементы на главной и побочной диагоналях.
Вариант 3
1. Вводятся три произвольных числа X,Y,Z. Найти наибольшее среди них.
2. Вычислить сумму N слагаемых (N задается оператором ввода):
S=1+1/3+1/5+1/7+...
3. Написать программу, которая выводит на экран всю таблицу умножения от 1 до 9.
4. В массиве A из N элементов определить количество положительных, отрицательных элементов и нулей. Число N и значения элементов массива задаются вводом.
5. Заданы два массива A и B по N элементов. Сформировать и вывести на экран массив из 2*N элементов:
A(1)+B(1), A(1)-B(1), A(2)+B(2), A(2)-B(2),.....,A(N)+B(N), A(N)-B(N)
Значение N ввести с клавиатуры, массивы сформировать из случайных чисел в диапазоне от 0 до 100.
6. В целочисленной матрице A размерами N*M вычислить сумму элементов, имеющих четные значения (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Дана целочисленная квадратная матрица порядка n. Найти номера строк, элементы которых упорядочены по возрастанию.
Вариант 4
1. Вводятся два произвольных числа A и B. В зависимости от их значений вывести на экран "A>B","A<B" или "A=B".
2. Вычислить сумму N слагаемых (N задается оператором ввода):
S=1+1/(1*2)+1/(2*3)+1/(3*4)+...
3. Составить программу вывода всех трехзначных десятичных чисел, сумма цифр которых равна данному натуральному числу, которое вводится с клавиатуры.
4. В массиве A из N элементов определить разность между максимальным и минимальным элементами. Число N и значения элементов массива задаются вводом.
5. Задан массив A из N элементов. Сформировать массив B, coдержащий только те элементы массива A, значение которых больше заданного числа X. Значения X, N и элементы массива A вводятся.
6. В целочисленной матрице A размерами N*M вычислить сумму элементов, имеющих нечетные значения (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –10 до 100.
7. Дана целочисленная квадратная матрица порядка n. Найти сумму элементов той строки, в которой расположен максимальный элемент. Матрицу сформировать из случайных чисел в диапазоне от –10 до 10.
Вариант 5
1.Вводятся два произвольных числа A и B. Вывести на экран, одинаковые у них знаки или разные. Отдельно рассмотреть случай ввода нулевых значений.
2. Вычислить сумму с заданной точностью (суммирование производить до появления в сумме слагаемых, меньших заданной величины E):
S=1+1/1!+1/2!+1/3!+...
3. Вводится натуральное число n. Получить наибольшее число k, для которого 2k<n.
4. В массиве X из M элементов (M не больше 30) определить максимальный элемент и его номер. Число M и значения элементов массива задаются вводом.
5. Проверить, является ли заданный массив упорядоченным по возрастанию, или убыванию, или вообще не отсортирован.
6. Определить сумму положительных и сумму отрицательных элементов матрицы размерами N*M (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Дана целочисленная квадратная матрица порядка n. Переставить строки в порядке убывания сумм элементов. Суммы строк выводить вместе со строками. Матрицу сформировать из случайных чисел в диапазоне от –10 до 10.
Вариант 6
1. Вводятся два произвольных числа A и B. Вывести на экран, делится ли большее из них на меньшее без остатка или нет.
2. Вычислить сумму с заданной точностью (суммирование производить до появления в сумме слагаемых, меньших заданной величины E):
S=1+1/2+1/4+1/8+1/16+...
3. Пусть n натуральное число и пусть n!! означает 1*3*5*7*.....*n для нечетного n и 2*4*6*8*.....*n для четного n. Для заданного натурального n вычислить n!!
4 В массиве A из N элементов определить количество элементов, имеющих четные значения, и сумму этих элементов. Число N и значения элементов массива задаются вводом.
5. В массиве A из 20 элементов определить наибольшие из первых десяти элементов и последних десяти элементов и поменять их местами. Элементы массива A должны быть случайными числами в диапазоне от 0 до 100.
6 В матрице размерами N*N (N не больше 10) определить сумму элементов, находящихся на главной диагонали. Матрицу сформировать из случайных двузначных чисел.
7. Дана целочисленная квадратная матрица порядка n. Переставить строки таким образом, чтобы первый столбец оказался упорядоченным по возрастанию. Матрицу сформировать из случайных чисел в диапазоне от –10 до 10.
Вариант 7
1. Составить программу, которая по введенной текущей дате, состоящей из номера месяца и номера дня, поздравляет с праздником 8 Марта,1 Мая и Новым Годом, выдавая сообщение "Поздравляю с <название праздника>".
2. Вычислить сумму с заданной точностью (суммирование производить до появления в сумме слагаемых, меньших заданной величины E):
S=1+1/(3*5)+1/(5*7)+1/(7*9)+...
3. Вывести на экран все трехзначные натуральные числа, в записи которых нет двух одинаковых цифр.
4 В массиве A из N элементов определить количество элементов, значения которых больше среднего арифметического всех элементов. Число N и значения элементов массива задаются вводом.
5. В массиве A из N элементов поменять местами первый элемент с последним, второй - с предпоследним и т.д.
6. В целочисленной матрице размерами N*M определить количество элементов, которые имеют четные значения (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от 0 до 100.
7. Дана целочисленная квадратная матрица порядка n. Переставить столбцы таким образом, чтобы первая строка оказалась упорядоченной по возрастанию. Матрицу сформировать из случайных чисел в диапазоне от –10 до 10.
Вариант 8
1. Вводятся три произвольных числа. Проверить, не является ли одно из них суммой двух других.
2. Вычислить сумму с заданной точностью (суммирование производить до появления в сумме слагаемых, меньших заданной величины E):
S=1+1/(1*2)+1/(2*3)+1/(3*4)+...
3. Вывести на экран все трехзначные натуральные числа, в записи которых есть одинаковые цифры.
4. Задан массив A из N элементов. Составить программу, определяющую, содержится ли в нем хотя бы один элемент, имеющий четное значение. Программа должна печатать либо слово "да", либо слово "нет". Число N и значения элементов массива задаются вводом. N не больше 10.
5. Задан массив А из 20 элементов. Поменять местами 1-й элемент с 11-м, 2-й с 12-м, 3-й с 13-м и т. д. Вывести исходный и полученный массивы. Элементы массива A должны быть случайными числами в диапазоне от 0 до 100.
6. В матрице размерами N*M определить количество положительных, отрицательных элементов и нулей (N и M не больше 10) и максимальный элемент. Матрицу сформировать из случайных чисел в диапазоне от –10 до 100.
7. Дана целочисленная квадратная матрица порядка n. Переставить столбцы в порядке возрастания сумм их элементов. Матрицу сформировать из случайных чисел в диапазоне от –10 до 10.
Вариант 9
1. Дано произвольное число X. Вычислить и вывести на экран Y=ln X, если Х имеет положительное значение. В остальных случаях вывести сообщения "логарифм нуля не существует" или "логарифм отрицательного числа не существует" в зависимости от значения X.
2. Вычислить сумму с заданной точностью (суммирование производить до появления в сумме слагаемых, меньших заданной величины E):
S=1+1/(1*2)+1/(3*4)+1/(5*6)+...
3. Определить, является ли введенный номер автобусного билета «счастливым». Автобусный билет имеет шестизначный номер и является счастливым, если сумма первых трех цифр равна сумме последних цифр.
4 Задан массив A из N элементов. Составить программу, определяющую, содержится ли в нем хотя бы один элемент, имеющий отрицательное значение. Программа должна выводить либо слово "да", либо слово "нет". Число N и значения элементов массива задаются вводом. N не больше 10.
5. С клавиатуры вводится массив из n элементов, упорядоченный по возрастанию. Затем вводится еще одно число. Вставить его в массив таким образом, чтобы не нарушилась упорядоченность.
6. В матрице размерами N*M определить минимальный элемент и номер строки, где он находится (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Дана целочисленная квадратная матрица порядка n. Удалить из нее строку с минимальным средним значением элементов.
Вариант 10
1.Даны действительные числа A и B. Найти корень уравнения AX=B. Предусмотреть выдачу сообщения "Уравнение не имеет решения", если A равно нулю, а В не равно нулю, или "Уравнение имеет бесчисленное множество решений", если А и В равны нулю.
2. Вычислить сумму N слагаемых (N задается оператором ввода):
S=1+1/1!+1/2!+1/3!+...
3. Подсчитать общее количество «счастливых» автобусных билетов. Автобусный билет имеет шестизначный номер и является счастливым, если сумма первых трех цифр равна сумме последних цифр.
4 В целочисленном массиве A из N элементов определить число элементов, имеющих четное значение. Число N и значения элементов массива задаются вводом.
5. С клавиатуры вводятся два массива, оба упорядочены по возрастанию. Слить их в тритий массив, также упорядоченный.
6 Определить среднее арифметическое всех положительных элементов матрицы размерами N*M (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Дана целочисленная квадратная матрица порядка n. В строках с отрицательным элементом на главной диагонали найти:
а)сумму всех элементов;
б) наибольший из всех элементов.
Вариант 11
1. Вводятся три произвольных числа. Проверить, может ли существовать треугольник с такими длинами сторон.
2. Вычислить сумму с заданной точностью Е (E > 0). Считать, что требуемая точность достигнута, если очередное слагаемое оказалось меньше, чем Е, - это и все последующие слагаемые можно уже не учитывать. Вычислить сумму:
S=1+1/1!+1/2!+1/3!+...
3. Вывести на экран последовательность из N чисел Фибоначчи:
1 1 2 3 5 8 13 21 и т.д.
4. Задан массив A из N элементов. Составить программу, определяющую, содержится ли в нем один элемент, имеющий максимальное значение или таких элементов несколько. Программа должна выводить либо слово "один", либо слово "не один". Число N и значения элементов массива задаются вводом. N не больше 10.
5. В заданном массиве из n элементов отсортировать по возрастанию его часть, находящуюся между двумя введенными номерами. Массив формируется из случайных чисел в диапазоне от –100 до 100, номера вводятся как два целых числа, не большие чем n.
6. В матрице размерами N*M определить максимальный элемент в каждой строке (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Дана целочисленная квадратная матрица порядка n. Удалить из нее строку и столбец, на пересечении которых находится максимальный элемент (считаем, что он один).
Вариант 12
1. Вводится произвольное трехзначное число. Выяснить, четное или нечетное значение имеет сумма его цифр.
2. Вычислить сумму n слагаемых:
S=1+1/3+1/5+1/7+...
3. Вывести на экран последовательность из чисел Фибоначчи, не превышающих заданное число N. Последовательность чисел Фибоначчи выглядит так:
1 1 2 3 5 8 13 21 и т.д.
4. Задан массив A из N элементов. Составить программу, определяющую, содержится ли в нем один элемент, имеющий минимальное значение или таких элементов несколько. Программа должна выводить либо слово "один", либо слово "не один". Число N и значения элементов массива задаются вводом. N не больше 10.
5. Написать программу для перевода числа из десятичной в любую другую систему счисления (основание не больше 16).
6. В матрице размерами N*M определить максимальный элемент в каждом столбце (N и M не больше 10). Матрицу сформировать из случайных чисел в диапазоне от –100 до 100.
7. Выяснить, есть ли в заданной матрице одинаковые элементы. Матрица содержит n строк и m столбцов и сформирована из случайных чисел в диапазоне от-10 до 10. Программа должна вывести «да» или «нет».
Лабораторная работа №2