Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке С++. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
07.09.2026
Размер:
1 Мб
Скачать
☆
После компиляции программа выдаст результат, аналогичный результату
работы предыдущей программы.
Теперь давайте рассмотрим по порядку исходный код нашей программы.
Сначала мы инициализируем счетчик цикла и переменную, хранящую сумму чисел.
В данном случае мы обязательно должны присвоить счетчику цикла какое-
либо значение, т.к. в предыдущей программе мы это значение присваивали внутри
цикла for, здесь же, если мы не инициализируем счетчик цикла, то в него попадет «мусор» и компилятор выдаст ошибку.
Затем мы описываем условие цикла — »пока переменная i меньше 10 — выполняй цикл». При каждой итерации цикла значение переменной­счетчика i увеличивается на единицу внутри цикла.
Когда выполнится 10 итераций цикла, счетчик станет равным 9 и следующая итерация уже не выполнится, поскольку 10 не меньше 10. Выраже-
ние sum += i является укороченной записью sum = sum + i.
После окончания выполнения цикла, выводим сообщение с ответом.
Цикл do while
Семантика:
1. Выполняются операторы тела цикла.
2. Вычисляется значение условия.
3. Если условие ложно, то повторяется шаг 1.
4. Если условие ложно, то цикл завершается и происходит переход к следу-
ющему за do оператору.
Цикл do while очень похож на цикл while. Единственное их различие в том, что при выполнении цикла do while один проход цикла будет выполнен независи-
мо от условия. Решение задачи на поиск суммы чисел от 1 до 10, с применением
цикла do while.
#include <iostream> using namespace std;
int main () {
int i = 0; // инициализируем счетчик цикла. int sum = 0; // инициализируем счетчик суммы. do {// выполняем цикл. i++; sum += i; } while (i < 10); // пока выполняется условие. cout << «Сумма чисел от 1 до 10 = « << sum << endl; return 0; }
Принципиального отличия нет, но если присвоить переменной i значение, большее, чем 10, то цикл все равно выполнит хотя бы один проход.
31
32
Замечание:
Операторы можно подразделить на: исполняемые — с их помощью реализу­ется алгоритм задачи, иописательные, необходимые для определения типов пользователя.
Исполняемые операторы можно разбить на: простые и структурированные.
Операторы перехода
К простым операторам относятся: операторы перехода:
(goto, continue, break, return).
Оператор прерывания цикла
В языке Си есть специальный оператор для прерывания цикла. Это оператор
«break;». Выполнение его в программе немедленно прерывает цикл, в котором он
находится и управление передается на следующий за циклом оператор. Используя
оператор break, цикл предыдущей программы можно переписать в виде:
x = xn; minus = 0; while( x < xn ) { if( sin(x) < 0 ) { minus = 1; break; } x += h; }
Оператор продолжения цикла
Оператор «continue;» вызывает переход к следующей итерации цикла, т.е. к
очередной проверке условия. Естественно, все операторы тела цикла, находящиеся
между continue и концом тела цикла пропускаются:
while( ... ) { ... if(...) continue; ... /* операторы пропускаются */ }
Операторы break и continue позволяют избавиться от необходимости при­менения оператора goto, поэтому последний не рассматривается.
Замечание:
Внешний, так и внутренний циклы могут быть прерваны командой break.
Переменная flag часто используется в программировании.
Flag-переменная, хранящая в себе информацию о том, произошло или нет конкретное событие.
5.4. ВЛОЖЕННЫЕ ЦИКЛЫ
Цикл называется вложенным, если он размещается внутри другого цикла. На первом проходе, внешний цикл вызывает внутренний, который исполняется до своего завершения, после чего управление передается в тело внешнего цикла. На втором проходе внешний цикл опять вызывает внутренний. И так до тех пор, пока
не завершится внешний цикл.
Задача 1. На диапазоне от p до q вывести все простые числа.
#include<iostream.h> #include<conio.h>
int main() { unsigned int p,q,flag,j; cin >> p; cin >> q; for(int i=p;i<=q;i++) { flag=1; for(j=2;j<=i/2;j++)
{ if(i%j==0) flag=0; break; }
if (flag&&i>1) cout << i << « «; } getch(); return 0; }
Задача 2. На диапазоне от m до n вывести количество чисел, состоящих из
различных цифр.
#include<iostream.h> #include<conio.h> int main() { int m,n,chislo,c,chislo1,flag,br=0; cin>>m; cin>>n; for(int i=m;i<=n;i++)
{
flag=1;
chislo=i;
while(chislo)
{
c=chislo%10;
chislo1=chislo/10;
while(chislo1)
{
if(chislo1%10==c)
{
flag=0;
break;
}
chislo1/=10;
33
}
if(flag==0) break;
chislo/=10;
}
if(flag) br++;
}
cout << br << endl;
getch();
return 0; }
Задача 3. Составить программу для вывода числового треугольника.
9 8 7 6 5 4 3 2 1 8 7 6 5 4 3 2 1 7 6 5 4 3 2 1 6 5 4 3 2 1 5 4 3 2 1 4 3 2 1 3 2 1 2 1
1
Задача 4. Найти все четырехзначные числа, в которых ровно две одинако-
вые цифры.
Решение:
#include<iostream.h> #include<conio.h> int main() { for(int a=1;a<=9;a++) for(int b=0;b<=9;b++) for(int c=0;c<=9;c++) for(int d=0;d<=9;d++)
if(a==b||b==c||c==a||d==a||d==b||d==c) cout << a << b << c << d<<« «;
getch(); return 0;
}
5.5. ОСНОВНЫЕ АЛГОРИТМЫ ДЛЯ РАБОТЫ С ЦИКЛАМИ
a) нахождение суммы и произведения; b) поиск значений; c) поиск максимального(минимального) элемента;
d) подсчет элементов последовательности, удовлетворяющих заданному
условию.
34
35
Задача 1. Составить программу, которая вводит с клавиатуры натуральное
число n и выводит все числа , меньшее n и кратные 5.
#include<iostream.h> #include<conio.h> int main() { int x,n; cout << «Введите число n=«; cin >> n; for(int i=1;i<n;i++) if (i%5==0) cout << i << endl; getch(); return 0; }
Задача 2. Составить программу, которая вводит с клавиатуры пятизначное
число k и выводит это число в обратном порядке.
#include<iostream.h> #include<conio.h> int main() { int x,n; cout << «Введите число n=«; cin >> n; for(int i=1;i<=5;i++) { x=n%10; cout << x; n=n/10; } getch(); return 0; }
Задача 3. Найти факториал числа (n!).
#include<iostream.h> #include<conio.h> int main() { int n,p; cout << «введите число n=«; cin >> n; p=1; for(int i=1;i<=n;i++) p=p*i; cout << «факториал числа=« << p << endl; getch(); return 0; }
36
Задача 4. Написать программу, которая вводит с клавиатуры целое число n
и n целых чисел. Найти максимальное и минимальное числа.
#include<iostream.h> #include<conio.h>
int main() { int n; cout << «Введите n=«; cin >> n; double max,min,chislo; cin >> chislo; min=chislo; max=chislo; for(int i=1;i<=n-1;i++) { cin >> chislo; if(chislo>max) max=chislo; if(chislo<min) min=chislo; } cout << «минимальное число» << min << endl; cout << «максимальное число» << max << endl; getch(); return 0; }
Задача 5. Напишите программу, запрашивающую у пользователя целое чис-
ло n и выводящую на экран двоичный код числа.
#include<iostream.h> #include<conio.h>
int main() { int n; cout << «введите число»; cin >> n; long bin=0,pow10=1; while(n) { bin+=n%2*pow10; pow10*=10; n/=2; } cout<<« binary kod:»<< bin << endl;
getch(); return 0; }
Задача 6. Найти все трехзначные числа, сумма цифр которых простое число.
#include<iostream.h> #include<conio.h> { int main() int sum;
for(int i=100;i < 1000;i++) { sum=i/100; sum=sum+(i/10%10); sum=sum+(i%10); switch(sum) { case 2:
case 3:
case 5:
case 7:
case 11:
case 13:
case 17:
case 19: case 23:cout << i << ' '; break;
}
} getch(); return 0; }
Задача 7. Написать программу, которая выводит координаты ( n+1) вершин
прямоугольной спирали, данной на Фиг.1.
#include<iostream.h>
#include<conio.h> { int main() { int x,y,l,n; x=0; y=0; cin>>n; cout << x << « « << y << endl; l=1; for(int i=0;i < =n;i++) { switch(i%4) { case 0:y-=l; break; case 1:x+=l; break; case 2:y+=l; break; case 3:x-=l; break; } cout << x << « « << y << endl; l=l+l; } getch(); return 0; }
}
37
38
6. ФУНКЦИИ
6.1. ОПРЕДЕЛЕНИЕ ФУНКЦИИ
Понятие функции в С++ аналогично понятиям подпрограммы или процеду-
ры, которые имеются в большинстве языков программирования высокого уровня.
Их использование связано с принципами модульного программирования, в основе
которого лежит разделение программы на автономные фрагменты, или модули.
Такое разделение становится необходимым в случае, когда объем програм-
мы выходит за рамки нескольких строчек кода. Функция в С++ — это автономный модуль, решающий некоторую задачу и служащий определенной цели.
Примером являются все рассмотренные ранее функции стандартных биб-
лиотек stdio.h, conio.h, math.h. Однако пользователь может не только использовать
готовые функции,но и создавать собственные.
Более того, несколько функций пользователя могут быть впоследствии объ-
единены в библиотеку. Написанная и протестированная один раз, функция может
быть использована многократно, в том числе и в других программах.
Перед использованием функцию необходимо определить, задав ее имя, ко-
личество и тип ее аргументов, а также тип возвращаемого ей результата. Общая
форма записи:
тип_функции_имя_функции (список_аргументов) { <объявление локальных переменных> <операторы>; return<возвращаемое_значение>; }
Тип функции определяет тип значения, которое возвращает функция. Если
тип не указан, то предполагается, что функция возвращает целое значение (int).
При объявлении функции для каждого ее параметра можно указать только
его тип (например: тип функция (int, float, ...), а можно дать и его имя (например:
тип функция (int а, float b, ...) ).
Аргументы в списке описаний называют формальными параметрами.
При обращении указывается имя функции и в круглых скобках спи-
сок фактических параметров.
Передача значения из вызванной функции в вызвавшую происходит с по-
мощью оператора возврата return, который записывается следующим образом:
return<возвращаемое_значение>;
Функция может и не возвращать никакого значения. В этом случае ее
определение таково:
void_ имя(список_аргументов)
{<операторы>;
}
Вызов такой функции имеет вид: имя ( список фактических аргументов );
Пример 1. Напишите пользовательскую функцию, вычисляющую площадь
треугольника по трем сторонам(по формуле Герона).
Решение. Входные параметры для функции -3 вещественных числа, где
a,b,c-значение сторон; результат — также вещественное число.
Если полупериметр треугольника обозначить р, то площадь треугольника по
формуле Герона можно вычислить по формуле: s=sqrt(p*(p-a)*(p-b)*(p-c))
Функция может быть определена следующим образом:
double Area(double a,double b,double c) { double p=(a+b+c)/2.0; double s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; }
Выводы:
1. Функция оформляется так: заголовок и тело функции в фигурных скобках.
2. Перед именем функции ставится тип функции(int, float, char, double) —
это означает, что она возвращает значение указанного типа.
3. После имени в скобках через запятую перечисляются параметры функции —
те величины, от которых зависит ее работа.
4. Для каждого параметра отдельно указывается его тип(int, float,
char,double).
5. Имена параметров можно выбирать любые, допустимые в С++.
6. Параметры, перечисленные в заголовке функции, называют-
ся формальными — это значит, что они допустимы только внутри функции при ее вызове.
7. При вызове функции надо указать ее имя и в скобках фактические пара-
метры, которые подставляются в функции вместо формальных параметров.
8. Первый фактический параметр подставляется в функции вместо первого
формального параметра, т.д.
9. Для того чтобы, определить значение функции, используется оператор return, после которого через пробел записывается возвращаемое — число или арифметическое выражение.
39
40
Готовая программа:
#include<iostream> #include<cmath> using namespace std; double Area (double a, double b, double c) { double p=(a+b+c)/2.0; double s=sqrt(p*(p-a)*(p-b)*(p-c)); return s; } int main() { double a,b,c,s; cout << «The area is» << Area(3.0,4.0,5.0) <<endl; // Ввод данных с клавиатуры cin >> a >> b >> c; // 10.0, 22.0, 30.0 s=Area(a,b,c); // The area is 76.5441 cout << «The area is» << s << endl; return 0; }
6.2. СТАНДАРТНЫЕ МАТЕМАТИЧЕСКИЕ ФУНКЦИИ
Для подключения математических функций используется директива #in-
clude <cmath.h>. Аргументы x, y и результат имеют тип double, параметр n имеет тип int. Аргументы тригонометрических функций задаются в радианах.
Таблица 1
Математическая функция
Имя функции в языке
Математическая функция
Имя функции в языке
sqrt(x)
arcsin(x)
asin(x) |x|
fabs(x)
arccos(x)
acos(x)
e
x
exp(x)
arctg(x)
atan(x)
x
y
pow(x,y)
arctg(x/y)
atan2(x,y)
ln(x)
log(x)
sh(x)=1/2 (ex-e-x)
sinh(x)
lg10(x)
log10(x)
ch(x)=1/2 (ex+e-x)
cosh(x)
sin(x)
sin(x)
Наибольшее целое <=x(x)
floor(x)
cos(x)
cos(x)
Остаток от деления x на y
fmod(x,y)
tg(x)
tan(x)
Наименьшее целое >=x
ceil(x)
Пример использования стандартных функций:
#include <cmath> #include<cstdlib> #include<iostream> #include<conio.h> using namespace std; int main() /*1.cpp Использование функций*/ int main() { int m=5,n=-7; long k=5, l=-7;
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]