Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по программированию часть2.doc
Скачиваний:
134
Добавлен:
13.02.2016
Размер:
1.23 Mб
Скачать

Порядок выполнения работы

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;

}