Кафедра информатики и вычислительной техники

Кафедра информатики и вычислительной техники

С. А. Лысенкова, И. А. Шайторова

ПРОГРАММИРОВАНИЕ

Учебно-методическое пособие

Сургут

Издательский центр СурГУ

УДК 519.85(072) + 004/42(072)

ББК 22.18я73 + 32/973я73

Л886

Печатается по решению

редакционно-издательского совета СурГУ

Рецензент:

к. физ.-мат. н., доцент кафедры

прикладная математика А. Г. Назин

Лысенкова С. А.

Программирование: учеб.-метод. пособие / С. А. Лысенкова, И. А. Шайторова; Сургут. гос. ун-т. – Сургут : ИЦ СурГУ, 2017. – 34 с.

В учебно-методическом пособии приведена краткая теория и лабораторные задания по темам программирование арифметических операций, функции ввода/вывода, условные операторы, операторы цикла, массивы, строки, функции, структуры, основы объектно-ориентированного программирования.

Предназначено для студентов Политехнического института изучающих дисциплину «Информатика».

УДК 519.85(072) + 004/42(072)

ББК 22.18я73 + 32/973я73

Л886

© Лысенкова С. А., Шайторова И. А., 2017

© БУ ВО «Сургутский государственный университет», 2017

ОГЛАВЛЕНИЕ

Лабораторная работа №1. 4

Лабораторная работа №2. 7

Лабораторная работа №3. 10

Лабораторная работа №4. 14

Лабораторная работа №5. 17

Лабораторная работа №6. 20

Лабораторная работа №7. 22

Лабораторная работа №8. 26

Лабораторная работа №9. 28

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

ЛАБОРАТОРНАЯ РАБОТА № 1

Программирование арифметических операций

Цель:Научиться создавать консольные проекты в среде С++ и программировать арифметические операции.

Представление данных в языке

Начинается написание консольного проекта с подключения директив препроцессора. Потоковые операторы ввода/вывода (ввод cin, вывод cout) подключаются по следующей директиве:

#include <iostream.h>.

Пример потокового ввода и вывода:

cin>>x; //значение х вводится с клавиатуры

cout<<”x=”<<x; //выводится на экран х=…

Вся остальная часть программы называется блоком описания главной функции, начинается так:

void main()

{…}.

Для того чтобы работать с тем или иным типом данных необходимо описать переменную соответствующего типа.

Типов переменных может быть несколько, например:

int x; //объявляется целочисленная переменная с именем x

short y; //объявляется целочисленная переменная с именем у

char z; //объявляется символьная переменная с именем z

float h; //объявляетcя вещественная переменная с именем h

double k, h1; /*объявляютcя вещественные переменные с именами k, h1*/.

В именах большие и малые регистры букв различаются, причем первым символом должна быть обязательно буква или символ подчеркивания.

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

Практическая работа

Написать программу вычислений в соответствии с заданным вариантом. Поработать с переменными разного типа. Проанализировать результат работы программы.

Исходные данные вводит пользователь с клавиатуры.

1. Определить расстояние между двумя точками на плоскости.

2. Заданы 4 числа. Вычислить среднее арифметическое и среднее геометрическое их модулей.

3. Найти радиус окружности, описанной вокруг треугольника со сторонами а, b, с.

4. Найти радиус круга, вписанного в треугольник со сторонами а, b, с.

5. Определить площадь треугольника по трем углам и высоте.

6. Определить площадь треугольника по заданной стороне и трем углам.

7. Вычислить сопротивление цепи:

Кафедра информатики и вычислительной техники - student2.ru

8. Вычислить сопротивление цепи:

Кафедра информатики и вычислительной техники - student2.ru

9. По двум сторонам и углу между ними в треугольнике АВС найти два остальных угла и третью сторону.

10. В магазине продается костюмная ткань. Ее цена a руб. за кв. метр. Подсчитать стоимость куска этой ткани длиной x м и шириной y м.

11. Найти площадь ромба по стороне и острому углу.

