Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программирование на языке Си. Практикум

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
893 Кб
Скачать

Чтобы получить

значение первого элемента массива

*a

значение второго элемента массива

*(a+1)

значение j элемента в первой строке массива

*(a+j)

значение последнего элемента в первой

*(a+m-1)

строке массива

 

значение первого элемента во второй строке

*(a+m)

массива

 

значение первого элемента в третьей строке

*(a+m+m)

массива

или *(a+2* m)

значение первого элемента в i-ой строке

*(a+i* m)

массива

 

значение элемента с индексами i для строки

*(a+i *m+j)

и j для столбца

 

Таким образом, если известен адрес первого элемента в массиве, то адрес любого элемента можно получить, прибавив к начальному индекс строки, в которой расположен элемент, умноженный на длину строки, и индекс столбца, в котором расположен элемент.

Лабораторная работа №5 Заполнение регулярного массива. Динамический массив

Задание: Составить программу заполнения массива целого типа в соответствии со схемой (см. задание лабораторной работы № 3) и печати его в виде таблицы (матрицы), используя динамический массив.

Лабораторная работа №6 Вычисление матричных выражений

Задание: Написать программу вычисления матричного выражения (см. задание лабораторной работы № 4), используя для получаемых матриц динамические массивы.

31

2. Функции

Функция – это определенным образом оформленный блок (кусок) программы, совокупность объявлений и операторов, предназначенная для выполнения некоторой отдельной задачи. Этот блок можно много раз вызывать по имени (вместо того, чтобы каждый раз записывать заново).

Количество функций в программе не ограничивается, но только одна из них является главной и носит имя main.

Каждая создаваемая функция должна быть:

-объявлена (описание прототипа функции);

-определена (написание текста функции);

-использована (вызов функции).

Порядок создания функции напоминает создание

переменной, которая должна быть объявлена, определена и только потом использована.

Рассмотрим все более подробно:

1)объявление функции сводится к написанию прототипа – краткого описания функции, которое необходимо сделать до

ее использования. Прототип включает следующее:

тип_возвр_знач имя_функции (список формальных

параметров с указанием их типа через запятую);

Например:

Прототип функции fun_uzer1, которая получает два значения типа int и возвращает значение типа int:

int fun_uzer1(int, int);

Прототип функции fun_uzer2, которая получает два значения типов int и float и возвращает значение типа char:

char fun_uzer2(int, float);

2)определение функции – это описание всей функции полностью, включая то, что именно и как она должна делать. Описание функции может быть в любом месте программы (после прототипа) на внешнем (нулевом) уровне. При этом нельзя описывать одну функцию внутри другой.

32

тип_возвр_знач имя_функции(список_формальных_

параметров с указанием их типа через запятую)

{

тело функции

}

Первая строка описания функции, называемая заголовком функции, полностью повторяет прототип функции, только на конце нет точки с запятой.

3) использование функции означает ее вызов: - если тип возвращаемого значения void

имя_функции (список фактических параметров через

запятую);

- если тип возвращаемого значения не void

имя_переменной = имя_ функции (список фактических

параметров через запятую);

Имя_функции - это идентификатор, аналогичный имени переменной, формируется по тем же правилам. По имени функции мы будем ее вызывать. Отличать имя функции от имени переменной будем так – после имени функции всегда располагаются скобки. Внутри скобок в зависимости от ситуации располагаются:

-при объявлении типы формальных параметров через запятую, имена этих параметров могут быть опущены;

-при определении типы формальных параметров и их имена через запятую;

-при вызове фактические параметры через запятую.

Тип функции – тип того значения, которое возвращает функция через свое имя. Если функция ничего не возвращает, то ее тип void.

33

Например, прототип функции сортировки массива, которая получает указатель на массив элементов типа int и их количество, при этом возвращаемое значение отсутствует:

void sort(int *mas, int n);

Если функция возвращает значение, то такое значение только одно, и в теле данной функции должен быть специальный оператор return. Oператор return выполняет два действия:

-возвращает значение указанного типа,

-прекращает работу функции.

При выполнении оператора return возвращаемое значение преобразуется к объявленному типу и возвращается в точку вызова функции.

Оператор return может стоять в любом месте программы, таких операторов может быть несколько.

Лабораторная работа №7 Применение функций при решении простых вычислительных задач

Задание: Объявить и определить функцию для решения своей задачи. В главной функции main организовать вызовы своей функции.

Вариант задания

1

Создать функцию расчета площади треугольника по

 

длинам сторон.

 

Найти максимальную из площадей 5 треугольников,

 

заданных длинами сторон (длины сторон вводить с

 

клавиатуры).

2

Создать функцию расчета факториала n!.

 

Найти среднее арифметическое факториалов 4

 

натуральных чисел (числа вводить с клавиатуры).

3

