- •Практикум по программированию на языке с
- •Порядок выполнения лабораторных работ
- •Основы программирования в среде языка си. Оператор присваивания
- •Приоритет операций в выражении
- •Задание 1 (программа 1_1)
- •Программирование разветвленных алгоритмов. Операторы передачи управления
- •Программирование циклических алгоритмов с заданным числом повторений
- •Программирование циклических алгоритмов с предусловием
- •Программирование циклических алгоритмов с постусловием
- •Модифицировать программу 3_2 для вычисления функций f1(X) и f2 (X) с применением оператора цикла с постусловием. Выполнить ее и сравнить результаты с полученными ранее.
- •Программирование алгоритмов обработки одномерных массивов
- •Задание 1
- •Обработка двумерных массивов
- •Программирование с применением функций
- •[Класс] тип имя ([список параметров])[throw (исключения)] {тело функции}
- •Return [выражение];
- •Программирование с возвратом из функций нескольких значений
- •Лабораторная работа 10 Обработка символьных и строковых данных
- •Структуры
- •Модульное программирование
- •Динамические структуры данных. Списки
- •Задание 1 (программа 14_1)
- •Графика
- •Задание к расчетно-графической работе
- •Библиографический список
- •Типы данных
- •Обозначения графические в схемах алгоритмов (гост 19.701-90)
- •Сообщения об ошибках Сообщения об ошибках периода компиляции
- •Ошибки стадии выполнения
- •Математические ошибки
- •Функции ввода-вывода для стандартных потоков
- •Функции для работы со строками
- •Библиотека заголовочных файлов
- •Контейнерные классы
Программирование с применением функций
Цель работы: научиться разрабатывать и отлаживать программы с использованием подпрограмм (функций).
Объявление функции (прототип, заголовок) задает ее имя, тип возвращаемого значения и список передаваемых параметров. Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
[Класс] тип имя ([список параметров])[throw (исключения)] {тело функции}
С помощью необязательного модификатора класс можно явно задать область видимости функции, используя ключевые слова extern, static:
extern – глобальная видимость во всех модулях программы (по умолчанию);
static – видимость только в пределах модуля, в котором определена функция.
Тип возвращаемого функцией значения может быть любым, кроме массива и функции (но может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void.
Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Элементы списка параметров разделяются запятыми. Для каждого параметра, передаваемого в функцию, указывается его тип и имя (в объявлении имена можно опускать).
Механизм возврата из функции в вызвавшую ее функцию реализуется оператором
Return [выражение];
Пример. Даны три массива A (5), B (5), C (5). Найти среднее арифметическое значение наименьших элементов массивов.
До написания программы разрабатывается СА главной программы (рис.10, а) и СА для подпрограммы нахождения наименьшего элемента в любом массиве (рис.10, б). Отлаженная программа решения задачи имеет следующий вид:
#include <stdio.h>
#include <conio.h>
typedef int* mass; // переопределение типа: mass – указатель на целые
// функция вычисления минимального элемента в массиве
int minim (mass d)
{
int i, min;
min = d[0];
for (i=1; i<5; ++i)
if ( d[i]<min )
min = d[i];
printf ("минимальный элемент равен %d\n", min);
return min;
}
void main ()
{
int a[] = {5,2,7,1,8};
int b[] = {3,4,5,6,6};
int c[] = {3,8,5,2,6};
int n;
float sr;
sr = (minim(a) + minim(b) + minim(c)) / 3;
printf(" sr= %5.2f ", sr);
getch();
}
Задание 1 (программа 8_1)
Написать и отладить программы для задач из лабораторных работ 1 и 6 с применением подпрограммы - функции с параметрами. Вычисление функции (или обработку массива) выполнить в подпрограмме, а ввод исходных данных и вывод результатов - в основной программе. Предусмотреть, по крайней мере, два обращения к функции с различными фактическими параметрами (двумя массивами).
Для отладки программ использовать средства среды Си (см. прил. А): пошаговое исполнение программы (трассировку) с контролем значений переменных в окне отладчика Watch.
Задание 2 (программа 8_2)
По заданным вещественным массивам A [1..6], B [1..6] и C [1..6] вычислить
(max B)/max A + (max C)/max(B+C) при min A < max B,
max(B+C) + max C в противном случае.
2. Даны две квадратные вещественные матрицы шестого порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
3. Определить координаты центра тяжести трех материальных точек с массами m1,m2,m3 и координатами (x1,y1), (x2,y2), (x3,y3) по формулам
xc = (m1x1+m2x2+m3x3)/(m1+m2+m3), yc = (m1y1+m2y2+m3y3)/(m1+m2+m3).
Вычисление координаты оформить функцией с параметрами.
4. Вычислить все медианы для каждого из трех треугольников по заданным в массивах A, B, C сторонам: ma=0.5, mb= 0.5, mc=0.5. Вычисление медианы оформить функцией.
5. Даны три одномерных массива вещественных чисел A [1..6], B [1..8] и С[1..7]. Найти общую сумму положительных элементов в массивах. Нахождение суммы элементов в массиве оформить функцией.
6. Даны два двумерных массива целых чисел с размерами (4х5) элементов. Подсчитать количество отрицательных элементов в каждом из них.
7. Даны два одномерных массива целых чисел A [1..8] и B[1..8]. Найти сумму их максимальных элементов. Для нахождения максимального элемента в массиве использовать функцию.
8. Даны два двумерных массива целых чисел с размерами (5х5) элементов каждый. Подсчитать произведение элементов главных диагоналей в каждом из них.
9. Даны три одномерных массива вещественных чисел A[1..6], B[1..8] и С[1..7]. Найти среднее геометрическое значение положительных элементов для каждого.
10. Даны две матрицы целых чисел M[1..3,0..1], К[1..3,0..2]. Найти среднее арифметическое значение для каждой из них.
11. Даны три одномерных массива целых чисел A[1..6], B[1..8] и С[1..7]. Подсчитать количество неотрицательных элементов в каждом.
12. Даны две матрицы целых чисел S[1..3,0..2], К[1..3,0..2], в каждой из которых имеется по два одинаковых числа. Распечатать их значения.
13. Даны два одномерных массива целых чисел A[1..6] и B[1..8]. Вычислить значение Z=(min A[i] + min B[j]) / min (A[i]+B[j]).
i j i, j
14. По заданным целым массивам X[0..7] и Y[8..15] вычислить
xi2 при xi yi+8>0,
yi2 в противном случае.
15. Дана матрица целых чисел D[1..6,1..5]. Найти наименьшую из сумм неотрицательных элементов строк матрицы. Для вычисления суммы использовать подпрограмму (функцию).
16. Дана матрица целых чисел E [1..3,1..5]. Используя функцию, найти среднее геометрическое значение для каждого столбца матрицы.
17. Дана матрица целых чисел F [1..4,1..5]. Найти наименьшие значения элементов в каждой из строк матрицы с помощью функции.
18. Даны две квадратные вещественные матрицы шестого порядка. Напечатать квадрат той из них, в которой наименьший след (сумма диагональных элементов), считая, что такая матрица одна.
19. Сформировать двумерный массив 1 2 3 4 5
1 4 9 16 25
1 8 27 64 125
... .
Найти правило и оформить функцией вычисление любой строки.
20. Даны две матрицы целых чисел V [1..2,1..3], W [1..3,1..2]. Найти суммы элементов строк и столбцов в этих матрицах.
Лабораторная работа 9