12. В арифметической прогрессии известны 1-й член и разность d. Найти 30-й член этой прогрессии и сумму первых 40 членов.

13. Найти координаты центра отрезка, заданного координатами его концов.

14. Найти сумму всех натуральных чисел от 1 до m, используя формулу суммы членов арифметической прогрессии.

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

1. Привести примеры правильных и неправильных имен переменных.

2. Что такое операция декремента и инкремента.

3. Чему будет равно значение переменной с в строке программы float с=9/2.

4. В программе объявлена переменная int x=10. Определить результат вычисления:

х++, х%2, х/3, х/3., ++х+5, 5+х++.

5. В программе объявлена переменная float x=2. Определить результат вычисления:

х+=2, х/=10, х*=(x+1), х+=+=+=1.

Лабораторная работа № 2

Листинг 1.

# include<stdio.h>

void main()

{ int x;

float y;

printf(«Введи х \t»);

scanf(“%d”,&x); //ввод целочисленной переменной x

printf(«Введи y \t»);

scanf(“%f”,&y); //ввод вещественной переменной y

printf(“x= %d, \n y=%f”, x, y);}

Особенность функции scanf() заключается в том, что перед именем переменной обязательно ставится знак &. В этой функции обязательно присутствуют форматная строка и список переменных.

Данная функция может работать с любым количеством переменных:

scanf(“%d %f”,&x, &y);

Разделителем в потоке ввода может быть любое количество пробелов, знак табуляции или конец строки. При нажатии клавиши enter вводимые значения присвоятся переменным.

Практическая работа

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

1. Кафедра информатики и вычислительной техники - student2.ru

2. Кафедра информатики и вычислительной техники - student2.ru

3. Кафедра информатики и вычислительной техники - student2.ru

4. Кафедра информатики и вычислительной техники - student2.ru

5. Кафедра информатики и вычислительной техники - student2.ru

6. Кафедра информатики и вычислительной техники - student2.ru

7. Кафедра информатики и вычислительной техники - student2.ru

8. Кафедра информатики и вычислительной техники - student2.ru

9. Кафедра информатики и вычислительной техники - student2.ru

10. Кафедра информатики и вычислительной техники - student2.ru

11. Кафедра информатики и вычислительной техники - student2.ru

12. Кафедра информатики и вычислительной техники - student2.ru

13. Кафедра информатики и вычислительной техники - student2.ru

14. Кафедра информатики и вычислительной техники - student2.ru

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

1. Приведите пример использования функции printf() для вывода значений двух целочисленных переменных.

2. Приведите пример использования функции scanf() для ввода значений двух вещественных переменных.

3. Приведите пример использования функции printf() для вывода значений двух вещественных переменных с точностью до сотых.

Лабораторная работа № 3

Листинг 2.

# include<stdio.h>

void main()

{ int x;

printf(«Введи х \t»);

scanf(“%d”,&x);

if (x<0)

printf(«число отрицательное»);

else

printf(«число неотрицательное»);}

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

После служебного слова else можно поставить еще условный оператор.

Если программе следует совершить выбор одного варианта из множества возможных, используют оператор switch. Формат оператора следующий:

switch (переменная или целочисленное выражение)

{case константа1:операторы;

case константа2:операторы;

default:операторы;

}

Оператор последовательно проверяет на равенство значения переменной (выражения) константам, если нет совпадений, то выполняются операторы после слова default (эта строка может отсутствовать).

Если необходимо, то можно использовать оператор break (оператор выхода), для перехода программы к следующему оператору после switch.

Листинг 3.

# include<stdio.h>

void main()

{ int x;

printf(«Введи число х \t»);

scanf(“%d”,&x);

switch(x)

{case 1: printf(«введено число 1»);break;

case 2: printf(«введено число 2»);break;

default: printf(«введено другое число»); }

char x;

printf(«Введи символ х \t»);

scanf(“%c”,&x);

switch(x)

{case ‘1’: printf(«введен символ 1»);break;

case ‘2’: printf(«введен символ 2»);break;

default: printf(«введен другой символ»); }}

