- •Министерство образования и науки Республики Казахстан
- •Кафедра программного обеспечения
- •Языки программирования
- •Лабораторная работа № 1
- •Краткая теория
- •Задания
- •Лабораторная работа № 2
- •Краткая теория
- •Задания
- •Лабораторная работа №3
- •Краткая теория
- •Задания
- •Лабораторная работа № 4
- •Краткая теория
- •Задания
- •Лабораторная работа № 5
- •Краткая теория
- •Задания
- •Лабораторная работа № 6
- •Краткая теория
- •Объединения
- •Задания
- •Лабораторная работа № 7
- •Краткая теория
- •Задания
- •Лабораторная работа № 8
- •Краткая теория
- •Задания
Задания
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 |
max=5
max=5 : 5>1 - истинно
max=5 : 5>8 - ложь следовательно max=8
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. При этом должны выполниться последовательно три следующих присваивания:
x=a[i];
a[i]=a[n-1];
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]);