Создать функцию вычисления суммы n первых членов

 

арифметической прогрессии, заданной первым членом a1

 

и разностью d.

 

Найти минимальную из 5 сумм 10 членов арифметических

 

прогрессий (a1 и d вводить с клавиатуры).

34

4Создать функцию нахождения НОД двух чисел.

Найти сумму наибольших общих делителей для 5 пар натуральных чисел, вводимых с клавиатуры.

5Создать функцию расчета площади сектора по радиусу и углу (в градусах). Найти сумму площадей 5 секторов (радиусы и углы вводить с клавиатуры).

6Организовать вычисление суммы, используя функцию для расчета одной дроби

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

=

2

+ √2

+

5

+ √5

+

8

+ √8

+

11

+ √11

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

+ √5

 

8

+ √8

 

11

+ √11

 

14

+ √14

7Создать функцию расчета площади трапеции по длинам оснований и высоте.

Найти сумму площадей 4 трапеций (длины и высоты вводить с клавиатуры).

8Создать функцию вычисления гипотенузы по катетам. Найти максимальную из длин гипотенузы 5 прямоугольных треугольников, заданных длинами катетов (длины катетов вводить с клавиатуры).

9Создать функцию вычисления площади кольца, заданного внутренним и внешним радиусами.

Найти сумму площадей 5 колец (радиусы вводить с клавиатуры).

10 Создать функцию вычисления полинома P в точке x:

P = 1 + + 2 + 3 + 50

Организовать вычисление полинома для значений x на отрезке [-0.5; 0.5] с шагом 0.2.

11Создать функцию вычисления радиуса вписанной в треугольник окружности по длинам сторон.

Найти максимальный из радиусов вписанной окружности для 4 треугольников (длины сторон вводить с клавиатуры).

12Создать функцию вычисления суммы ряда для любого k

= 1 − 12 + 13 14 + (−1) +1 1

Организовать вычисление ряда для k=50, 100, 150.

35

13

Создать функцию вычисления суммы ряда для любого k

 

1

 

1

 

1

1

 

 

= 1 +

 

+

 

+

 

+

 

 

 

2

3

4

 

 

Организовать вычисление ряда для k = 10, 20, 30.

14

Создать функцию вычисления суммы для любых k и x

 

= sin + sin2 + sin3 + + sin

 

Организовать вычисление ряда для любого угла x

 

градусах, вводить с клавиатуры) и k = 5, 10, 15.

15

Создать функцию вычисления суммы для любых k и x

= cos + 2 + 3 + +

Организовать вычисление ряда для любого угла x (в градусах, вводить с клавиатуры) и k = 5, 7, 9, 11.

16 Создать функцию вычисления полинома для любых x и n

P = 1 + + 2 + 3 +

Найти сумму его значений для x = -0.5; 0.5; 1.5 и n = 12.

17 Создать функцию вычисления радиуса описанной окружности для равностороннего треугольника по длине стороны.

Найти среднее арифметическое радиусов описанной окружности для 7 равносторонних треугольников (длины сторон вводить с клавиатуры).

18Создать функцию, определяющую, возможен ли треугольник с заданными длинами сторон.

Организовать вызов этой функции для 4 разных наборов длин (вводить их с клавиатуры).

19Создать функцию нахождения длины отрезка по координатам его начала и конца.

Найти сумму длин 3 отрезков (координаты вводить с клавиатуры).

20Создать функцию вычисления объема конуса по радиусу основания и высоте.

Найти сумму объемов 3 конусов (радиусы и высоты вводить с клавиатуры).

21Создать функцию вычисления объема шара по радиусу. Найти среднее арифметическое объемов 5 шаров (радиусы вводить с клавиатуры).

36

22Создать функцию вычисления суммы n первых членов геометрической прогрессии, заданной первым членом b1 и знаменателем q.

Найти максимальную из 4 сумм 5 членов геометрических прогрессий (b1 и q вводить с клавиатуры).

23Создать функцию вычисления объема усеченного конуса по высоте и радиусам нижнего и верхнего оснований. Найти сумму объемов 3 конусов (высоты и радиусы вводить с клавиатуры).

24Создать функцию вычисления суммы всех четных чисел из заданного диапазона.

Найти среднее арифметическое таких сумм для чисел от 2 до 12, от 8 до 20 и от 10 до 30.

25Создать функцию вычисления произведения всех нечетных чисел из заданного диапазона.

Найти сумму таких произведений для чисел от 3 до 13, от

11 до 17 и от 21 до 29.

Лабораторная работа №8 Создание функций для численного интегрирования.

Численное интегрирование тремя методами (прямоугольников, трапеций, Симпсона).

Задание:

1.Создать три функции для приближенного вычисления определенного интеграла (по методу прямоугольников, по методу трапеций и по методу Симпсона). Все функции оформить по одному шаблону (вид примитива един): возвращаемое значение – результат расчета, три формальных параметра – начало, конец интеграла, число разбиений заданного интервала.