В примере представлено два разных варианта использования оператора switch.

Практическая работа

Написать программу вычисления в соответствии с заданным вариантом. Представлено два задания на разные виды условных операторов. Как вводить исходные переменные определите самостоятельно. Проанализировать результат работы программ.

1. Три точки на плоскости заданы своими координатами. Выяснить какие из них находятся на максимальном расстоянии друг от друга.

Установить название дня недели по его номеру.

2. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Определить название месяца по его номеру.

3. Заданы три величины: а, b, c. Определить максимальное и минимальное значение из их среднего геометрического, среднего арифметического.

Определить название заданной цифры.

4. Определить в какой четверти координатной плоскости находится точка с координатами х, у.

Определить английское название заданной цифры.

5. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Определить название отметки, заданной числом.

6. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Установить английское название дня недели по его номеру.

7. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Определить английское название месяца по его номеру.

8. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Установить название цвета по его номеру, например,

0 – black, 1 – blue, 2 – green и т.д.

9. Вычислить значение функции, заданной графически, по заданному значению аргумента х

Кафедра информатики и вычислительной техники - student2.ru

Написать программу перевода введенного символа от a до f в верхний регистр.

10. Вычислить значение функции, заданной графически, по заданному значению аргумента х:

Кафедра информатики и вычислительной техники - student2.ru

Написать программу перевода введенного символа от A до F в нижний регистр.

11. Решить уравнение ах2+b=0 для любых значений коэффициентов.

Написать программу перевода введенного символа от A до F в нижний регистр, а все другие заменить буквой z.

12. Проверьте, делится ли выбранное число на 5, на 11 или 13.

Написать программу перевода введенного символа от a до f в верхний регистр, а все другие заменить буквой Z.

13. Определить попадет ли точка с координатами (х, у) в кольцо с внутренним радиусом R1 и внешним радиусом R2 с центром в начале координат.

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

14. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

Написать программу перевода введенного символа от A до F в соответствующий порядковый номер, а все другие заменить буквой z.

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

1. Используя условный оператор, выполните проверку на принадлежность значения переменной интервалу от 1 до 29.

2. Когда необходимо использовать оператор switch?

3. Используя условный оператор, выполните проверку на не принадлежность значения переменной интервалу от 1 до 29.

Лабораторная работа № 4

Операторы циклов

Цель: Изучить особенности работы операторов цикла while, for и do while.

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

Формат оператора цикла:

while (условие)

{тело цикла}

Пример цикла, где находится сумма элементов ряда:

int i=0; N=20; S=0;

while (i<N) //если условие истинно выполняется тело цикла

{S+=i; //суммирование переменной i

i++;} //увеличение значения переменной i на 1

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

int x;

while (scanf(“%d”,&x)==1)

{printf(«ввели значение %d\n»,x);}

Цикл while можно принудительно завершить даже при истинном условии, с помощью оператора break. Если выполнение очередного шага цикла необходимо завершить до конца цикла, используется оператор continue.

Формат оператора цикла for:

for(начальные значения; условие; шаг)

{ тело цикла}

Пример использования цикла, где для введенного символа определяется значение его кода ASCII:

char s;

for(s=’a’;s<=’z’;s++)

printf (“%c=%d\n”. s, s);

Пример цикла для вычисления факториала числа N:

for (f=1, i=1; i<=N; i++)

f*=i;

Вывод на экран всех четных чисел в диапазоне от 0 до 100:

for (i=0; i<=100; i++)

{if (i%2) continue;

cout<<”\t”<<i;}

Представленные выше операторы проверяют условия до выполнения цикла, поэтому возможно, что операторы цикла никогда не будут выполнены.

Следующая конструкция позволяет выполнять проверку условия после выполнения операторов цикла.

Пример цикла do…while, который работает до тех пор, пока пользователь не введет 0:

int x;

do

{ printf (“”);

scanf(“%d”,&x);}

