Задание на лабораторную работу.
1. Написать подпрограмму в соответствии со своим вариантом индивидуального задания. Реализовать вызов функции из главной программы и вывод результатов вычисления на экран. Отладить и протестировать программу. В процессе отладки пользоваться средствами пошаговой трассировки кода и окнами просмотра текущих значений переменных (Watch и Locals). 2. Написать прототип функции. Передачу параметров в функцию реализовать тремя изученными методами: по значению, по ссылке и по указателю. Вывести в окно Watch адреса указателей, ссылок и значений переменных, используемых для обращения к параметрам функции. 3. Продемонстрировать в работе использование оператора return, использование прототипа фукции и перегрузку функций. 4. В отчете отразить процесс трассировки кода, результаты работы программы, листинг программного кода с комментариями, блок-схему программы. Варианты индивидуальных заданий 1. Определите функцию double f(double x, double y), которая вычисляет и возвращает длину гипотенузы прямоугольного треугольника, две другие стороны x и y которого известны. 2. Напишите функцию double f(double x1, double y1, double x2, double y2), которая вычисляет расстояние между двумя точками (xl, yl) и (x2, y2). 3. Напишите функцию f(double& a, double& b, double c, double q), которая возвращает катеты прямоугольного треугольника, гипотенуза которого равна с, а острый угол q (градусов). 4. Напишите функцию f(double* a, double* b, double c, double q), которая возвращает катеты прямоугольного треугольника, гипотенуза которого равна с, а острый угол q (градусов). 5. Напишите функцию swap(int* a, int* b, int* c), которая изменяет значения параметров по правилу a®b®c®a. 6. Напишите функцию swap(int& a, int& b, int& c), которая изменяет значения параметров по правилу a®b®c®a.
7. Напишите функцию int f(int& a, int& b, int x, int y), которая присваивает объекту a значение, равное x*y, а объекту b значение x/y. Если значение y было равно нулю, функция должна возвратить 0, иначе 1. 8. Напишите функцию int f(int x, int y), которая возвращает 0, если значения x и y оба равны нулю, 12/x, если y равен 0, 12/y, если x равен 0, иначе 144/(x*y). 9. Напишите функцию int f(int x, int y), которая возвращает x-y, если x больше y, иначе возвращает y-x. 10. Напишите функцию double f(double x, double y), которая возвращает x/y, если x больше y, иначе возвращает y/x. Предполагается, что значения параметров больше нуля. 11. Напишите функцию double f(double x, double y, double z), которая возвращает m*n/k, где k есть меньшее из чисел x, y, z, а m и n есть среднее и большее из этих чисел. Предполагается, что значения параметров больше нуля. 12. Напишите функцию double f(double x, double y, double z), которая возвращает наибольшее из значений модулей попарных разностей: |x-y|, |y-z|, |z-x|. 13. Напишите функцию bool f(int x, int y, int z), которая возвращает true, если x2 + y2 = z2, иначе возвращает false. 14. Напишите функцию bool f(int x, int y), которая возвращает true, если x делится нацело на y, или наоборот, y делится нацело на x, иначе возвращает false. Предполагается, что значения параметров больше нуля. 15. Положительные числа x, y, z могут быть сторонами треугольника, если большее из них меньше суммы двух других. Напишите функцию bool f(int x, int y, int z), которая возвращает true, если числа x, y, z могут быть сторонами треугольника, иначе возвращает false. 16. Напишите функцию int f(int h, int m, int s), которая принимает три целых аргумента (часы h, минуты m и секунды s) и возвращает количество секунд, прошедших с начала дня. 17. Напишите функцию int f(int m, int d), которая принимает два целых аргумента (месяц m и день d) и возвращает количество дней, прошедших с начала года. Считаем, что год не високосный. 18. Напишите функцию int fact(int m), которая вычисляет и возвращает факториал положительного числа m, т.е. произведение всех натуральных чисел, меньших или равных m.
19. Напишите функцию f(int& m4, int& m3, int& m2, int& m1, int& m0, int N), которая возвращает все цифры пятизначного натурального числа N. 20. Напишите функцию f(int& h, int& m, int& s, int sec), которая принимает количество секунд, прошедших с начала дня, и возвращает три целых переменных (часы, минуты и секунды). 21. Напишите функцию int f(int x), которая получает целое значение (не больше пяти знаков) и возвращает число с обратным порядком цифр. Например, принимается число 7631, возвращается число 1367. 22. Наибольший общий делитель (НОД) двух целых чисел – это наибольшее целое, на которое без остатка делится на каждое из двух чисел. Напишите функцию int NOD (int m, int n), которая возвращает НОД двух целых чисел m и n. 23. Наименьшее общее кратное (НОК) двух целых чисел – это наименьшее целое, которое без остатка делится на каждое из двух чисел. Напишите функцию int NOK(int m, int n), которая возвращает НОК двух целых чисел m и n. 24. Говорят, что целое число является совершенным числом, если его сомножители, включая 1 (но не само число) в сумме дают это число. Например, 6 – совершенное число, так как 6=1+2+3. Напишите функцию bool f(int n), которая определяет, является ли ее параметр n совершенным числом. Используйте эту функцию в программе, которая определяет и печатает все совершенные числа в диапазоне от 1 до 1000. 25. Простое число делится нацело только на 1 и на само себя. Напишите функцию bool f(int n), которая возвращает true, если n – простое число и false в противном случае. Составьте таблицу и подсчитайте количество простых чисел от 2 до 1000. 26. Напишите функцию int f(int M, int N), которая вычисляет и возвращает сумму всех нечетных целых чисел в пределах от M до N включительно. Используйте оператор for. 27. Напишите функцию int f(int N, int n), которая вычисляет и возвращает наименьшее из чисел, больших или равных N, которое делится нацело на n. Используйте оператор while.
Массивы Программисты, рассматривают фотографию девушки: Элементы массива в языке С всегда нумируются не с единицы, а с нуля. Тип данных масси в – это набор данных одного и того же типа, собранных под одним именем. Элемент массива определяется именем массива и порядковым номером (индексом). Основная форма объявления массива следующая:
Здесь «тип» - это базовый тип элементов массива, «размер» - количество элементов одномерного массива. Двумерный массив – это массив одномерных массивов и т.д. Пример:
Доступ к элементам массива выполняется при помощи операции квадратные скобки [ ]. В языке С нумерация элементов всегда начинается с нуля. То есть первый элемет массива – это всегда элемент с нулевым номером. Например, массив int a[100] содержит следующие элементы: a[0], a[1], a[2],..., a[99]. Легко подсчитать, сколько байт памти потребуется под одномерный массив, зная, что размер базового типа может быть получен при помощи функции sizeof(тип):
В языке С под массив всегда выделяется непрерывное место в оперативной памяти. Выход массива за cвои (опеределенные описанием) пределы компилятором не проверяется. Это следует помнить. То есть, например, если массив имеет 100 элементов и описан как a[100], то обращение к элементу a[200] компилятор языка С не считает ошибкой. Выход за пределы памяти, отведенной под массив – контроль диапазона – полностью отдается программисту. Элементы массива хранятся в памяти последовательно. Если первый элемент массива int m[4][3] (sizeof(int)=4 байта) хранится по адресу 0018FF50, то второй будет храниться по адресу 0018FF54, третий – по адресу 0018FF58 и т.д. (Рис. 16) Двумерный массив располагается в памяти построчно. Элементы массива m[4][3] хранятся в следующем порядке: m[0][0], m[0][1], m[0][2], m[1][0], m[1][1], m[1][2], m[2][0], m[2][1], …, m[3][2]. Рис. 16. Размещение в памяти элементов массива 5.1. Указатели и массивы в C++ В языке Си понятие массива очень тесно связано с понятием указателя (Рис. 17). Доступ к членам массива можно получать как через имя массива и индекс, так и через указатель на элемент массива и индекс. Имя массива само является указателем на первый элемент массива.
Рис. 17. Имя массива – это адрес, начиная с которого хранится массив Выражение типа arr[i] интерпретируется компилятором так, что означает адрес[смещение]. Это метод доступа к значению, размещенному в элементе с номером смещения от указанного адреса. В примере ниже *(3+arr) и *(arr+3) будут интерпретированы как arr[3].
Имя массива – это адрес, начиная с которого хранится массив, и этот адрес нельзя изменить, он не является именуемым выражением. Поэтому невозможно присвоить один массив другому одним оператором присваивания. Массивы должны копироваться поэлементно:
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|