- •Введение
- •1. Основы алгоритмизации и программирования
- •1.1. Этапы подготовки и решения задач на эвм
- •1.2. Алгоритмы и способы их описания Понятие алгоритма
- •Способы описания алгоритмов
- •Структурные схемы алгоритмов
- •1.3. Компиляция и интерпретация программ
- •1.4. Стили программирования
- •Процедурное программирование
- •Функциональное программирование
- •Логическое программирование
- •Объектно-ориентированное программирование
- •2.1. Пример готовой программы.
- •2.2. Структура основной программы
- •2.3. Алфавит языка
- •2.4. Константы и переменные Константы
- •Переменные
- •Примеры записи имен переменных
- •2.5. Арифметические выражения
- •Примеры вычисления арифметических выражений
- •Стандартные функции
- •Примеры программирования арифметических выражений
- •Контрольные задания
- •1. Составить описания для заданных переменных
- •2.6. Линейные вычислительные процессы
- •Оператор присваивания
- •Странные операторы присваивания
- •Функции ввода-вывода
- •Функции ввода исходных данных с клавиатуры
- •Потоковый ввод данных числового типа
- •Функция форматного ввода
- •Операторы вывода данных на экран Потоковый вывод
- •Форматный вывод
- •Контрольные задания
- •2.7. Разветвляющиеся вычислительные процессы
- •If (логическое выражение) p1; else p2;
- •Логические выражения
- •Порядок выполнения операций в логических выражениях
- •Условные операторы
- •Короткий условный оператор
- •Полный условный оператор
- •If (логическое выражение) { p1;} else {p2;}
- •Вложенные структуры условных операторов
- •Оператор выбора
- •Контрольные задания
- •2.8. Циклические вычислительные процессы
- •Операторы цикла с условием
- •Оператор цикла с параметром
- •2.9. Базовые алгоритмы
- •Задача 1. Алгоритм организации счетчика
- •Задача 2. Алгоритм накопления суммы
- •Задача 3. Алгоритм накопления произведения
- •Задача 4. Алгоритм поиска минимального члена последовательности
- •Задача 5. Табулирование функции (или кратные циклы)
- •Задача 6. Вычисление сумм элементов последовательностей
- •2.10. Указатели и массивы
- •2.10.1. Указатели
- •2.10.2. Понятие массива
- •Одномерные массивы
- •Описание одномерного массива
- •Индексированные переменные
- •Ввод-вывод одномерных массивов
- •Обработка одномерных массивов
- •Задача 1. Организация счетчика
- •Задача 2. Накопление суммы и произведения
- •Задача 3. Поиск минимального и максимального элементов массива
- •Двухмерные массивы
- •Описание двухмерного массива
- •Ввод-вывод двухмерного массива
- •Обработка матриц
- •2.11. Подпрограммы Структура сложной программы
- •Функции
- •Общий вид описания функции
- •Int I,j; //локальные переменные
- •Обращение к функции
- •Пример программы с функцией
- •Механизмы замены параметров
- •Параметры-массивы в функциях
- •Возвращение результатов
- •Примеры программирования задач с использованием подпрограмм Задача 1
- •Рекурсия
- •Технология сборки библиотеки
- •2.12. Текстовые данные
- •Символьный тип данных
- •Ввод-вывод символьных данных
- •Обработка символьных данных
- •Ввод-вывод строковых данных
- •Обработка строковых данных
- •Стандартные функции обработки строк
- •Сравнение строк:
- •Сцепление строк
- •Определение длины строки
- •Копирование строк
- •Поиск символа в стоке
- •Пример программы для задачи с текстовыми данными
- •Контрольные задания
- •2.13. Динамическое выделение памяти
- •Использование оператора new
- •Освобождение памяти
- •Структуры данных Понятие структуры
- •Обработка структур
- •Пример задачи с использованием структурированных данных
- •2.15. Файлы данных
- •2.15.1. Работа с файлами в стиле с
- •Объявление файловой переменной
- •Открытие файла
- •Закрытие файла
- •// Обработка открытого файла
- •Обработка открытого файла
- •Функции ввода/вывода
- •Работа с текстовыми файлами
- •Обработка бинарных файлов
- •Контрольные задания
- •Заключение
- •Оглавление
- •Литература
- •Приложение
Функции
Функция – это автономная часть программы, реализующая определенный алгоритм и допускающая обращение к ней из различных частей главной программы и из других подпрограмм этой программы, так как каждая функция по отношению к другим является внешней.
Общий вид описания функции
Описание функции содержит заголовок со списком формальных параметров и тело функции.
Тип Имя_функции(список формальных параметров)
{
Описание локальных переменных;
Операторы тела функции;
return результат;
}
Тип, указываемый в заголовке функции, определяет тип результата ее работы, который будет возвращаться в точку вызова. Если тип не указан, то по умолчанию подразумевается int (целый). Для возврата значения в теле функции должен быть оператор return. В дальнейшем будем называть такую функцию типизированной.
Если функция не должна возвращать результат, то она считается не- типизированной, что задается ключевым словом void, стоящим в заголовке на месте типа. В этом случае оператор return в функции не требуется.
void имя_функции(список формальных параметров)
{
Описание локальных переменных;
Операторы тела функции;
}
Рассмотрим пример оформления программы, содержащей текст типизированной функции maximum для нахождения максимального значения из двух заданных целых чисел.
#include "stdafx.h"
int maximum(int a, int b) //заголовок функции maximum
{
int c; //локальная переменная
if (a>b)
c=a;
else
c=b;
return c; // возвращение результата
}
void main()
{ int x,y,z;
printf("Введите x и y:");
scanf("%d%d",&x,&y); // ввод двух чисел
z=maximum(x,y); // обращение к функции maximum
printf("max=%d\n",z);
}
Рассмотрим пример программы, использующей нетипизированную функцию. Функция Form_matrix будет заполнять целочисленную матрицу размера mxn случайными числами.
#include "stdafx.h"
#include "stdlib.h"
#define M 50
void Form_matrix(int A[][M], int m, int n) /*заголовок функции Form_matrix */
{
Int I,j; //локальные переменные
for(i=0;i<m;i++)
for(j=0;j<n;j++)
A[i][j]=rand()%100-50;
}
void main()
{ int m1,n1,m2,n2; //переменные для задания размерности матриц
int Matr1[M][M],Matr2[M][M]; /*объявление двух матриц размера 50х50 */
printf("Введите размерность Mart1 ");
scanf("%d%d",&m1,&n1); // ввод двух чисел
Form_matrix(Matr1,m1,n1); //обращение к функции Form_matrix
printf("Введите размерность Mart2 ");
scanf("%d%d",&m2,&n2); // ввод двух чисел
Form_matrix(Matr2,m2,n2); //обращение к функции Form_matrix
…
}
Данный пример демонстрирует использование функции Form_matrix дважды в главной функции. При первом обращении к функции произойдет заполнение матрицы Mart1, а при втором обращении – Matr2, так как их имена указаны в соответствующих обращениях к функции. Функция Form_matrix может заполнить матрицу любого размера, не превышающего 50х50. (Конечно, можно было создать динамические матрицы, но это другая история, и мы говорили о ней в параграфе «Динамическая память»).
В теории о подпрограммах-функциях следует остановиться еще на трех важных вопросах:
обращение к нетипизированной и типизированной функциям;
передача параметров в функцию;
возвращение результатов.