while (x!=0); }

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

Пример вычисления суммы двойного ряда:

long S=0; //целочисленный тип данных с расширенным //диапазоном значений

int i=0, j=0;

for (; i<=10; i++)

{ for (; j<=5; j++)

S+=i*j;

}

Получение на экране таблицы умножения:

int x, y;

for (x=2; x<=9; x++)

for (y=2; y<=9; y++)

cout<<”\n”<<x<<”*”<<y<<”=”<<x*y;

Практическая работа

Написать программу вычисления в соответствии с заданным вариантом. Как вводить исходные переменные и их тип определите самостоятельно. Для нахождения остатка от деления используйте операцию % (например, значение 5%2 равно 1). Используйте разные конструкции циклов. Проанализировать результат работы программы.

1. Найти все трехзначные числа, равные сумме кубов своих цифр.

2. Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2, 3, 4, 5, 6, 7, 8, 9.

3. Найти все трехзначные числа, сумма цифр которых равна данному целому числу.

4. Найти все трехзначные числа, квадраты которых оканчиваются тремя одинаковыми цифрами, отличными от нуля.

5. В магазине имеется мастика в ящиках по 16 кг, 17 кг и 21 кг. Получить 185 кг мастики без вскрытия ящиков. Рассмотреть все варианты.

6. Представить в записи 42*4* вместо звездочек такие цифры, чтобы полученное пятизначное число делилось на 72.

7. Найти все трехзначные числа кратные 7 и сумма цифр которых тоже кратна 7.

8. Найти четырехзначное число, которое при делении на 133 дает в остатке 125, а при делении на 134 дает в остатке 111.

9. Решить арифметический ребус КИО*ИО= ТОКИО. Вместо каждой буквы необходимо поставить некоторую цифру, причем одинаковые буквы означают одинаковые цифры, а различные буквы – различные цифры.

10. Сократить дробь, имеющую данные числитель а и знаменатель b. Предусмотреть выделение целой части в случае a > b.

11. Определить сколько делителей и какие имеет данное натуральное число.

12. Найти сумму делителей данного натурального числа.

13. Найти все «пифагоровы» тройки натуральных чисел, наибольшее из которых не превосходит N (Тройка натуральных чисел называется пифагоровой, если сумма квадратов двух из них равна квадрату третьего).

14. Найти все четырехзначные числа, у которых сумма первых двух цифр равна сумме двух последних.

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

1. В чем отличия между операторами while и do… while?

2. Условие остановки циклов.

3. Для каких целей используются циклы?

Лабораторная работа № 5

Массивы

Цель: Изучить особенности работы с одномерными и двумерными массивами.

Массив – структура однотипных элементов, занимающих непрерывную область памяти. Одномерные массивы ассоциируют с вектором, двумерные с матрицей.

Свойства массива: имя, тип, размерность, размер.

Пример:

int A[5]; //одномерный массив А из 5 целочисленных элементов

float X[3][4]; // двумерный массив Х из 3х4 элементов.

Листинг 4.

#include<stdio.h>

void main()

{ double k=0.5, b=4, f[10];

for (int x=0; x<10; x++ )

{ f[x]=k*x+b;

printf(“%.0f \t %.2f\n”, x, f[x]);}}

При объявлении массива используют квадратные скобки. Обращение к элементу массива происходит по номеру его индекса. Размер массива можно задавать только константами. Первый элемент массива всегда имеет нулевой индекс. Нельзя определять произвольные диапазоны для индексов.

В двумерном массиве на первой позиции количество строк, на второй – столбцов. Нумерация элементов строк и столбцов начинается с нуля.

Листинг 5.

#include<iostream.h>

#include<iomanip.h>//для работы функции setw(n)

#include<stdlib.h>/*для работы с функциями генерации случайных чисел*/

void main()

