- •О.Л. Викентьева, А.Н. Гусин, O.A. Полякова
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
- •1. СТРУКТУРНОЕ ПРОГРАММИРОВАНИЕ
- •10.1. Базовые конструкции структурного программирования
- •10.3. Составные операторы
- •10.4. Операторы выбора
- •10.5. Операторы циклов
- •10.6. Операторы перехода
- •11. ПРИМЕРЫ РЕШЕНИЯ ЗАДАЧ С ИСПОЛЬЗОВАНИЕМ ОСНОВНЫХ ОПЕРАТОРОВ C++
- •11.2. Программирование арифметических циклов
- •11.3. Программирование итерационных циклов
- •11.4. Программирование вложенных циклов
- •12. МАССИВЫ
- •12.1. Определение массива в C/C++
- •12.2. Примеры решения задач с использованием массивов
- •13. УКАЗАТЕЛИ
- •13.1. Понятие указателя
- •13.2. Динамическая память
- •13.3. Операции с указателями
- •14. ССЫЛКИ
- •15.3. Динамические массивы
- •СИМВОЛЬНАЯ ИНФОРМАЦИЯ И СТРОКИ
- •16.1. Представление символьной информации
- •16.2. Библиотечные функции для работы со строками
- •16.3. Примеры решения задач с использованием строк
- •17. ФУНКЦИИ В C++
- •17.1. Объявление и определение функций
- •17.2. Прототип функции
- •17.3. Параметры функции
- •17.4. Локальные и глобальные переменные
- •17.5. Функции и массивы
- •17.5.1. Передача одномерных массивов как параметров функции
- •17.5.2. Передача строк в качестве параметров функций
- •17.5.3. Передача многомерных массивов в функцию
- •17.6. Функции с начальными значениями параметров (по умолчанию)
- •17.7. Подставляемые (inline) функции
- •17.8. Функции с переменным числом параметров
- •17.9. Рекурсия
- •17.11. Шаблоны функций
- •17.12. Указатель на функцию
- •17.13. Ссылки на функцию
- •18. ТИПЫ ДАННЫХ, ОПРЕДЕЛЯЕМЫЕ ПОЛЬЗОВАТЕЛЕМ
- •18.1. Переименование типов
- •18.2. Перечисления
- •18.3. Структуры
- •18.3.1. Работа со структурами
- •18.3.2. Битовые поля
- •18.3.3. Объединения
- •19. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
- •19.1. Создание элемента списка
- •19.2. Создание списка из п элементов
- •19.3. Перебор элементов списка
- •19.4. Удаление элемента с заданным номером
- •19.5. Добавление элемента с заданным номером
- •19.6. Двунаправленные списки
- •19.7. Очереди и стеки
- •19.8. Бинарные деревья
- •19.9. Обход дерева
- •19.10. Формирование дерева
- •19.11. Удаление элемента из дерева
- •19.12. Обработка деревьев с помощью рекурсивного обхода
- •20. ПРЕПРОЦЕССОРНЫЕ СРЕДСТВА
- •20.1. Стадии и команды препроцессорной обработки
- •20.2. Директива #define
- •20.3. Включение текстов из файлов
- •20.4. Условная компиляция
- •20.5. Макроподстановки средствами препроцессора
- •21.1. Проектирование программы
- •21.2. Кодирование и документирование программы
- •СПИСОК ЛИТЕРАТУРЫ
- •ПРОЕКТИРОВАНИЕ ПРОГРАММ И ПРОГРАММИРОВАНИЕ НА C++
(pow(x,2)+pow(y,2)>=l&&pow(x,2)+pow(y,2)<=9&&x<=0)||
(х>=0&&х<=1&&у<=-1&&у>=-3) || (х>=1&&х<=2&&у<=0&&у>=-3); cout<<"\n"<<Ok;
Тесты:
Квадрант |
Исходные |
Результат (ОК) |
|
данные (X; Y) |
|||
|
|
||
I |
0.2; 0.2 |
0 |
|
I |
0.7; 0.5 |
1 |
|
II |
-0.5; 0.5 |
0 |
|
II |
-2.0; 0.0 |
1 |
|
III |
-0.5; -0.5 |
0 |
|
III |
-2.0; -1.0 |
1 |
|
IV |
0.5;-0.5 |
0 |
|
IV |
1.5; -1.0 |
1 |
|
Центр системы |
0.0; 0.0 |
0 |
|
координат |
|
|
11.2. Программирование арифметических циклов
Для арифметического цикла заранее известно, сколько раз вы полняется тело цикла.
Задача № 2. Дана последовательность целых чисел из п элемен тов. Найти среднее арифметическое этой последовательности.
#include ciostream.h> #include <math.h> void main()
{
int a,n,i;
double s=0; /^инициализируем переменную на
чальным значением*/
c o u t < < " \ n E n t e r n";
cin>>n; /^вводим количество элементов в по
следовательности */
for(i=l;i<=n;i++)// цикл выполняется п раз
{
cout«"\nEnter а";
cin>>a; // вводим переменную s+=a;/^добавляем значение пере
менной к сумме*/
|
} |
|
|
|
|
|
|
|
|
s = s / n ; //н а х о д и м |
с р е д н е е ариф м етическое |
||||||
|
c o u t c c " Х псреднее |
ар и ф м ети ч еско е |
р а в - |
|||||
HO=,f« s « ,f\ n ff ; |
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
Задача № 3. Найти значение S = l + 2 |
+ 3 + 4 + . .. + N |
|
|
|||||
# i n c l u d e c i o s t r e a m .h > |
|
|
|
|
|
|||
# i n c l u d e < m a th .h > |
|
|
|
|
|
|
||
v o id |
m a in () |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
|
/ * о п исы ваем |
перем енны е и |
и ни ц иализи руем |
s |
на |
||||
чальны м |
з н а ч е н и е м * / |
|
|
|
|
|
|
|
i n t n , i , s = 0 ; |
|
|
|
|
|
|
||
c o u t< < " \ n E n t e r n " ; |
|
|
|
|
|
|||
c in > > n ; /^ в в о д и м к о л и ч е с т в о |
элем ен то в |
в |
по |
|||||
с л е д о в а т е л ь н о с т и * / |
|
|
|
|
|
|
||
f o r ( i = l ; |
i< = n ; |
i + + ) + + )/* ц и к л |
вы полняется |
|||||
п р а з * / |
|
|
|
|
|
|
|
|
s + = i; |
//д о б а в л я е м |
зн а ч е н и е |
перем енной к |
сумме |
c o u t< < " \n S = ”« s « " \ n ,f ;
11.3. Программирование итерационных циклов
Для итерационного цикла должно быть известно условие выпол нения цикла. При использовании цикла с предусловием (w h ile) тело цикла может не выполняться ни разу, если сразу же не выполняется условие цикла. При использовании цикла с постусловием тело цикла будет выполнено хотя бы один раз. И в том, и в другом случае ис пользуется условие выполнения цикла.
Задача № 4. Дана последовательность целых чисел, за которой следует 0. Найти минимальный элемент этой последовательности.
Для решения этой задачи используем цикл с предусловием, так как ноль не входит в последовательность и его не надо обрабатывать при поиске минимального значения.
# i n c l u d e c i o s t r e a m .h >
# i n c l u d e < m a th .h > v o id m a in ()
{
int a,min; cout«"\nEnter a";
cin»a; //вводим первое число min=a;//присваиваем переменной min начальное
//значение
while(а!=0)//цикл с предусловием
{
cout«"\nEnter а"; cin>>a;//вводим следующее число
/^сравниваем с нулем, т.к. 0 не входит в по следовательность и не может быть минимальным и с минимальным значением*/
if (а!=0&&a<min)
min=a; //запоминаем в min новое значение
}
cout<<,f\nmin=Tf<<min<<,f\n,f;//вывод результата
Тесты:
а |
2 |
55 | -3 | -10 | 0 | |
min |
-10 |
|
а |
12 |
55 | 4 | 27 | 0 | |
min |
4 |
|
а |
-6 |
|
min |
-10 |
|
Для решения этой же задачи можно написать программу с ис пользованием цикла с постусловием.
#include <iostream.h> #include <math.h> void main()
{
int a,min; cout«,f\nEnter a";
cin»a; //вводим первое число min=a;//присваиваем переменной min начальное
//значение
do //цикл с постусловием
{
cout<<"\nEnter ам;
cin»a; //вводим следующее число
if (а==0)break;// выход из цикла, если ввели О if (a<min)//сравниваем а с текущим min
min=a; //запоминаем в min новое значение
}
//бесконечный цикл, т.к. выход осуществляется //с помощью break
whiled) ;
cout<<,dnmin=,,<<min<<n\n";//вывод результата
}
Эту же задачу можно решить с помощью цикла for:
#include ciostream.h>
#include <math.h> void main()
{
int a,min; cout<<M\nEnter a";
cin>>a; //вводим первое число min=a;//присваиваем переменной min начальное
//значение
for(;а !=0;)//цикл используется как цикл //с предусловием
{
cout<<"\nEnter а”; cin»a;//вводим следующее число
/*сравниваем с нулем, т.к. 0 не входит в по следовательность и не может быть минимальным и с минимальным значением*/
if (а!=0&&a<min)
min=a; //запоминаем в min новое значение
}
cout«"\nmin="«min«n\n";//вывод результата
}
Задача № 5. Найти сумму чисел Фибоначчи, меньших задан ного числа Q. Числа Фибоначчи - это последовательность чисел: 1, 1, 2, 3, 5, 8, 13, , т.е. каждое следующее число - это сумма двух предыдущих.
#include<iostream.h> void main()
{
int a=l,//первое число b=l,//второе число s=2,//сумма чисел Фибоначчи
Q,
с;//следующее число cout«"\nEnter Q”; cin»Q;//вводим число Q
if (Q<=0) cout«f,Error in Q"; else
/*если Q=l, то сумма тоже будет 1 (первое
число)*/
if ( Q = = l) s = l; e l s e
{
c=a+b;//вычисляем следующее число while(c<Q)
{
s+=c;//вычисляем сумму
a=b;//меняем первое число на второе
Ь=с;//меняем второе число на текущее
с=а+Ь;//вычисляем текущее число Фибоначчи
cout<<"\nS=fl<<s<<"\n";//выводим результат
}
Тесты:
Q |
S |
-1 |
Error in Q |
0 |
Error in Q |
1 |
1 |
2 |
2 |
10 |
20 |