
- •1. Лабораторная работа №1
- •1.1. Методическая часть Оператор if
- •Конструкция if-else
- •If (условное выражение)
- •Множественный выбор
- •If (условное выражение)
- •Множественный выбор - оператор switch
- •Операторы цикла
- •1.2. Порядок выполнения работы.
- •1.3. Варианты заданий
- •1.4. Контрольные вопросы
- •2.1. Методическая часть Функции. Аргументы функции.
- •2.2. Порядок выполнения работы.
- •2.3. Варианты заданий
- •2.4. Контрольные вопросы
- •3.1. Методическая часть Массивы как аргументы функции
- •Функции и многомерные массивы
- •3.2. Порядок выполнения работы.
- •3.3. Варианты заданий
- •3.4. Контрольные вопросы
- •4.1. Методическая часть Символьные строки
- •Строковые константы
- •Массивы типа char и их инициализация
- •Явное задание размера памяти
- •Массивы символьных строк
- •Указатели и строки
- •Ввод строк
- •Функция gets()
- •Функция scanf()
- •Функция puts()
- •Функции, работающие со строками Функция strcat() - string catenation
- •Функция strcmp() - string comparison
- •Функция strcmpi()
- •Функция strncmp()
- •Функция strcpy()
- •Функция strncpy()
- •Пример реальной программы сортировки строк
- •4.2. Порядок выполнения работы.
- •4.3. Варианты заданий
- •4.4. Контрольные вопросы
1.2. Порядок выполнения работы.
1. Изучить материал данного методического пособия, привлекая лекции и дополнительную литературу;
2. Разработать схемы алгоритмов и программу для обработки данных в соответствии с конкретным вариантом.
1.3. Варианты заданий
Дано натуральное число N. Вычислить
,
где
Даны натуральное число N и вещественное х. Не используя функцию pow() вычислить выражения:
Дано натуральное число N. Вычислить выражение
Выбрать все простые числа из заданного диапазона. Простыми считаются числа, которые делятся без остатка только на 1 и сами на себя.
По двум введенным вещественным числам вычислить коэффициенты b и c приведенного квадратного уравнения, корнями которого являются эти числа. Вывести на экран это уравнение в виде:
x2 + bx + c = 0 .
Даны натуральное число N и вещественное х. Вычислить выражение:
1.4. Контрольные вопросы
Цель и способы объявления и инициализации переменных?
Что означает термин ключевое слово? Может ли ключевое слово использоваться в качестве идентификатора переменной?
Назовите отличие функций printf() и scanf() в их поведении по отношению к аргументам.
Цель использования спецификаторов преобразования?
Что происходит, если программа встречает оператор break?
Что такое вложенный цикл?
ЛАБОРАТОРНАЯ РАБОТА №2
Целью лабораторной работы является освоение:
- Правил создания функций;
- Назначения и состава формальных и фактических параметров;
- Правил вызова функций;
- Правила определения области действия переменных;
- Правил строения и вызова рекурсивных функций.
2.1. Методическая часть Функции. Аргументы функции.
Минимальным исполняемым модулем программы в языке С является функция. Каждая функция имеет единый формат определения:
возвращаемый_тип имя_функции (спецификация_параметров)
{
тело_функции
}
возвращаемый_тип - обозначение типа возвращаемого функцией значения
имя_функции - уникальный идентификатор, не совпадающий со служебными словами
спецификация_параметров – либо пустой список, либо список формальных параметров, каждый элемент которого имеет вид: тип_параметра имя_параметра
тело_функции - набор операторов, один из которых является обязательным – оператор return. Оператор return служит механизмом возврата из функции в точку вызова. Имеются две формы этого оператора:
return – соответствует завершению функции, не возвращающей никакого значения;
return выражение; - возвращает значение, автоматически преобразовываемое к возвращаемому функцией типу.
Чтобы сделать доступ к функции корректным определение функции (прототип) или описание функции в файле приложения размещаются до места ее вызова.
Прототип функции имеет следующий формат:
возвращаемый_тип имя_функции (спецификация_параметров);
Для обращения к функции используется выражение:
имя_функции (список_фактических_параметров);
список_фактических_параметров – аргументы функции, число которых равно числу формальных параметров функции. Соответствие между формальными и фактическими параметрами устанавливается по их взаимному расположению в списках. Между формальными и фактическими параметрами должно быть соответствие по типам, иначе произойдет автоматическое преобразование типов.
Язык С предусматривает передачу параметров только по значениям. Это означает, что формальные параметры функции локализованы в ней, т.е. недоступны вне определения функции и никакие операции над формальными параметрами в теле функции не изменяют значений фактических параметров. В процессе вызова функции формальные параметры получают конкретные значения фактических параметров. Эти данные и подлежат обработке, а результат передается в точку вызова функции с помощью оператора return.
Пример фрагмента приложения, содержащего функцию вычисления абсолютной величины числа: int abs ( int X );
main()
{ int x, y;
………
y = abs ( x );
………
}
int abs ( int X )
{ if ( X < 0 )
return ( - X );
else
return ( X );
}
Локальная переменная Х в вызываемой функции никак не влияет не переменную х в главной программе.
Чтобы появилась возможность влиять на значение, предаваемое в качестве аргумента, вызываемая функция должна использовать в качестве фактического аргумента адрес переменной. Формальный же параметр должен стать указателем на переменную, т.е. ссылка на фактическую переменную будет косвенной.
Пример функции, осуществляющей обмен данными между двумя переменными:
swab( int *X, int *Y);
main()
{ int x=10, y=-1;
swab(&x, &y); // передача адресов в функцию
……….
}
swab( int *X, int *Y);
{ int temp;
temp = *X;
*X = *Y;
*Y = temp;
return;
}
Итак, путем передачи функции адресов переменных x и y мы предоставили возможность доступа к ним.
При вызове функции информация о переменной может передаваться функции двумя способами. Если мы используем форму обращения function(x) происходит передача значения переменной х. Если же мы используем форму обращения function(&x), происходит передача адреса переменной х, что дает возможность влиять на значение самой переменной х.
Все функции в приложении, написанном на языке С равноправны, т.е. каждая из них может вызывать другую функцию, и в свою очередь, каждая может быть вызвана любой другой функцией. Функция main() отличается от других только тем, что после «сборки» программы, состоящей из нескольких функций, выполнение программы начинается с первого оператора функции main(). Даже функция main() может быть вызвана другими функциями. Более того, функция может вызвать сама себя. Рассмотрим следующий пример:
#include “stdio.h”
main()
{ char ch;
printf (“Укажите произвольный символ. Символ конца работы - *.\n);
сh = getchar ();
printf (“Вы указали символ %c \n” , ch);
if (ch != ‘*’ )
main();
}
Действие, состоящее в том, что функция вызывает сама себя, называется рекурсией. Цикл, который был создан, используя рекурсию, отличается от циклов while и do while. Когда функция main() вызывает сама себя, не происходит передачи управления на ее начало. Вместо этого в памяти машины сначала создаются копии всего набора переменных функции main(), а затем только происходит передача управления на ее начало. В обычном цикле адреса переменных, используемых в нем, не меняются от итерации к итерации. В рекурсивном же цикле адрес переменной ch меняется, поскольку при каждом выполнении тела цикла создается новая копия переменной ch.