{int i, j, max, A[5][5];

randomize() //установка датчика случайных чисел

for (i=0; i<5; i++)

{ for(j=0; j<5; j++)

{A[i][j]=random(21)-10;//задается число в диапазоне [-10,10]

cout<<setw(6)<<A[i][j];//на число выделяется 6 позиций при выводе}

cout<<endl; //переход на новую строку

}

max=A[0][0];

for (i=0; i<5; i++)

for (j=0; j<5; j++)

if (A[i][j]>max) max=A[i][j];

cout<<”max=”<<max;}

Практическая работа

Написать программы в соответствии с заданным вариантом. Как вводить исходные переменные и их тип определите самостоятельно. Массивы рекомендуется заполнять случайными числами с диапазоне [-25,25]. Проанализировать результат работы программ.

1. Даны два вектора целых чисел А и В. Вычислить вектор С, который содержит нечетные элементы вектора А, которых нет в векторе В.

Вычислить и запомнить количество отрицательных элементов каждого столбца для матрицы A[5][5].

2. Расположить элементы вектора в обратном порядке. Дополнительный массив не использовать.

Задана матрица S[6][5]. Задать исходные данные S[5][4]. Вычислить среднее арифметическое значение строк и столбцов элементов и записать в 5 столбец и 6 строку.

3. Найти среднее арифметическое элементов массива х[n], исключив из них максимальное и минимальное значение.

Задана матрица V[6][5]. Упорядочить по возрастанию элементы каждой строки матрицы.

4. Вектор B[n] заменить вектором, у которого элементы образуются делением вектора В на их сумму.

Задан массив D[10][10]. Найти максимальный и минимальный элементы массива D и поменять их местами.

5. Заменить все элементы вектора x[m], стоящие до максимального, нулями.

Задана матрица А[7][8]. Вычислить и запомнить сумму и число положительных элементов каждого столбца матрицы. Результаты получить в виде двумерного массива.

6. В массиве R[k] найти минимальный элемент среди положительных и максимальный среди отрицательных.

Задана матрица B[5][5]. Вычислить сумму элементов матрицы, находящихся под главной диагональю и на ней

7. В массиве У[n] заменить все его элементы, стоящие после минимального, нулями.

Задана матрица B[5][5]. Вычислить сумму элементов матрицы, находящихся над главной диагональю.

8. Даны массив A[n] целого типа и целое число х. Найти количество элементов в массиве больших этого числа.

Вычислить сумму и запомнить количество отрицательных элементов каждого столбца матрицы.

9. Даны два вектора А и В. Сформировать вектор С, который содержит элементы, присутствующие в обоих массивах.

Задана матрица R[5][5]. Найти наибольший и наименьший элементы матрицы и поменять их местами.

10. В векторе У[m] поменять местами максимальный и минимальный элементы.

Задана квадратная матрица A[7][7]. Найти сумму диагональных элементов матрицы

11. В векторе У[m] поменять местами максимальный с первым и минимальный с последним элементы.

Задана матрица P[7][7]. Найти в каждой строке наибольший элемент и поменять его местами с элементами главной диагонали.

12. В векторе У[m] есть нулевые элементы. Создать массив из номеров этих элементов.

Вычислить сумму и число положительных элементов матрицы P[7][7], находящихся над главной диагональю.

13. Дан массив R[k]. Вывести на экран только те элементы, для которых R[i]>i.

Задана матрица P[7][7]. В каждой строке выбирается элемент с наименьшим значением, затем среди этих чисел выбирается наибольшее. Указать индексы элемента с найденным значением.

14. Дан массив R[k]. Определить сколько раз в нем меняется знак чисел.

Задана матрица Х[7][7]. Получить транспонированную матрицу (строки поменять местами со столбцами).

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

1. В чем преимущество массивов перед переменными?

2. Как записать элемент массива?

3. Как вывести элементы массива на экран?

Лабораторная работа № 6

Строки

Цель: Изучить особенности работы со строками.

Отдельного типа данных для описания строк нет. Для ее задания используется символьный массив. На длину символьного массива нет ограничений.

Пример описания строки:

char s[100];

char st[]=”stroka”;

Существует специальный символ ‘\0’ означающий конец строки. Обработка строк обычно связана с перебором ее элементов.

Функция, определяющая длину введенной строки в библиотеке string.h это strlen(s). Учитывая, что первый символ имеет нулевой индекс, данная функция, возвращая длину строки, считает и символ ‘\0’.

Чтобы присвоить значение одной строковой переменной s2 другой s1 используется функция strcpy(s1, s2) в библиотеке string.h.

Две строки считаются одинаковыми, если равны их длины и элементы одной строки соответственно равны элементам другой строки. Чтобы сравнить две строки также есть функция strcmp(s1, s2) в библиотеке string.h, она возвращает нуль, если строки равны и не нуль иначе.

В библиотеке stdio.h существуют функции для ввода строки с клавиатуры gets(s), и вывода строки на экран puts(s).

Еще удобная функция для работы sprintf (s, «строка») библиотеки stdio.h. Строка заносится в переменную s, а не на экран.

Листинг 6.

//переворот введенной строки

#include<stdio.h>

#include <string.h>

void main()

{char c, s[10];

int i;

gets(s); //ввод строки

for (i=0; i<=(strlen(s)-1)/2; i++) //просмотр ее до середины

{ c=s[i]; //замена элементов местами

s[i]=s[strlen(s)-i-1];

s[strlen(s)-i-1]=c;}

puts(s);}//вывод перевернутой строки

Практическая работа

Написать программу в соответствии с заданным вариантом. Считать, что строка вводится пользователем, а слова разделяются пробелом или группой пробелов. Проанализировать результат работы программы.

1. Проверить, является ли строка палиндромом (т. е. читается ли она одинаково справа налево и слева направо). Пробелы игнорируются.

2. Написать программу добавления слова “hello” после первого слова введенной строки.

3. Проверить, имеется ли в заданном тексте баланс открывающихся и закрывающихся скобок.

4. В заданном предложении указать слово, в котором доля букв ‘j’ максимальна.

5. В заданном предложении найти самое короткое и самое длинное слово.

6. Для каждого символа заданного текста указать, сколько раз он встречается в тексте. Сообщение об одном символе должно печататься не более одного раза.

7. В заданном тексте удалить символ ‘,’ и подсчитать число удаленных символов.

8. Написать программу добавления пробела после каждой буквы ‘a’ введенной строки.

9. В заданном тексте заменить каждый символ ‘а’, стоящий на четном месте, на символ ‘о’.

10. Подсчитать количество слов в предложении.

11. Написать программу объединения трех строк без использования функции sprintf().

12. Подсчитать количество цифр во введенной строке.

13. Подсчитать в строке количество слов, состоящих из трех букв.

14. В строке найти слова, начинающиеся и заканчивающиеся одной и той же буквой.

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

1. Какой символ соответствует концу строки?

2. Что возвращает функция strlen()?

3. Что выполняет функция strcmp()?

Лабораторная работа № 7

Функции

Цель: Изучить особенности работы с функциями и научиться задавать свои функции.

В рассмотренных ранее примерах приходилось использовать различные функции из библиотек. Иногда при написании программ необходимо создавать свои функции.

Пример задания функции:

int f(int x, int y)

{return x*2+y*7;} //задана функция f вычисляющая x*2+y*7

Следует обратить внимание на то, что работа функции завершается при вызове оператора return. Он является обязательным, если функция возвращает какое-либо значение. Если тип у функции void, то return можно не писать.

Функция может принимать любое число аргументов, но возвращать только один или не одного (тип void). Обратите внимание, что перед каждой переменной в списке аргументов обязательно пишется тип.

Формат обращения к функции имя (список_фактических_ параметров).

Листинг 7.

#include <iostream.h>

int max (int x, int y)

{ if (x>y) return x;

else return y;

}

void main()

{ int a, b, c, d;

cin>>a>>b>>c>>d;

d=max(max(a, b), c);

cout<<”max(a, b, c)=”<<d;

}

Если количество пользовательских функций большое, можно сначала их объявлять, а потом реализовывать. Также можно использовать функции с одинаковыми именами, но разными типами входных аргументов.

Листинг 8.

//вычисляется модуль числа различного типа

#include <stdio.h>

float abs (float x);

int abs (int y);

void main()

{printf(“|x|=%f\t|y| =%d”, abs(2.1), abs(-5));}

float abs (float x)

{if (x<0) return –x;

else return x;}

int abs (int y)

{return (y<0)? -y: y;}

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

Тело функции не может содержать в себе определения других функций.

Можно задавать значения у аргументов функции при инициализации, но при последующем их вводе переменные поменяют свои значения. Следует помнить, что аргументы со значениями по умолчанию должны находиться в списке аргументов последними.

Допускается чтобы функция вызывала саму себя (этот процесс называется рекурсией).

Вычисление факториала целого положительного числа:

long factor(int n)

{ if (n<0) return 0;

if (n==0) return 1;

return n*factor(n-1);

}

При обращении к функции передача значений возможна как через параметры, так и через глобальные переменные.

Листинг 9.

#include <iostream.h>

int z;

void max (int x, int y)

{ if (x>y) z=x;

else z=y;

}

void main()

{ int a, b, c;

cin>>a>>b>>c;

max(a, b);

max(z, c);

cout<<”max(a, b, c)=”<<z;

}

Практическая работа

Написать программу в соответствии с заданным вариантом. Тип функции, количество и тип ее аргументов определить самостоятельно. Проанализировать результат работы программы.

1. Вычислить число сочетаний из n по m (n>m).

2. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

3. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

4. Найти все трехзначные числа, равные сумме факториалов своих цифр.

5. Два треугольника заданы координатами своих вершин. Вычислить площади треугольников с помощью формулы Герона и определить, какой треугольник имеет большую площадь.

6. Решить уравнение ax+b=0. Значения k, l, m вводятся.

Кафедра информатики и вычислительной техники - student2.ru

7. Даны действительные числа s, t. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru Кафедра информатики и вычислительной техники - student2.ru

8. Найти наибольший общий делитель целых положительных чисел a, b, c.

9. Даны действительные числа х, у. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru Кафедра информатики и вычислительной техники - student2.ru

10. Решить уравнение ax+b=0. Значения k, l, m вводятся.

Кафедра информатики и вычислительной техники - student2.ru

11. Вычислить число сочетаний с повторениями.

12. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

13. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

14. Вычислить:

Кафедра информатики и вычислительной техники - student2.ru

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

1. Напишите функцию возведения числа в квадрат.

2. Приведите пример функции с тремя аргументами.

3. Дано число. Написать функцию нахождения суммы его цифр.

Лабораторная работа № 8

Структуры

Цель: Изучить особенности, синтаксис и правила работы со структурами.

Структура – это форма представления данных, содержащая разные типы данных или другие структуры. Тип структура используется при разработке баз данных, информационных систем.

Пример структуры книги, содержащей три поля:

struct book

{char title[15];

сhar autor[15];

int god;

};

В конце обязательно ставится точка с запятой – это оператор.

Описание структуры задает тип данных, а не элемент. Для задания элемента используют запись

struct book x;// х переменная структурного типа

Обращение к полю структуры происходит с помощью уточненного имени (через точку): x.title, x.autor, x.god.

Допускается использование массивов структур.

Листинг10.

#include <stdio.h>

struct book

{char title[15];

char autor[15];

int god;

};

void main()

{book x[5]; // массив из 5 записей, каждая содержит 3 поля

for (int i=0; i<5; i++)

{scanf(“%s”, &x[i].title);

gets(x[i].autor);

scanf(“%d”,&x[i].god);}

}

Структуры и массивы структур можно передавать функции в качестве аргумента.

Практическая работа

Написать программу в соответствии с заданным вариантом. Количество полей структуры, их тип и название определить самостоятельно. Заполнять структуру лучше вводом с клавиатуры. Проанализировать результат работы программы.

1. Написать программу поиска книги по году издания в массиве структур.

2. Написать программу удаления книги из массива структур с введенным именем автора.

3. Написать программу поиска студентов, фамилии которых начинаются на введенную букву.

4. Написать программу сортировки книг в массиве структур по убыванию года издания.

5. Написать программу добавления новой книги в начало массива структур.

6. Написать программу поиска сотрудника с указанным именем в массиве структур.

7. Написать программу сортировки студентов по количеству пропусков.

8. Написать программу удаления информации о сотруднике с указанным табельным номером.

9. Написать программу сортировки книг по возрастанию их цен.

10. Написать программу удаления учреждения по введенному названию из массива структур.

11. Написать программу поиска сотрудников, зарплата которых ниже средней по предприятию.

12. Написать программу назначения стипендии студентам, зная результаты сессии.

13. Написать программу поиска сотрудников с одинаковыми именами и отчествами.

14. Написать программу поиска товара в магазине с указанным ценовым интервалом.

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

1. Как задаются переменные структуры?

2. Можно передать функции массив структур и как?

Лабораторная работа № 9

Листинг11.

/*объявляются класс четырехугольников и классы наследники параллелограммов и ромбов*/

#include<iostream.h>

#include <math.h>

class fourangle //базовый класс

{protected: //переменные класса

double x1, y1. x2, y2, x3, y3, x4, y4,

a, b, c, d, d1, d2,

p, s;

public: //методы класса

void vvod(void);

void storony(void);

void diagonali(void);

void perimetr(void);

void ploshad(void);

void vyvod(void);

};

class parall:public fourangle //класс параллелограммов – наследник

{public:

void storony(void);

void perimetr(void);

void ploshad(void);

};

class romb:public parall //класс ромбов – наследник

{public:

void storony(void);

void perimetr(void);

};

void fourangle::vvod(void) /*описание функции ввода для класса четырехугольников*/

{cin>>x1>>y1>>x2>>y2>>x3>>y3>>x4>>y4;}

void fourangle::storony (void)

{a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

b=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));

