- •Основные понятия программирования
- •Понятие алгоритма. Алгоритмизация
- •Свойства алгоритма
- •Запись алгоритма на естественном языке
- •Изображение алгоритма в виде схемы
- •Понятие о языках программирования
- •Понятие о структурном подходе к разработке алгоритмов
- •4 Идти к 8
- •6 Идти к 8
- •8 Останов
- •Первая программа на Си
- •Процесс создания программы
- •Комментарии
- •Директива #include
- •Макросы
- •Переменные и типы данных
- •Правила именования идентификаторов
- •Типы данных
- •Int двухбайтовое целое число
- •Оператор printf: вывод на экран
- •Последовательности для вывода специальных символов
- •Спецификация вывода
- •X тип int в шестнадцатеричном виде
- •Оператор scanf: ввод с клавиатуры
- •Логическая организация программы на Си
- •Функция main
- •Глобальные и локальные переменные
- •Операторы и операции
- •Арифметические операции
- •Битовые операции
- •Операции отношения
- •Логические операции
- •Операции присваивания
- •Другие операции
- •Математические функции
- •Управляющие структуры
- •Операторы ветвления
- •Операторы цикла
- •Массивы
- •Функции
- •Интегрированная среда разработки turbo c
- •Общие сведения и принципы работы
- •Стандартные органы управления
- •Главное меню
- •Запуск иср и выход
- •Работа с окнами и файлами
- •Система помощи
- •Редактор
- •Компиляция и выполнение программ
- •Технология создания с-программы
- •Лабораторные работы
- •Лабораторная работа №1
- •Создание нового файла
- •Ввод и редактирование исходного текста
- •Сохранение
- •Выполнение программы
- •Исправление ошибок
- •Просмотр результатов выполнения
- •Закрытие файла
- •Открытие и выполнение ранее сохраненного файла
- •Вызов справки
- •Лабораторная работа №2
- •Лабораторная работа №3
- •Лабораторная работа №4
- •Лабораторная работа №5
- •Лабораторная работа №6
- •Лабораторная работа №7
- •Лабораторная работа №8
- •Список вопросов
- •Литература
- •Приложение Пример оформления отчета по лабораторной работе
- •Блок-схема алгоритма
- •Текст программы
- •Результат выполнения программы
- •Теория и технология программирования
-
Лабораторная работа №8
Целью данной работы является ознакомление с использованием подпрограмм-функций.
Порядок выполнения работы:
-
изучить принципы работы с функциями в языке Си (глава 12);
-
определить общую формулу для вычисления выражений и необходимые аргументы для подпрограммы;
-
разработать блок-схемы алгоритмов для основной программы и подпрограммы;
-
составить текст программы на языке Cи;
-
проверить правильность выполнения разработанной программы;
-
составить отчет.
Часто некоторую последовательность действий требуется повторить в нескольких местах программы с разными значениями. Чтобы уменьшить объем программы и время на ее набор можно использовать структуру, присущую всем языкам программирования, — подпрограмму. Но свойство подпрограмм сокращать текст не является основополагающим. Они являются одним из фундаментальных инструментов, оказывающих влияние на стиль, качество и надежность разработки программных систем. Подпрограммы выступают как средство декомпозиции программы на логически связанные, но замкнутые компоненты, что позволяет вести ее разработку целому коллективу программистов. Так как декомпозиция существенно повышает читаемость программы, то подпрограммы, как автономные модули, используют даже тогда, когда они вызываются однократно.
В подпрограммах могут вычисляться несколько значений, например, преобразование матрицы, тогда это будут подпрограммы-процедуры. Если же в подпрограмме вычисляется единственное значение, причем простого типа, то используются подпрограммы-функции. При описании функции должен быть определен тип функции, то есть возвращаемый параметр является не аргументом, а значением самой функции. При реализации функции должно быть возвращено ее значение при помощи оператора return, иначе оно будет неопределенным. Из основной программы обращение к подпрограмме-функции производится так же, как и к стандартным функциям, то есть указанием в выражении имени и в скобках аргументов.
Задание. В лабораторной работе необходимо определить общую формулу для вычисления заданных выражений и реализовать их вычисление с использованием одной подпрограммы-функции (см. таблицу 13). В качестве исходных данных использовать массивы:
Пример. Вычислить , , .
Запишем общую формулу для вычисления этих выражений:
,
где f — функция, arr — массив, size — размер массива, power — степень для возведения элементов массива.
Используем эти обозначения в качестве формальных параметров для нашей функции. В качестве же фактических параметров будут выступать: , , . Первый параметр — это массив вещественных чисел, но так как количество элементов в массивах отличается, то при описании этого параметра в функции размер указываться не будет: float arr[], а будет передаваться в качестве второго параметра целочисленного типа: int size. Значение третьего параметра для заданных выражений принимает целочисленные значения, поэтому для параметра power можно использовать тип int: int power.
Обратите внимание, что в задании изменение индекса i определено от 1 до N, как принято в математике. В языке Си нумерация элементов массива осуществляется с 0, поэтому в программе для вычисления суммы используется цикл по i от 0 до size–1. Чтобы вычисленное значение суммы соответствовало заданию, необходимо при умножении к i добавлять 1: s += (i+1) * ....
Вычисленное в функции значение суммы s возвращается в качестве ее результата при помощи оператора return.
Листинг 22 — Лабораторная работа №8
/* lab8.c – лабораторная работа №8. */
#include <stdio.h> #include <conio.h> #include <math.h>
/* определение собственной функции */ float f(float arr[], int size, int power) { /* описание и инициализация локальных переменных */ int i; // для индекса массива float s = 0.0; // для вычисления суммы
/* вывод значений параметров функции */ printf(“f(arr=[“); for (i = 0; i < size; i++) printf(“%6.2f”, arr[i]); printf(“], size=%d, power=%d)\n”, size, power);
/* вычисление суммы */ for (i = 0; i < size; i++) { s += (i+1) * pow(arr[i], power); printf(“i=%d, s=%f\n”, i, s); }
printf(“Возвращаемое значение: s=%f\n\n”, s); return s; /* возврат значения функции */ }
void main() { /* описание и инициализация массивов и переменных */ float A[5] = {0.12, -0.8, 0.2, 0.38, 0.11}; float D[4] = {0.25, 0.21, 0.12, 0.39}; float E[3] = {2.2, 3.1, 1.8}; float X, Y, Z;
clrscr();
/* вызов функции с разными фактическими параметрами */ X = f(A, 5, 3); Y = f(D, 4, 1); Z = f(E, 3, -1);
/* вывод результатов */ printf(“Значение X = %f\n”, X); printf(“Значение Y = %f\n”, Y); printf(“Значение Z = %f\n”, Z); } |
Рисунок 56 — Результат выполнения lab8.c
Таблица 13 — Варианты заданий к лабораторной работе №8
№ вар. |
Значение X |
Значение Y |
Значение Z |
1 |
|
|
|
2 |
|
|
|
3 |
|
|
|
4 |
|
|
|
5 |
|
|
|
6 |
|
|
|
7 |
|
|
|
8 |
|
|
|
9 |
|
|
|
10 |
|
|
|