- •Введение
- •Лабораторная работа № 13 одномерные массивы
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Часть 1.
- •Часть 2.
- •Лабораторная работа № 14 многомерные массивы
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Часть 1.
- •Часть 2.
- •Лабораторная работа № 15 сортировка и поиск в массивах
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 16 символьные массивы
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 17
- •Порядок выполнения работы
- •Задания для выполнения
- •Часть I
- •Часть II
- •Лабораторная работа № 18 программирование с использованием указателей
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 19 динамическое выделение памяти
- •Краткие теоретические сведения
- •Библиотечные функции
- •Создание одномерного динамического массива
- •Создание двумерного динамического массива
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Задания для выполнения
- •Лабораторная работа № 22 функции пользователя
- •Краткие теоретические сведения
- •Тип_результата Имя_функции ([Список_параметров]);
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 23 рекурсивные функции
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 24 передача одномерного массива в функцию
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Задания для выполнения
- •Лабораторная работа № 26 указатель как параметр функции
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Лабораторная работа № 29 объединения. Битовые поля. Перечисления
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Контрольные вопросы
- •Задания для выполнения
- •Варианты 1 – 7 задания по асу
- •Варианты 8 – 15 задания по странам
- •Лабораторная работа № 30 создание файла. Запись и чтение данных
- •Краткие теоретические сведения
- •Порядок выполнения работы
- •Порядок выполнения работы
- •Советы по программированию
- •Порядок выполнения работы
- •Задания для выполнения
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Выполнить задание.
Задания для выполнения
Массив в памяти разместить динамически, ввод исходных данных и вывод полученных результатов выполнить в основной функции, а решение задачи оформить в виде отдельной функции пользователя. Не использовать глобальных переменных.
1. Найти сумму элементов, расположенных на главной диагонали.
2. Найти произведение элементов, расположенных на главной диагонали.
3. Найти максимальный элемент и поменять его с первым элементом.
4. Найти минимальный элемент и поменять его с первым элементом.
5. Найти максимальный элемент и поменять его с последним элементом.
6. Найти минимальный элемент и поменять его с последним элементом.
7. Найти количество отрицательных и положительных элементов массива.
8. Найти количество 0-й и 1-ц в массиве, а также сумму единиц.
9. Найти число элементов массива, больших T (вводится с клавиатуры) и просуммировать эти элементы.
10. Найти число элементов массива > T и их произведение.
11. Найти число элементов массива < T и их сумму.
12. Найти число элементов массива < T и перемножить эти элементы.
13. Найти число элементов массива = T и сложить эти элементы.
14. Найти число элементов массива = T и перемножить эти элементы.
15. Найти максимальный элемент среди лежащих ниже главной диагонали.
Лабораторная работа № 26 указатель как параметр функции
Цель работы: закрепить практические навыки работы с указателями.
Краткие теоретические сведения
Рассматривая ранее правила использования функций, мы обращали внимание, что в языке Си возможна только односторонняя передача значений фактических параметров из вызывающей программы к формальным параметрам вызываемой функции. Возвращаемое значение несет сама функция, используемая в качестве операнда в выражении. Отсюда, казалось бы, следует неукоснительное правило: в процессе выполнения функции не могут изменяться значения переменных в вызывающей программе. Однако это правило можно обойти, если в качестве параметров функции использовать указатели.
В примере функция swap() производит обмен значениями двух переменных величин, заданных своими указателями в аргументах.
void swap(int *a, int *b)
{ int c;
c=*a; *a=*b; *b=c;
}
Если в основной программе имеется следующий фрагмент:
int x=1, y=2;
swap(&x, &y);
printf(“x=%d y=%d”, x, y);
то на экран будет выведено:
x=2 y=1
т.е. переменные x и y поменялись значениями.
После обращения к функции указатель a получил адрес переменной x, указатель b – адрес переменной y.после этого переменная x в основной программе и разадресованный указатель *a в функции оказываются связанными с одной ячейкой памяти; так же – y и *b.
Порядок выполнения работы
1. Изучить теоретические сведения.
2. Выполнить задание.
Задания для выполнения
Выполнить задания № 3 и № 5 из лабораторной работы № 25, используя две функции: одну для поиска минимального (максимального) элемента и его индексов, вторую для перестановки указанных элементов.
ЛАБОРАТОРНАЯ РАБОТА № 27
АРГУМЕНТЫ КОМАНДНОЙ СТРОКИ
Цель работы: изучить параметры функции main() и их назначение; научиться разрабатывать программы с использованием параметров функции main(); научиться выполнять программы с использованием командной строки.
Краткие теоретические сведения
После запуска программы управление передается функции main(). Она может возвращать значение в вызвавшую систему и принимать параметры из внешнего окружения. Возвращаемое значение должно быть целого типа. Стандарт предусматривает два формата функции:
тип main() {/*…*/}
или
тип main(int argc, char *argv[]) {/*…*/}
Функция main() имеет два параметра. Имена параметров в программе могут быть любыми, но принято использовать argc и argv.
– argc определяет количество параметров, передаваемых функции, включая имя самой программы;
– argv является массивом указателей на строки, каждая из которых содержит одно слово из командной строки. Если слово должно содержать символ пробел, то при записи его в командную строку оно должно быть заключено в кавычки.
Первый элемент массива argv[0] ссылается на полное имя запускаемого на выполнение файла. Следующий argv[1] указывает на первый параметр; argv[2] – на второй и т.д. Параметр argv[argc] должен быть равен 0.
Если функция main() ничего не возвращает, вызвавшая система получит значение, означающее успешное завершение. Ненулевое значение означает аварийное завершение. Оператор возврата из main() можно опускать.
Использование параметров функции main()
Пример 1. Текст программы сложения двух чисел, введенных из командной строки, сохранен в файле SumToArg.cpp, следовательно исполнимый код будет находиться в файле SumToArg.exe.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ float a, b;
/* argv[0] содержит имя программы, argv[1] – первое слагаемое; argv[2] – второе слагаемое */
a=atof(argv[1]);
b=atof(argv[2]);
printf (“%f + %f=%f ”,a, b, a+b);
return 0;
}
Так как параметры массива argv являются строками, то для выполнения арифметических операций их значения нужно привести к числовому типу. Для этого в библиотеке stdlib.h имеются функции:
atof(s) – приводит аргумент s к типу float;
atoi (s) – приводит аргумент s к типу int.
Запуск программы из командной строки
Для запуска программы воспользуемся командной строкой cmd. С помощью команды cd переходим в папку, где находится программа SumToArg.exe. Далее набираем имя этой программы и через пробелы 2 числа, нажимаем Enter.
Пример 2. Через командную строку передается последовательность чисел. Определить, сколько отрицательных значений содержится в данной последовательности.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{ int i, count=0;
for (i=1; i<argc; i++)
if (atof(argv[i])<0) count++;
if (count= =0) puts(“No”);
else printf(“otric – %d”, count);
return 0;
}