Задание для самостоятельной работы индивидуальное



1. Составить алгоритм решения задачи.

2. Разработать программу, осуществляющую ввод исходных данных, необходимые вычисления и вывод результатов. Ввод и вывод сопроводить комментариями.

3. Разработать несколько тестовых наборов исходных данных и испытать программу на компьютере.

4. Составить отчет по практической работе.

Варианты заданий

1. Разработать программу, которая вводит 4 целых числаa, b, c, d и находит среди них пару чисел с минимальной по модулю разностью.

2. Разработать программу, которая среди чисел 1, 1+1/2, 1+1/2+1/3,…находит первое, большее числа n(nвводится).

3. Разработать программу, которая вводит 4 целых числаa, b, c, d(положительных и отрицательных) и находит среди них минимальное из нечетных отрицательных чисел.

4. Последовательность вещественных чисел образуется следующим образом:

а0 = 1/1, а1=2/1,…, аi=(Числитель аi-1 + Числитель аi-2) / (Знаменатель аi-1 + Знаменатель аi-2)

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

n – аn-1| <= 0.001.

5. Разработать программу, которая для введенного значения x >1 вычисляет  по итерационной формуле

с заданной погрешностью ξ с начальным приближением y0 = x. Сравнить полученное значение с результатом использования стандартной функции. Оценить требуемое число итераций.

6. Общий член последовательности вещественных чисел образуется по формуле: yi = 1/2*(yi-1 + x/yi-1-1), i= 1, 2,…

Разработать программу, которая находит первый член yn, для которого выполняется неравенство |yn2 – yn-12| <e(eвводится).

7. Разработать программу, которая вводит 4 целых числа a, b, c, dи находит среди них пару чисел с максимальной суммой.

8. Разработать программу, которая вычисляет сosx по формуле:

сos x = - (p/2 - x)/2! + (p/2 - x)4/4! - (p/2 - x)6/6! + (p/2 - x)8/8! - …

Вычисления закончить, когда очередной член будет изменять сумму на величину меньше чем 10–3.

9. Разработать программу, которая вводит 4 целых числа a, b, c, d(положительных и отрицательных) и находит среди них максимальное из четных положительных чисел.

10. Разработать программу, которая вычисляет сумму

1! + 2! + 3! + ….+ n! + …

Вычисления закончить, когда очередной член последовательности станет больше 1000.

11. Разработать программу, которая вводит 4 целых числаa, b, c, d и находит среди них двойку чисел с максимальным произведением.

12. Последовательность Фибоначчи образуется так: первый и второй член последовательности равны 1, каждый следующий равен сумме двух предыдущих. Разработать программу, которая находит первое число в последовательности Фибоначчи, большее n(nвводится).

13. Разработать программу, которая вычисляет ех по формуле:

ех= 1 + x + x2/2! + x3/ 3! + … +xn/n! + ….

Вычисления закончить, когда очередной член будет изменять сумму на величину меньше чем 10–3.

14. Последовательность Фибоначчи образуется так: первый и второй член последовательности равны 1, каждый следующий равен сумме двух предыдущих. Найти сумму всех чисел в последовательности Фибоначчи, которые не превосходят 1000.

15. Разработать программу, которая вычисляет сумму

x/1! + x/2! + x/3! + ….+ x/n! + …

Вычисления закончить, когда очередной член последовательности станет меньше 0.001.

16. Составьте программу, которая определяет, может ли быть построен треугольник по введенным длинам сторон a,b,c и, если треугольник можно построить, определяет его тип (прямоугольный, тупоугольный или остроугольный).

17. Разработать программу, которая вычисляет сумму

1 + x/1! + x2/2! + x3/3! + ….+ xn/n! + …

Вычисления закончить, когда разность между очередным членом и предыдущим членом последовательности станет меньше 0.001.

18. Разработать программу, которая вычисляет sinx по формуле:

sin x= x - x3/ 3! + x5/5! - … +xn/n! + …

