Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КОНТРОЛЬНАЯ_РАБОТА_Лабораторный практикум Алгор...doc
Скачиваний:
2
Добавлен:
01.05.2025
Размер:
521.22 Кб
Скачать

Задания

11. Дано натуральное число n. Подсчитать произведение четных цифр в нем.

12. Даны натуральные числа n, m. Получить сумму m первых цифр числа n.

13. Дано натуральное число n. Получить новое число, удалив из данного все цифры "2".

14. Дано натуральное число n. Выяснить, можно ли представить n! в виде произведения трех последовательных целых чисел.

15. Простым называется число, которое делится без остатка только на единицу и на само себя. Даны числа n и m. В натуральном ряду, начиная с числа n, найти m ближайших простых чисел и получить их сумму.

16. Найти все несократимые дроби, заключенные между 0 и 1, знаменатели которых не превышают 7 (дробь задается двумя натуральными числами - числителем и знаменателем).

17. Дано натуральное число n. Найти наибольшую цифру числа.

18 *. Назовем натуральное число палиндромом, если его запись читается одинаково с начала и с конца (например 4884, 121, 1). Найти все меньшие 100 натуральные числа, которые при возведении в квадрат дают палиндром.

19 *. Дано натуральное число n. Верно ли, что оно содержит ровно три одинаковые цифры?

20 *. Дано натуральное число n. Оставить в этом числе только те цифры, которые не нарушат упорядоченность цифр по возрастанию.

Например: 1 7 2 3 9 - 1 2 3

7 6 5 9 - 7 9

Лабораторная работа №3

Дисциплина: Языки программирования

Тема: Линейные массивы

Цель: изучить приведенные примеры, уметь решать все задачи с линейными массивами

Краткая теория

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

  • при объявлении массива четко определяется количество элементов, под которые будет распределена память;

  • вводится переменная, которая будет хранить действительную размерность, не большую заданной в определении массива;

  • элементы массива вводятся последовательно от первого до последнего с использованием цикла, причем индекс первого элемента будет иметь значение 0.

Пример:

int a [10]; // массив из 10 целых элементов

int n; // размерность массива

printf("\n введите размерность массива ");

scanf("%d",&n);

printf("\n введите элементы массива в строку\n");

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

scanf("%d",&a[i]);

Каждый элемент массива характеризуется своим значением и месторасположением. В связи с этим для массивов ставятся задачи следующих типов:

  • поиск элемента с определенным значением;

  • перестановки элементов в массиве;

  • удаление элементов или включение новых элементов в массив;

  • сортировки массивов.

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

1.

Дан массив целых чисел размерности n. Найти максимальный элемент массива.

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

Машина не в состоянии из заданного набора чисел сразу выделить большее. Но у нас имеется возможность сравнивать два числа операцией <.

Сравним первый и второй элементы и определим большее из них значение, которое станем сравнивать с третьим элементом, и так далее. В результате сравнения последовательно со всеми элементами массива и будет выделен максимальный элемент.

Чтобы первый шаг не записывать особым образом, первоначально принудительно будем считать максимальным первый элемент массива. А сравнивать его начнем сразу со вторым элементом.

Пример:

5

1

8

3

  1. max=5

  2. max=5 : 5>1 - истинно

  3. max=5 : 5>8 - ложь следовательно max=8

  4. max=8 : 8>3 - истинно

В ходе решения менялось только значение максимума, а сам массив оставался неизменным.

#include <stdio.h>

main()

{

int a [10]; // исходный массив из 10 целых элементов

int n; // размерность массива

int max; // максимальное значение

int i;

printf("\n введите размерность массива ");

scanf("%d",&n);

printf("\n введите элементы массива в строку\n");

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

scanf("%d",&a[i]);

max=a[0];

for (i=1;i<n;i++)

if (max<a[i])

max=a[i];

printf("\n максимальный элемент = %d",max);

}

2.

Дан массив целых положительных и отрицательных чисел из n элементов. Поменять первый отрицательный элемент с последним элементом массива.

В этой задаче, в процессе ее решения меняется сам массив. Поэтому он будет являться и исходными данными и результатом одновременно.

Для того чтобы поменять местами два элемента, мы должны точно определить их индексы.

Очевидно, что последний элемент массива будет иметь индекс n-1.

Чтобы определить первый отрицательный элемент массива, необходимо идти от первого элемента массива к последующим до тех пор, пока эти элементы неотрицательны. Когда это условие будет нарушено некоторым элементом a[i], тогда можно сказать, что i - это и есть индекс требуемого элемента.

i=0;

while (a[i]>=0)

i++;

Чтобы поменять элементы с местами i и (n-1) потребуется дополнительная переменная x. При этом должны выполниться последовательно три следующих присваивания:

  1. x=a[i];

  2. a[i]=a[n-1];

  3. a[n-1]=x;

Программа примет следующий вид:

#include <stdio.h>

main()

{

int a [10]; // исходный массив из 10 целых элементов

int n; // размерность массива

int x, i;

printf("\n введите размерность массива ");

scanf("%d",&n);

printf("\n введите элементы массива в строку");

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

scanf("%d",&a[i]);

i=0;

while(a[i]>=0)

i++;

x=a[i];

a[i]=a[n-1];

a[n-1]=x;

printf("\n результат перестановки \n");

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

printf("%d ",a[i]);

}

3.

Дан массив из n действительных чисел. Удалить минимальный элемент массива.

Результатом задачи будет исходный массив, измененный в соответствии с условиями задачи.

Поиск минимального элемента очень похож на поиск максимального элемента. Однако, сейчас для нас важно не столько его значение, сколько его местонахождение в массиве.

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

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

min=a[0];

k=0;

for (i=1;i<n;i++)

if (a[i]<min)

{

min=a[i];

k=i;

}

Как удалить элемент из массива, если он расположен на k-ом месте? Мы не можем оставить «дырку» в массиве. Единственный способ - сместить все следующие за k-ым элементы таким образом, чтобы на k-ое место сдвинулся (k+1)-ый элемент, на (k+1) место - (k+2)-ой элемент, ..., на (n-1)-ое место - n-ый элемент массива.

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

#include <stdio.h>

main()

{

float a [10]; // исходный массив из 10 действительных эл-тов

int n; // размерность массива

float min; //минимальный элемент

int k; // индекс минимального элемента

int i;

printf("\n введите размерность массива ");

scanf("%d",&n);

printf("\n введите элементы массива в строку\n");

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

scanf("%f",&a[i]);

min=a[0];

k=0;

for (i=1;i<n;i++)

if (a[i]<min)

{

min=a[i];

k=i;

}

for (i=k;i<n-1;i++)

a[i]=a[i+1];

n--;

printf("\n результат \n");

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

printf("%f ",a[i]);

}

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

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

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

int n=5;

int a[10]={1,10,8,4,5};

замените на

int n;

int a[10];

...

printf("\n введите размерность массива ");

scanf("%d",&n);

printf("\n введите элементы массива в строку");

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

scanf("%d",&a[i]);