- •Программирование и основы алгоритмизации Методические указания к лабораторным работам
- •Введение
- •Порядок выполнения лабораторных работ
- •Оформление отчетов к лабораторным работам
- •Лабораторная работа 1
- •Директивы препроцессора
- •Комментарии
- •Простые типы
- •Операции над простыми типами
- •Функции
- •Ввод-вывод в стиле с
- •Массивы
- •Варианты индивидуальных заданий
- •Лабораторная работа №2 Указатели. Связь массивов и указателей
- •Понятие указателя
- •Связь между массивами и указателями
- •Динамическое формирование массивов
- •Варианты индивидуальных заданий
- •Лабораторная работа №3 Обработка строк текста
- •Примеры программ
- •Варианты индивидуальных заданий
- •Лабораторная работа №4 Работа с файлами
- •Примеры программ
- •Варианты индивидуальных заданий
- •Заключение
- •Библиографический список
Функции
Определение функции имеет вид:
[тип_результата] имя_функции([список_формальных_параметров])
{тело_функции}
Такие языки, как Pascal, делают различие между процедурами и функциями, но в C++ функции играют обе роли. Если тип результата не указан, то функция возвращает значения типа int. Если функция ничего не возвращает, в качестве типа указывается void.
Cписок_формальных_параметров – это последовательность объявлений формальных параметров, разделённых запятыми. Даже если функция не имеет параметров, наличие круглых скобок обязательно, вместо параметров рекомендуется указать ключевое слово void или ничего не указывать.
Тело функции – блок. Функция возвращает значение с помощью оператора return выражение;
Пример:
//функция, вычисляющая произведение двух чисел
int mul(int x,int y)
{ return x*y;
}
Следует помнить, что параметры в функцию передаются по значению. Например, в следующей функции есть ошибка:
void change(int x, int y)
{int k=x; x=y; y=k;
}
void main()
{int a=3,b=7;change(a,b);
}
Здесь формальные параметры x и y меняются местами, но значения a и b останутся неизменными. В исправленной версии функции аргументы передаются по ссылке:
void change(int &x, int &y)
{ int k=x; x=y; y=k;
}
Ввод-вывод в стиле с
В С++ основная используемая библиотека ввода/вывода – iostream (потоки ввода /вывода). В ней для ввода используется стандартный объект – cin, а для вывода – cout. Например,
cout<<”Введите два числа”; cin>> a>>b;
Однако представляет интерес и библиотека языка С, которая содержит разнообразный ассортимент функций ввода-вывода. Для их использования необходимо подключить файл заголовка:
#include <stdio.h>
Форматированный вывод выполняется функцией printf:
printf(“формат”, список аргументов);
Команда формата в начала содержит знак ‘%’, затем – код формата. Некоторые коды формата:
%с – отдельный символ
%d – десятичное число
%e – десятичное число с мантиссой и порядком
%f – деятичное с плавающей точкой
%s – строка символов
Пример:
print(“Hi %c %d %s”,’c’,10,”there!”);
получится: Hi c 10 there!
Для форматированного ввода используется функция scanf:
scanf (“формат”,список аргументов);
Список аргументов должен содержать адреса переменных, куда будут помещены значения. Например:
int count;
scanf(“%d”,&count);//&count–адрес переменной count
Массивы
Массив объявляется путём указания после имени переменной квадратных скобок
тип имя_переменной [количество элементов];
Пример: int s[10] - массив из 10 целых чисел.
char mas[20] - строка на 20 символов
Нумерация элементов массива начинается с нуля. В C++ не выполняется проверка выхода индекса за границы массива, поэтому при программировании нужна аккуратность.
В следующем примере массив с заполняется случайными числами в интервале [-100, 100]
#include <stdlib.h>
#include <time.h>
void main()
{ int i, c[10]; randomize();
for(int i=0;i<10;i++) c[i]=random(201)-100;
}
При объявлении массива можно его сразу инициализировать:
int a[5]={3,5,7,11,13};
Если список значений короче длины массива, то остальные элементы инициализируются нулями.
Аналогично объявляются многомерные массивы:
тип имя [size1][size2]…[sizeN]
Пример: int t[4][10]; // объявляется двумерный массив из 40 элементов (4 строки, 10 столбцов)
обратиться к произвольному элементу массива можно так: t[i][j]
!!! не перепутайте c Pascal, t[i,j] – неправильная запись, но компилятор при этом ошибку не выдает (вспомним про операцию «запятая»)
Если одномерный массив инициализируется при объявлении, то его размер можно не указывать – компилятор сам его подсчитает:
int a[]={1,2,3};
Многомерный массив можно рассматривать как массив, элементы которого, в свою очередь, являются массивами. Например: int a[5][10];
при этом a[0], a[1], … ,a[4] – одномерные массивы (строки матрицы a)