Вычисления закончить, когда очередной член будет изменять сумму на величину меньше чем 10–3.

19. Разработать программу, которая вводит вещественное число а и находит такое наименьшее n, при котором выполняется условие:

1+1/2+1/3+ … +1/n>a.

20. Разработать программу, которая вводит 4 целых числаa, b, c, d(положительных и отрицательных) и находит среди них все пары отрицательных чисел.

21. Разработать программу, которая вводит 4 целых числаa, b, c, dи находит среди них тройку чисел с минимальной суммой.

 

Практическая работа № 6: Числовые массивы.

Массив – объединенный под одним именем упорядоченный набор однотипных данных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется с помощью одного или нескольких индексов.

Индекс массива – целое число, указывающее на конкретный элемент массива.

В соответствие с количеством используемых индексов массивы могут быть одномерными (векторами размера ), двухмерными (матрицами размера ) или многомерными (размера ).

Общая форма объявления одномерного массива:

тип имя_переменной[размер]

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

Пример объявления целочисленного одномерного массива из 10 элементов:

int m[10];

Объем памяти, необходимый для хранения массива, зависитот его типа и размера. Размер одномерного массива в байтах вычисляется по формуле:

всего_байт = sizeof(тип) * количество_элементов

Для доступа к конкретному элементу массива его индекс (порядковый номер) указывается в квадратных скобках после имени массива. При этом отсчет начинается с нуля, т.е. для массива размерность nиндекс последнего элемента будет равен n-1.Например, оператор,приведенный ниже, присваивает четвертому по порядку элементу массиваm значение 5.

m[3] = 5;

В языке C не предусмотрена проверка выхода индекса массива за пределы допустимого диапазона. Иными словами, во времявыполнения программы можно по ошибке выйти за пределы памяти, отведенной для массива, и записать данные в соседние ячейки,в которых могут храниться другие переменные и даже программный код. Ответственность за предотвращение подобных ошибоклежит на программисте.Например, фрагмент программы, приведенный ниже, будетскомпилирован без ошибок, однако результат его работы непредсказуем:

int count[10], i;

/* Выход индекса массива за пределы диапазона */

i = count[10];

В языке C допускается инициализация массивов при их объявлении. Общий вид инициализации массива имеет следующий вид:

тип имя_массива[размер1]...[размерN] = {список_значений};

Список_значений представляет собой список констант, разделенных запятыми. Тип констант должен быть совместимым с типом массива. Первая константа присваивается первому элементумассива, вторая – второму и т.д.

В следующем примере целочисленный массив, состоящий из 5 элементов, инициализируется числами от 1 до 5:

int i[5] = {1, 2, 3, 4, 5};

Здесь элементу i[0] присваивается значение 1, а элементуi[4] – число 5.

Если количество инициализирующих значений меньше заданной размерности массива, все элементы для которых не указаны значения будут инициализированы нулями. Например, в следующем массиве первые три элемента получать начальные значения 1, 2 и 3 соответственно, а оставшиеся два будут обнулены.

int i[5] = {1, 2, 3};

Нет необходимости указывать размер полностью инициализированного при объявлении массива, компилятор самостоятельно вычислит его по количеству инициализирующих значений. Такой массив называют безразмерным. Например, следующее объявление определит массив размерность 4.

int i[] = {2, 4, 6, 8};

Даже если два массива имеют один и тот же тип и размерность, невозможно проверить их на равенство. Более того, невозможно напрямую выполнить присваивание одного массива другому. Вместо этого придется присваивать каждый элемент одного массива соответствующему элементу другого.

Как правило, для обработки массивов используется цикл for. В следующем примере одномерный массив из 10 вещественных чисел в цикле заполняется случайными числами, равномерно распределенными в диапазоне [1, 100].

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<time.h>

 

#define Left 1

#define Right 100

#define N 10

 

int main(void)