2.Создать главную функцию main(), где организовать:

-ввод начала, конца интервала и числа разбиений

-ввод признака (по какому методу производить расчет)

-анализ признака и вызов необходимой функции

-печать результата

3.Вычислить точное значение интеграла и сравнить его с результатами функций.

37

Формулы расчета:

Метод прямоугольников

n

f (xi ), где x [a;b]

i 1

Метод трапеций:

 

n

 

f (xi ) f (xi )

 

 

 

 

 

 

 

 

 

,

где x [a;b]

 

 

2

 

 

 

i 1

 

 

 

 

 

 

Формула Симпсона:

 

 

 

 

 

n

 

 

 

) 4 f (xi

 

) f (xi

 

 

 

6

f (xi

2

) ,

г де x [a;b]

i 1

 

 

 

 

 

 

 

− ∆= n

y

f(x)

f(b)

f(x1)

f(a)

a x1 x2 x3

xn-2xn-1b

x

 

38

Варианты интегралов

13

 

 

 

 

 

 

 

7

 

 

 

 

 

 

 

№ 1.

(

X 3 X ) dX

№ 13. (

X 2 X ) dX

6

 

 

 

 

 

 

 

 

2

 

 

 

 

 

 

 

№ 2. 9

(5 X 2

3 X ) dX

№ 14. 7

(4 X 2 5 X ) dX

1

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

№ 3. 3

(3 X 2

X 17) dX

№ 15. 5

( X 2 X 12) dX

3

 

 

 

 

 

 

 

2

 

 

 

 

 

15

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

№ 4.

(3 X 2

5 X ) dX

№ 16. (6 X 2 2 X ) dX

10

 

 

 

 

 

 

 

1

 

 

 

 

 

 

 

№ 5. 3

 

 

 

 

 

 

 

 

№ 17. 8

 

 

 

 

 

 

 

(

X 1 2 X ) dX

(

 

X 1 5 X ) dX

1

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

№ 6. 9

 

 

 

 

 

 

 

 

№ 18. 9

 

 

 

 

 

 

 

(

X 2 X 2 ) dX

(

 

X 3 X 2 ) dX

4

 

 

 

 

 

 

 

 

4

 

 

 

 

 

 

 

14

 

 

 

 

 

 

 

11

 

 

 

 

 

 

№ 7.

(

X 2 X ) dX

№ 19.

(

 

X 2 X ) dX

7

 

 

 

 

 

 

 

 

6

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

10

 

 

 

 

 

 

№ 8.

(2 X 2

5 X ) dX

№ 20.

(3 X 2 X 3) dX

7

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

 

10

 

 

 

 

 

 

№ 9. ( X 2 X 5) dX

№ 21.

( X 2 4 X 5) dX

0

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

15

 

 

 

 

 

 

№ 10.

(2 X 3 X ) dX

№ 22.

(2 X 3 3 X ) dX

 

3

 

 

 

 

 

 

 

5

 

 

 

 

 

 

 

10

 

 

 

 

 

 

 

26

 

 

 

 

 

 

№ 11.

(

 

X 1 4 X ) dX

№ 23.

(

 

X 1 2 X ) dX

 

5

 

 

 

 

 

 

 

17

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

16

 

 

 

 

 

 

№ 12. (

 

X 3 X 2 ) dX

№ 24.

(

 

X 9 X 2 ) dX

 

4

 

 

 

 

 

 

 

9

 

 

 

 

 

 

 

39

2.1. Передача массивов в качестве параметров

Напомним, что понятие массива тесно связано с понятием указателя. Поэтому в языке Си массивы не передаются в функции, передается только указатели на них. Следует запомнить:

1.Неважно, как описана передача массива в функцию, всегда будет передан только указатель на массив.

2.Раз передан указатель, то все изменения, происходящие в массиве внутри функции, изменяют и исходный массив.

Существует несколько способов описания передачи массива. Рассмотрим способ, основанный на том, что указатель на массив равнозначен указателю на элемент того же типа:

- одномерные массивы

void zapl_m(int *, int); // прототип функции zapl_m

void zapl_m(int *x, int n) // определение функции zapl_m

{

for (int i=0; i<n; i++) x[i]=i+1;

}

void main(void) // функция main с 3 вызовами функции zapl_m

{

int a[10], b[10], c[100];

zapl_m(a, 10); // вызов функции zapl_m для массива a zapl_m(b, 10); // вызов функции zapl_m для массива b zapl_m(c, 100); // вызов функции zapl_m для массива c

}

Передачу массива можно оформить и так zapl_m(&a[0], 10); - двумерные массивы

void pech_m(int *, int, int); // прототип функции pech_m

40

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]