c=sqrt((x4-x3)*(x4-x3)+(y4-y3)*(y4-y3));

d=sqrt((x4-x1)*(x4-x1)+(y4-y1)*(y4-y1));}

void fourangle::diagonali (void)

{d1=sqrt((x3-x1)*(x3-x1)+(y3-y1)*(y3-y1));

d2=sqrt((x2-x4)*(x2-x4)+(y2-y4)*(y2-y4));}

void fourangle::perimetr (void)

{ p=a+b+c+d;}

void fourangle::ploshad (void)

{double per1,per2;

per1=(a+d+d2)/2;

per2=(b+c+d2)/2;

s=sqrt(per1*(per1-a)*(per1-d)*(per1-d2))+

+sqrt(per2*(per2-b)*(per2-c)*(per2-d2));}

void fourangle::vyvod (void)

{cout<<”a=”<<a<<”\tb=”<<b<<”\tc=”<<c<<”\td=”<<d;

cout<<”\np=”<<p<<”\ts=”<<s;

cout<<”\nd1=”<<d1<<”\td2=”<<d2;}

void parall::storony (void)

{a=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));

b=sqrt((x2-x3)*(x2-x3)+(y2-y3)*(y2-y3));

c=a;

d=b;}

void parall::perimetr (void)

{ p=2*(a+b);}

void parall::ploshad (void)

{double per;

per=(a+d+d2)/2;

s=2*sqrt(per1*(per1-a)*(per1-d)*(per1-d2));}

void romb::storony (void)

{a=b=c=d=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1));}

void romb::perimetr (void)

{ p=4*a;}

//основная функция, по координатам вершин вычисляет все //параметры ромба

void main()

{romb obj;

obj.vvod();

obj.storony();

obj.diagonali();

obj.perimetr();

obj.ploshad();

obj.vyvod();

}

Практическая работа

Построить си

Наши рекомендации