{

int i;

floatA[N];

 

srand((unsigned)time(NULL)); // Задание исходного случайного числа для rand() равным системному времени   

// Заполнение массива случайными числами из заданного интервала

for (i = 0; i < N; i++)

       A[i] = (float) rand() / RAND_MAX * (Right - Left) + Left;

 

// Вывод на экран элементов массива

printf("Вектор случайных чисел из интервала [%d, %d]:\n", Left, Right);

for (i = 0; i < N; i++)

       printf("%2d)%7.2f\n", i + 1, A[i]);

 

_getch();

return 0;

}

В программе использованы директивы препроцессора для задания левой границы (#defineLeft 1), правой границы (#defineRight 100) и размера одномерного массива (#defineN 10). Включены дополнительные библиотеки: time.h – для обращения к функциям системного времени, stdlib.h – для обращения к функциям генерации псевдослучайных чисел.

Общий синтаксис записи директивы #define при определении символической константы:

 #define имя_макроса заменяемая_строка

#define используется для организации замены строки по всему файлу, где она указана. Другими словами, #define приводит к тому, что компилятор (препроцессор) проходит по всему файлу и делает замену имя_макроса на заменяемая_строка.

В языке C массивы могут иметь несколько размерностей.Общий вид объявления многомерного массива таков:

тип имя[Размер1][Размер2][Размер3]...[РазмерN]

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

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

Для многомерных массивов общий размер в байтах вычисляется по формуле

всего_байт = sizeof(тип) * размер_1 * зазмер_2 *…* размер_N

Наиболее простым и часто используемым многомерным массивом является двухмерный. По существу, двухмерный массив – это массив одномерных массивов. Объявление двухмерногомассива m, состоящего из 10 строк и 20 столбцов, выглядит следующим образом:

int i[10][20];

Многомерные массивы инициализируются аналогично одномерным. Рассмотрим пример инициализации массива sqrs числами от 1 до 5 в первой строке и их квадратами во второй:

int sqrs[10][2] = { 1, 2, 3, 4, 5, 1, 4, 9, 16, 25 };

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

int sqrs[5][2] = {{1, 2, 3, 4, 5}, {1, 4, 9, 16, 25}};

Если при группировке данных указаны не все начальныезначения, оставшиеся элементы группы автоматически заполняются нулями.

Инициализировать можно и безразмерные многомерные массивы. Для этого требуется указать все размеры, кроме первого(остальные размеры нужны для того, чтобы компилятор правильновыполнял индексацию массива). Это позволяет создавать таблицыпеременной длины, поскольку компилятор автоматически размещает их в памяти. Например, объявление массива sqrs как безразмерного выглядит так:

int sqrs[][2] = {{1, 2, 3, 4, 5}, {1, 4, 9, 16, 25}};

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

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<time.h>

 

#define Left 1

#define Right 100

#define N 10

#define M 10

 

int main(void)

{

int i, j, min_i, min_j;

intA[N][M];

 

srand((unsigned)time(NULL));

// Заполнение матрицы случайными числами из заданного интервала

for (i = 0; i < N; i++)

       for (j = 0; j < M; j++)

       A[i][j] = (rand() % Right) + Left;

 

// Вывод на экран элементов матрицы и определение первого минимального элемента

min_i = 0; min_j = 0;

printf("Исходнаяматрица:\n");

for (i = 0; i < N; i++)

{

       for (j = 0; j < M; j++)

       {

             printf("%5d", A[i][j]);

             if (A[i][j] < A[min_i][min_j])

             {

                   min_i = i; min_j = j;

             }

       }

       putchar('\n');

}

printf("Первыйминимальныйэлементматрицы: A[%d][%d] = %d", min_i+1, min_j+1, A[min_i][min_j]);

 

_getch();

return 0;

}

Задания для самостоятельной работы:

1. Найти среднее арифметическое элементов вектора вещественных чисел.

2. Задана квадратная матрица. Получить транспонированную матрицу, т.е. матрицу, где столбцы и строки меняются местами.


Дата добавления: 2018-04-05; просмотров: 704; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!