Int *p; // указатель на тип int
Базовые функции
Имя | Описание |
abs | Возвращает абсолютную величину целого числа |
acos | арккосинус |
asin | арксинус |
atan | арктангенс |
atan2 | арктангенс с двумя параметрами |
ceil | округление до ближайшего большего целого числа |
cos | косинус |
random | выводит случайное число от 0 до аргумента функции. |
exp | вычисление экспоненты |
fabs | абсолютная величина (числа с плавающей точкой) |
floor | округление до ближайшего меньшего целого числа |
fmod | вычисление остатка от деления нацело для чисел с плавающей точкой |
frexp | разбивает число с плавающей точкой на мантиссу и показатель степени. |
ldexp | умножение числа с плавающей точкой на целую степень двух |
log | натуральный логарифм |
log10 | логарифм по основанию 10 |
modf(x,p) | извлекает целую и дробную части (с учетом знака) из числа с плавающей точкой |
pow(x,y) | результат возведения x в степень y, xy |
sin | синус |
sinh | гиперболический синус |
sqrt | квадратный корень |
tan | тангенс |
tanh | гиперболический тангенс |
6. Дано число 123456 типа int. заменить четверку на символ * и вывести результат на экран. Написать исходный код консольной программы.
#include <iostream>
using namespace std;
int main(){
setlocale (LC_ALL, "RUS");
int a = 123456;
cout<<a<<endl;
cout<<(a/100000);
cout<<(a/10000)%10;
cout<<(a/1000)%10;
cout<<"*";
cout<<(a/10)%10;
cout<<a%10;
cout<<endl;
return 0;
}
7. Дано число 541069 типа int. вывести меньшую и большую цифру числа. Написать исходный кд консольной программы.
#include <iostream>
using namespace std;
int main() {
setlocale (LC_ALL, "RUS");
int a = 541069;
int max = -99999;
int min = 99999;
cout << a << endl;
int d = a % 10;
if(max < d)
max = d;
cout << max << endl;
int b = (a / 100) % 10;
if(min > b)
min = b;
cout << min << endl;
return 0;
}
8. Деление числа на разряды. Дано число 650123 типа int. Вывести на экран его разряды: 1-й разряд 3; 2-й разряд 2; 3-й разряд 1; 4-й разряд 0; 5-й разряд 5; 6-й разряд равен 6. Написать исходный код консольной программы.
#include <iostream>
using namespace std;
int main(){
setlocale (LC_ALL, "RUS");
int a = 650123;
cout<<a<<endl;
cout<<"1 разряд "<<a%10<<endl;
cout<<"2 разряд "<<(a/10)%10<<endl;
cout<<"3 разряд "<<(a/100)%10<<endl;
cout<<"4 разряд "<<(a/1000)%10<<endl;
cout<<"5 разряд "<<(a/10000)%10<<endl;
cout<<"6 разряд "<<a/100000<<endl;
return 0;
}
9. Динамическое выделение памяти. Динамические массивы.
Для использования функций динамического выделения памяти необходимо описать указатель, представляющий собой начальный адрес хранения элементов массива.
int *p; // указатель на тип int
Начальный адрес статического массива определяется компилятором в момент его объявления и не может быть изменен.
Для динамического массива начальный адрес присваивается объявленному указателю на массив в процессе выполнения программы.
Динамический массив - это массив, в котором количество элементов, и соответственно выделенный на него объем памяти, может меняться как при инициализации, так и при работе с ним. Строго говоря, такой массив не реализован в языке C++. Есть некоторая его замена, обладающая рядом функций динамического массива.
Объявляют массив таким образом:
int a;
a = 7;
int *mas = new int[a];
10. В музее регистрируется в течение суток время прихода и ухода каждого посетителя. Таким образом, за день получены N пар значений, где первое значение в паре показывает время прихода посетителя и второе значение - время его ухода. В первой строке входного файла INPUT.TXT записано натуральное число N – количество зафиксированных посетителей в музее в течении суток. Далее, идут N строк с информацией о времени прихода и ухода каждого посетителя. Первое значение в формате «ЧЧ:ММ» - время прихода, второе значение в формате «ЧЧ:ММ» - время ухода. Требуется найти максимальное число посетителей, которые находились в музее одновременно.
#include<iostream>
#include<fstream>
using namespace std;
int main(){
setlocale(LC_ALL,"Russian");
ifstream in("pks.txt");
char q;
int kol;
in>>kol;
int **mass, h, m;
mass = new int *[kol];
for(int i=0;i<kol;i++)
mass[i]=new int [2];
for ( int i =0; i < kol; i++ ){
in>>h>>q>>m;
mass[i][0] = h*60+m;
in>>h>>q>>m;
mass[i][1] = h*60+m;
cout<<mass[i][0] << " " << mass[i][1]<<endl;
}
for ( int i = 0; i < kol-1; i++ )
if ( mass[i][0] > mass[i+1][0] ){
h = mass[i][0];
mass[i][0] = mass[i+1][0];
mass[i+1][0] = h;
h = mass[i][1];
mass[i][1] = mass[i+1][1];
mass[i+1][1] = h;
}
for ( int i =0; i < kol; i++ ){
cout<<mass[i][0] << " " << mass[i][1]<<endl;
}
h = 0;
m = 0;
int max=0;
for ( int i = 0; i < 1439; i++){
if ( i == mass[m][0] ) {
h++;
m++;
if ( m == kol ) break;
}
if ( h > max ) max = h;
for ( int j = 0; j < kol; j ++ )
if ( i == mass[j][1] ) h--;
}
cout<<max<<endl;
for ( int i = 0; i < kol; i++ ) delete [] mass[i];
delete [] mass;
return 0;
}
11. Задача про ксерокопии и два ксерокса. Необходимо создать N
копий документа. Первый ксерокс копирует документ за х секунд, а второй – за y секунд. (Разрешается использовать как один ксерокс, так и оба одновременно. Можно копировать не только с оригинала, но и с копии.) Написать программу, которая определит минимальное время, которое будет затрачено, чтобы создать N копий документа.
#include<iostream>
#include<math.h>
using namespace std;
int main() {
int x1, x2, n, k;
int t1, t2;
int tmin=9999, tmax;
cin>>x1>>x2>>n;
if(x1<x2){
k=x1;
n--;
}
else {
k=x2;
n--;
}
for(int i=0; i<=n; i++){
t1=x1*i;
t2=x2*(n-i);
if ( t1 < t2 ) tmax=t2;
else tmax=t1;
if( tmin > tmax ) tmin=tmax;
}
cout<<tmin+k<<endl;
return 0;
}
12. Инструкции в языке С++. Инструкция include, инструкция define.
В С++ действие называется выражением, а выражение, заканчивающееся точкой с запятой, - инструкцией. Инструкция – это атомарная часть С++ программы, которой в
программе на С++ соответствует предложение естественного языка.
Определения констант и макросов можно объединить во включаемые файлы, а затем добавить их в исходный файл при помощи директивы #include. Включаемые файлы также позволяют внедрять объявления внешних переменных и сложных типов данных. Типы можно определять и именовать только один раз во включаемом файле, созданном с этой целью.
Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор также называется именем макроса, а процесс замещения называется подстановкой макроса. Стандартный вид директивы следующий:
#define имя_макроса последовательность_символов
Обратим внимание, что в данном операторе отсутствует точка с запятой. Между идентификатором и последовательностью символов может быть любое число пробелов. Макрос завершается только переходом на новую строку.
Например, если необходимо использовать TRUE для значения 1, a FALSE для 0 то можно объявить следующие два макроса:
#define TRUE 1
#define FALSE 0
В результате, если компилятор обнаружит в тексте программы TRUE или FALSE, то он заменит их на 1 и 0 соответственно.
13. Массивы структур.
- Структуры в C++ представляют из себя нечто одно целое, что содержит в себе целый набор разнообразных, определенных пользователем данных.
- Структуры — это составной тип данных, построенный с использованием разнообразных типов.
int A[10]; // Десять элементов и все элементы типа int struct MyStruct { int A; char C[10]; }; MyStruct obj1[10]; //Десять элементов типа MyStruct //При этом каждый из этих десяти элементов состоит из двух элементов определенных внутри структуры |
14. Написать консольное приложение для перевод арабских чисел в римские.
#include<iostream>
using namespace std;
int main(){
int n;
cin>>n;
int a[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
char r[][3] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
for(int i=0; i < 13; i++){
while(n>=a[i]){
cout<<r[i];
n-=a[i];
}
}
return 0;
}
15. Написать консольное приложение для перевода римских чисел в арабские.
#include<iostream>
using namespace std;
int main(){
char n[20];
cin>>n;
int a[] = {1000, 500, 100, 50, 10, 5, 1};
char r[] = {'M', 'D', 'C', 'L', 'X', 'V', 'I'};
int res[20];
for ( int i = 0; i < 20; i++ ) res[i] = 0;
for ( int i = 0; n[i] != '\0'; i++ ) {
for ( int j = 0; j < 7; j++ )
if( r[j] == n[i] ) res[i] = a[j];
}
int summ=0;
for ( int i = 0; i < 19; i++ ){
if ( res[i] < res[i+1] )
summ-=res[i];
else
summ+=res[i];
}
cout<<summ<<endl;
for ( int i = 0; i < 20; i++ )
cout<<res[i]<< " ";
return 0;
}
16. Написать консольное приложение для расчета факториала больших чисел (факториал 1755).
#include<iostream>
#include<math.h>
using namespace std;
int main() {
setlocale(LC_ALL, "Russian");
int a=1755;
long double res=1;
int m[5000];
for (int i=0; i<5000; i++){
m[i]=0;
m[0]=1;
}
for (int i=1;i<=a; i++){
for (int j=0; j<5000; j++){
m[j]*=i;
}
for (int j=0; j<5000;j++){
if (m[j]>10){
m[j+1]+=m[j]/10;
m[j]=m[j]%10;
}
}
}
bool b=true;
for (int i=4999;i>=0;i--){
if (m[i]==0 && b==true)
continue;
else
b=false;
cout<<m[i];
}
return 0;
}
17. Написать консольное приложение, предназначенное для вычисления векторного произведения. Результатом векторного произведения векторов и является вектор
#include <iostream>
using namespace std;
int main() {
double a[3] = { 1, 2, 3 };
double b[3] = { 4, 5, 6 };
double c[3] = { 0 };
c[0] = a[1] * b[2] - a[2] * b[1];
c[1] = a[2] * b[0] - a[0] * b[2];
c[2] = a[0] * b[1] - a[1] * b[0];
cout << c[0] << " " << c[1] << " " << c[2] << " ";
return 0;
}
18. Оператор new.
New — оператор языка программирования C++, обеспечивающий выделение динамической памяти в куче. За исключением формы, называемой «размещающей формой new», new пытается выделить достаточно памяти в куче для размещения новых данных и, в случае успеха, возвращает адрес выделенного участка памяти.
19. Оператор присвоения. Множественное присвоение.
Для сокращённой записи выражений в языке программирования С++ есть специальные операции, которые называются операциями присваивания. Рассмотрим фрагмент кода, с использованием операции присваивания.
В С++ существует пять операций присваивания, не считая основную операцию присваивания: =.
- +=операция присваивания-сложения;
- -=операция присваивания-вычитания;
- *=операция присваивания-умножения;
- /=операция присваивания-деления;
- %=операция присваивания-остатка от деления;
20. Оператор цикла for.
Цикл — многократное прохождение по одному и тому же коду программы. Циклы необходимы программисту для многократного выполнения одного и того же кода, пока истинно какое-то условие. Если условие всегда истинно, то такой цикл называется бесконечным, у такого цикла нет точки выхода.
В языке программирования С++ существуют такие циклы:
- цикл for
- цикл while
- цикл do while
Тело цикла будет выполняться до тех пор, пока условие будет истинно(т. е. true).
//форма записи оператора цикла for: for ( выражение1; условие; выражение3 ){ /*один оператор или блок операторов*/; } 21. Оператор цикла while. Оператор цикла while или цикл while—цикл, повторяющий одно и то же действие, пока условие продолжения цикла whileостаётся истинным.
Условие продолжения цикла должно быть истинно true, как только условие стало ложным, выполняется выход из цикла. 22. Операторы сравнения. Равенство a == b Неравенствоa != b Больше a > b Меньше a < b Больше или равно a >= b Меньше или равноa <= b 23. Перегрузка функций. Под перегрузкой функции понимается, определение нескольких функций (две или больше) с одинаковым именем, но различными параметрами. Наборы параметров перегруженных функций могут отличаться порядком следования, количеством, типом. Таким образом перегрузка функций нужна для того, чтобы избежать дублирования имён функций, выполняющих сходные действия, но с различной программной логикой. 24. Передача аргументов в функцию. Понятие локальной переменной. В общем, условно (для упрощения понимания) есть 2 способа передачи аргументов в функцию в Си : И 3 способа в C++: void func1 ( int arg ); void func2 ( int * arg ); void func3 ( int & arg ); 25. Передача массива в функцию. Когда массив используется в качестве аргумента функции, передается только адрес массива, а не копия всего массива. При вызове функции с именем массива в функцию передается указатель на первый элемент массива. (Надо помнить, что в С имена массивов без индекса - это указатели на первый элемент массива.) Параметр должен иметь тип, совместимый с указателем. Имеется три способа объявления параметра, предназначенного для получения указателя на массив. Во-первых, он может быть объявлен как массив, как показано ниже: 26. Побитовые операторы. Битовые операции — это тестирование, установка или сдвиг битов в байте или слове, которые соответствуют стандартным типам языка С char и int. Битовые операторы не могут использоваться с float, double, long double, void и другими сложными типами. |
Таблица 4.3. Побитовые операторы
Символ операции | Значение | Использование |
~ | Побитовое НЕ | ~expr |
<< | Сдвиг влево | expr1<<expr2 |
>> | Сдвиг вправо | expr1>>expr2 |
& | Побитовое И | expr1 & expr2 |
^ | Побитовое Исключающее ИЛИ | expr1 ^ expr2 |
| | Побитовое ИЛИ | expr1 | expr2 |
&= | Побитовое И с присваиванием | expr1 &= expr2 |
^= | Побитовое Искл ИЛИ с присваиванием | expr1 ^= expr2 |
|= | Побитовое ИЛИ с присваиванием | expr1 |= expr2 |
<<= | Сдвиг влево с присваиванием | expr1 <<= expr2 |
>>= | Сдвиг вправо с присваиванием | expr1 >>= expr2 |
27. Пользователь вводит с клавиатуры произвольную строку. Написать консольную программу, которая подсчитает, сколько и каких символов в этой строке.
#include <iostream>
using namespace std;
void main() {
setlocale(LC_ALL, "Russian");
char str[2000];
cin.getline(str, 2000);
сout << endl;
int a[256];
for (int i = 0; str[i]; i++) {
a[str[i]]++;
}
for (int i = 0; i < 256; i++) {
if (a[i])
cout << " Символ " << char(i) << " встретился " << a[i] << " раз" << endl;
}
system("pause");
}
28. Понятие структуры в С++
Структуры в С++ есть совокупность переменных, объединенных под одним именем.
Другими словами можно сказать так.
Структуры помогают группировать связанные данные под одним именем. С помощью структуры можно создать некоторую составную переменную, содержащую в себе набор некоторых параметров, после чего эта переменная будет равносильна новому типу данных.
29. Приведение переменных.
Cи - стиль приведения типов данных доступен и языке C++, но считается не самодостаточным по сравнению с приведением типов в C++. Так как Си-стиль приведения типов не так точен, как C++-стиль приведения и не так заметен. Cи-стиль приведения типов данных может быть использован для преобразования любого типа в любой другой тип, при этом неважно насколько это небезопасное преобразование, например, преобразование целого числа в указатель типа int). Казалось бы, такое преобразование невозможно, однако компилятор с нами не согласен, но выполнит это приведение. И каков получится результат. ему совершенно не важно. Смотрим синтаксис приведения типов данных согласно Си-стилю:
(type) val |
где, type — тип данных к которому преобразуется значение val
30. Задано время отправления поезда и время в пути до конечной станции. Входной файл INPUT.TXT содержит две строки. В первой строке задано время отправления, а во второй строке – время в пути. Время отправления задается в формате «ЧЧ:MM», где ЧЧ время в часах, ММ – время в минутах. Время в пути задается двумя неотрицательными целыми числами – количество часов и количество минут. Числа разделяются одним пробелом. Количество часов не превышает 120, минут – 59. Требуется написать консольную программу, которая найдет время прибытия этого поезда (возможно, в другие сутки)
#include <iostream>
#include <fstream>
using namespace std;
int main() {
setlocale(LC_ALL, "RUSSIAN");
ifstream in("input.txt");
int h, m, h1, h2, m1, m2, h3, m3;
int d = 0;
char q;
in » h » q » m;
in » h1 » m1;
h2 = h + h1;
m2 = m + m1;
if (m2 >= 60) {
m2 = m2 - 60;
h2++;
}
if (h2 >= 24) {
h2 = h2 - 24;
d++;
}
cout << "Прибытие через: " << d<< "дней: "<< " | " << h2 << q << m2;
return 0;
}
31. Работа с файлами.
Открытие файлов
Наиболее часто применяются классы ifstream для чтения, ofstream для записи и fstream для модификации файлов. Файловый ввод/вывод аналогичен стандартному вводу/выводу, единственное отличие – это то, что ввод/вывод выполнятся не на экран, а в файл. Если ввод/вывод на стандартные устройства выполняется с помощью объектов cin и cout, то для организации файлового ввода/вывода достаточно создать собственные объекты, которые можно использовать аналогично операторам cin иcout.
Например, необходимо создать текстовый файл и записать в него строку Работа с файлами в С++. Для этого необходимо проделать следующие шаги:
- создать объект класса ofstream;
- связать объект класса с файлом, в который будет производиться запись;
- записать строку в файл;
- закрыть файл.
Почему необходимо создавать объект класса ofstream, а не класса ifstream? Потому, что нужно сделать запись в файл, а если бы нужно было считать данные из файла, то создавался бы объект класса ifstream.
// создаём объект для записи в файл ofstream /*имя объекта*/; // объект класса ofstream |
Назовём объект – fout, Вот что получится:
ofstream fout("cppstudio.txt"); |
Для чего нам объект? Объект необходим, чтобы можно было выполнять запись в файл. Уже объект создан, но не связан с файлом, в который нужно записать строку.
Через операцию точка получаем доступ к методу класса open(), в круглых скобочках которого указываем имя файла. Указанный файл будет создан в текущей директории с программой. Если файл с таким именем существует, то существующий файл будет заменен новым. Итак, файл открыт, осталось записать в него нужную строку. Делается это так:
fout << "Работа с файлами в С++"; // запись строки в файл |
Используя операцию передачи в поток совместно с объектом fout строка Работа с файлами в С++ записывается в файл. Так как больше нет необходимости изменять содержимое файла, его нужно закрыть, то есть отделить объект от файла.
fout.close(); // закрываем файл |
Итог – создан файл со строкой Работа с файлами в С++.
32. Рекурсия. Пример рекурсии.
Рекурсия достаточно распространённое явление, которое встречается не только в областях науки, но и в повседневной жизни. Например, эффект Дросте, треугольник Серпинского и т. д. Самый простой вариант увидеть рекурсию – это навести Web-камеру на экран монитора компьютера, естественно, предварительно её включив. Таким образом, камера будет записывать изображение экрана компьютера, и выводить его же на этот экран, получится что-то вроде замкнутого цикла. В итоге мы будем наблюдать нечто похожее на тоннель.
В программировании рекурсия тесно связана с функциями, точнее именно благодаря функциям в программировании существует такое понятие как рекурсия или рекурсивная функция. Простыми словами, рекурсия – определение части функции (метода) через саму себя, то есть это функция, которая вызывает саму себя, непосредственно (в своём теле) или косвенно (через другую функцию). Типичными рекурсивными задачами являются задачи: нахождения n!, числа Фибоначчи.
33. Символьные массивы, работа с текстовыми строками, нуль-символ.
Строки в С++ представляются как массивы элементов типа char, заканчивающиеся нуль-терминатором \0 называются С строками или строками в стиле С.
char str[] = "Жил-был пёс"; // '\0' присутствует неявно
cout << str << endl;
Прописывать нулевой символ не надо. Он присутствует неявно и добавляется в каждую такую строковую константу автоматически. Таким образом, при том что мы видим 11 символов в строке, размер массива будет 12, так как\0тоже символ и занимает один байт памяти. Займет он последнюю ячейку этого символьного массива. Как видите, для вывода строки на экран, достаточно обратиться к ней по имени: cout << str << endl; coutбудет выводить на экран символ за символом, пока не встретит в одной из ячеек массива символ конца строки \0 и вывод прервется. Такое обращение для обычного символьного массива (массива без \0) недопустимо. Так как компилятор выводил бы символы на экран даже выйдя за рамки массива, пока не встретил бы в какой-то ячейке памяти символ \0.
34. Способы установление значений элементам массива.
35. Ссылки.
Ссылки – особый тип данных, являющийся скрытой формой указателя, который при использовании автоматически разименовывается. Ссылка может быть объявлена как другим именем, так и как псевдоним переменной, на которую ссылается.
#include "stdafx.h"
#include <iostream>
using namespace std;
int main(int argc, char* argv[])
{
int value = 15;
int &reference = value; // объявление и инициализация ссылки значением переменной value
cout << "value = " << value << endl;
cout << "reference = " << reference << endl;
reference+=15; // изменяем значение переменной value посредством изменения значения в ссылке
cout << "value = " << value << endl; // смотрим, что получилось, как будет видно дальше значение поменялось как в ссылке,
cout << "reference = " << reference << endl; // так и в ссылочной переменной
system("pause");
return 0;
}
36. Статические одномерные и многомерные массивы. Инициализация массивов.
37. Структура консольной программы.
Своими словами, структура программ это разметка рабочей области (области кода) с целью чёткого определения основных блоков программ и синтаксиса. Структура программ несколько отличается в зависимости от среды программирования.
#include "stdafx.h"
//здесь подключаем все необходимые препроцессорные директивы
int main() { // начало главной функции с именем main
//здесь будет находится ваш программный код
}
38. Тернарный оператор.
В С++ есть условная операция, очень похожая на условный оператор выбора if else. Условная операция «? :» называется тернарной операцией (то есть трёхместная (имеет три операнда), единственная в C++).
Форма записи тернарной операции в C++
"условие" ? "выражение 1" : "выражение 2";
Если условие истинно, то выполняется выражение 1, иначе (условие ложно) выполняется выражение 2.
Пример:
a > b ? cout << a : cout << b; // если а > b, то выполняется cout << a, иначе выполняется cout << b |
Таким образом, если, а > b напечатать а, иначе напечатать b. То есть, программа печатает большее из чисел. Использование условной операции может в некоторых случаях упрощать код, тогда как воспользоваться оператором if else таким же образом не возможно.
39. Типы переменных. Объявление переменной. Константы.
40. Указатели.
Указатель – переменная, значением которой является адрес ячейки памяти. То есть указатель ссылается на блок данных из области памяти, причём на самое его начало. Указатель может ссылаться на переменную или функцию. Для этого нужно знать адрес переменной или функции. Так вот, чтобы узнать адрес конкретной переменной в С++ существует унарная операция взятия адреса &. Такая операция извлекает адрес объявленных переменных, для того, чтобы его присвоить указателю. Указатели используются для передачи по ссылке данных, что намного ускоряет процесс обработки этих данных (в том случае, если объём данных большой), так как их не надо копировать, как при передаче по значению, то есть, используя имя переменной. В основном указатели используются для организации динамического распределения памяти, например при объявлении массива, не надо будет его ограничивать в размере. Ведь программист заранее не может знать, какого размера нужен массив тому или иному пользователю, в таком случае используется динамическое выделение памяти под массив. Любой указатель необходимо объявить перед использованием, как и любую переменную.
int var = 123; // инициализация переменной var числом 123
int *ptrvar = &var;
41. Условный оператор if.
Оператор if служит для того, чтобы выполнить какую-либо операцию в том случае, когда условие является верным и альтернативное действие, когда условие ложно.. Условная конструкция в С++ всегда записывается в круглых скобках после оператора if.
Внутри фигурных скобок указывается тело условия. Если условие выполнится, то начнется выполнение всех команд, которые находятся между фигурными скобками.
42. Условный оператор switch.
§ синтаксис:
§ блок default можно расположить в любом месте блока switch() Например между первым и вторым case. Его код в любом случае выполнится только тогда, если не найдется нужного значения в блоках case. Но, советую вам располагать его именно в конце, как делают большинство программистов. Это такое негласное правило.
§ в нижнем блоке switch(), будь то default или case, оператор breakможно не указывать. Так сделано в нашем примере. Но следует помнить, что во всех остальных break обязателен!
§ default не является обязательным. Его в switch()может и не быть вовсе. В таком случае, если ни одно значение блоков case не совпадет с тем, что принял switch() , программа просто перейдет на следующую строку кода, расположенную под switch()
§ иногда блоки case проверяют символьные, а не числовые значения. Тогда эти символы необходимо брать в одинарные кавычки — case ‘b’: , case ‘G’: , case ‘+’ и т.д.
43. Функции. Объявление и использование функций. Типы функций.
Функция — это определенная группа операций с уникальным именем, которая может:
1. Вызываться по имени в любом месте программы.
2. Получать определенный набор значений из внешней программы в момент вызова.
3. Возвращать в качестве значения некоторый результат заранее заданного типа.
Также функцию можно рассматривать как операцию, созданную самим разработчиком.
Известный примером функции является main. Она автоматические вызывается при запуске программы.
Создание функции
До того, как функция будет вызвана, она должна быть объявлена.
Объявление функции, аналогично объявлению переменной, указываются имя функции, тип значения, которое она может возвращать, набор её параметров (для каждого параметра задаётся тип и, при желании, имя).
Объявление функции называют также её прототипом.
Схема:
Тип_результата Имя_функции (Тип_пар1, Тип_пар2, ...);
· Тип_результата — некоторый существующий (например, встроенный) тип данных или ключевое слово void, указывающее на то что функция никакого значения возвращать не будет.
· Имя_функции — уникальный для данного пространства имён идентификатор.
· Тип_парN — некоторый существующий (например, встроенный) тип данных для N-oro аргумента.
Примеры:
int max (int, int);
double cube (double)
float massa();
void printarr(*int, int);
После объявления к функции можно обращаться в программе по имени, хотя пока и не понятно, какие действия она будет производить.
Если функция не возвращает никакого результата, т. е. объявлена как void, ее вызов не может быть использован как операнд более сложного выражения (например, значение такой функции нельзя чему-то присвоить).
44. Задача про суслика и собаку. На большом поле, размеченном декартовой системой координат находится суслик и собака. Задача Собаки – съесть суслика, задача суслика – спастись в норке. Суслик бежит к норке по прямой. Собака устремляется к норке со скоростью вдвое большей скорости суслика. Если собака добегает до норки первой (раньше суслика), то она съедает суслика; иначе суслик спасается. Требуется написать программу, которая по известным начальным координатам суслика, собаки и норки определит, спасается суслик или нет.
#include <math.h>
using namespace std;
int main() {
double xc, yc; //координаты суслика
double xd, yd; //координаты собаки
double xn, yn; //координаты норы
double kol, nora = 0; //kol - количество нор
int n = 0;
cin>>xc>>yc>>xd>>yd>>kol;
for (int i = 0; i<kol; i++) {
cin>>xn>>yn;
double s = sqrt((pow((xn - xc), 2) + pow((yn - yd), 2)));
double d = sqrt(((pow((xn - xd), 2) + pow((yn - yd), 2) / 2)));
if (s<d) {
nora = i;
break;
}
}
if (n>0)
cout<<"Suslik spassya v"<<n<<" nore"<<endl;
else
cout<<"-"<<endl;
return 0;
}
45. Двухэтажный автобус высотой 437 сантиметров движется по определенному марштуру. На маршруте встречаются N мостов. Автобус может проехать под мостом тогда и только тогда, когда высота моста превосходит высоту автобуса. Во входном файле INPUT.TXT сначала содержится число N. Далее идут N натуральных чисел - высоты мостов в сантиметрах в том порядке, в котором они встречаются на пути автобуса. Требуется написать консольную программу, которая определит, безопасен ли данный маршрут для автобуса или нет. Если нет – вывести на экран номер моста, под которым произойдет авария.
#include <iostream>
#include <fstream>
using namespace std;
int main(){
int avtobus=437;
int mosti;
int mostiVis[100];
int sloman, nomerMosta;
ifstream in("input.txt");
in>>mosti;
for (int i=0; i<mosti; i++){
in>>mostiVis[i];
if (mostiVis[i]<avtobus){
sloman=mostiVis[i];
nomerMosta=i+1;
break;
}else{
sloman=0;
nomerMosta=0;
}
}
if (sloman == 0){
cout << " " <<endl;
}else{
cout<<" "<<endl;
cout<<nomerMosta<<" "<<endl;
}
return 0;
}
46. Задан двумерный массив размером NxM. Заполнить его целыми числами от 1 до N*M по спирали, начиная с левого верхнего угла и вывести результат на экран(консольное приложение).
#include<iostream>
#include<math.h>
using namespace std;
void main() {
setlocale(LC_ALL, "Russian");
const int m = 8, n = 6;
int arr[m][n];
int num1 = 0, num2 = n - 1, num3 = 0, num4 = m - 1;
int param = 0;
while (param < m*n) {
for (int i = num1; i <= num2; i++) {
param++;
arr[num3][i] = param;
}
num3++;
for (int i = num3; i <= num4; i++) {
param++;
arr[i][num2] = param;
}
num2--;
for (int i = num2; i >= num1; i--) {
param++;
arr[num4][i] = param;
}
num4--;
for (int i = num4; i >= num3; i--) {
param++;
arr[i][num1] = param;
}
num1++;
}
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << arr[i][j] << " ";
}
cout << endl;
}
system("pause");
}