Задачи по программированию на СС++. Учебно-методическое пособие
.pdf18.С клавиатуры вводится последовательность вещественных чисел a1,a2,...,aN . Определите квадрат суммы положительных членов этой последовательности.
19.Даны два натуральных числа m и n – числитель и зна-
менатель дроби m
n . Требуется сократить дробь, насколько это возможно.
n |
|
|
|
|
1 |
|
20. Дано n. Вычислить p 1 |
|
|
|
|
|
|
|
3 |
5 |
||||
k 3 |
|
|
k |
|
|
|
Тема 7. Одномерные массивы
Для работы с множествами однотипных элементов в Си введено понятие массив. Такие множества элементов обозначаются какими-то именами, а для идентификации их отдельных элементов используются индексы. Такой подход позволяет сокращать объем текста программ и работать с массивами посредством операторов цикла.
Пример 1. В одномерном массиве из 100 элементов вещественного типа определить максимальное значение. Значения элементов массива вводим с клавиатуры. Наибольшее значение определяем с помощью стандартного алгоритма. Вначале полагаем (временно), что максимальным элементом является элемент с нулевым индексом, т.е. первый элемент массива. Затем в цикле, сопоставляя его значение с другими, проверяем и уточняем значение максимального элемента.
#include <stdio.h> int main(){
float a[100]; //объявление одномерного //массива размерности 100
int i,n; float max;
printf("\nВведите элементы массива\n"); for(i=0;i<100;i=i+1)
{printf("\nВведите элемент a[%d] ",i); scanf("%f",&a[i]);//чтение элементов
31
//массива с клавиатуры
};
printf("\nИсходный массив \n"); for(i=0;i<100;i++)
printf("%f ",a[i]);//вывод элементов
//массива на экран
max=a[0];
for(i=1;i<100;i++) if(a[i]>max) max=a[i];
printf("\nmax=%f",max); return 0;
}
Пример 2. Программа вычисляет среднее и дисперсию для n значений элементов одномерного массива, вводимых с клавиатуры. Первоначально резервируется место в памяти для 100 элементов. Фактическое количество элементов n задается в цикле while.Причем условие продолжения цикла всегда истинное. Выход же из бесконечного цикла осуществляется с помощью оператора break .
#include<stdio.h> int main()
{float x[100],s,a,b,d,r; int i,j,n;
while(1)
{
printf("\nВведите n:\n");scanf("%d",&n); if(n>0 && n <= 100) break; printf("Ошибочное значение n!\n");
}
printf("Введите элементы массива x\n"); for(b=0.0,i=0;i<n;i++) {printf("x[%d]=",i);scanf("%f",&x[i]);
b+=x[i];
}
b/=n;
printf("\nb=%f \n",b); //Вывод среднего for(j=0,d=0.0;j<n;j++)
32
{a=x[j]-b; d+=a*a;}
d/=n;
printf("\nd=%f \n",d); //Вывод дисперсии return 1;
}
Пример 3. Ещё одна разновидность обработки одномерных массивов – сортировка, т.е. упорядочение их значений в некотором порядке. Программа данного примера сортирует элементы одномерного массива в порядке возрастания. Реализован алгоритм прямого упорядочения, без использования вспомогательного массива.
#include<stdio.h> int main()
{double a[100],h; int i,j,n; while(1)
{
printf("\nВведите n:\n");scanf("%d",&n); if(n>0 && n <= 100) break; printf("Ошибочное значение n!\n");
}
printf("Введите элементы массива a\n"); for(i=0;i<n;i++) {printf("a[%d]=",i);scanf("%lf",&a[i]);
}
for(i=0;i<n-1;i++) for(j=i+1;j<n;j++) if(a[i]>a[j])
{h=a[i]; a[i]=a[j]; a[j]=h;
}
printf("Упорядоченный массив:\n"); for(i=0;i<n;i++)
printf("a[%d]=%lf\n",i,a[i]); return 1;
}
33
Задачи
1.В массиве из n чисел найти наименьший элемент и его индекс в массиве.
2.В массиве из n чисел найти первый отрицательный элемент и его индекс в массиве.
3.В массиве из n чисел найти индекс первого нулевого элемента.
4.В массиве из n чисел есть хотя бы один отрицательный элемент. Вычислить сумму элементов массива до первого нуля.
5.В массиве из n чисел есть положительные и отрицательные элементы. Подсчитать количество положительных и отрицательных элементов массива.
6.Дан массив X из n чисел. Воспользоваться вспомогательным массивом такой же размерности, сдвинуть элементы массива X на заданное число K позиций в влево.
7.Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве нечетные числа в порядке возрастания их индексов, а также их количество K.
8.Дан целочисленный массив размера N. Вывести все содержащиеся в данном массиве четные числа в порядке убывания их индексов, а также их количество K.
9.Дан целочисленный массив размера N. Вывести вначале все содержащиеся в данном массиве четные числа в порядке возрастания их индексов, а затем – все нечетные числа в порядке убывания их индексов.
10.Дан массив A размера N и целое число K (1 K N ). Вывести элементы массива с порядковыми номерами, кратными K: AK, A2·K, A3·K, … .
11.Дан массив A размера N (N – четное число). Вывести его элементы с четными номерами в порядке возрастания номеров: A0, A2, A4, A6, …, AN. Условный оператор не использовать.
34
12.Дан массив A размера N. Вывести вначале его элементы
счетными номерами (в порядке возрастания номеров), а затем – элементы с нечетными номерами (также в порядке возрастания номеров): A0, A2, A4, A6, …, A1, A3, A5,…. Условный оператор не использовать.
13.Дан массив A размера N. Вывести вначале его элементы
снечетными номерами в порядке возрастания номеров, а затем – элементы с четными номерами в порядке убывания номеров: A1, A3, A5,…, A6, A4, A2, A0. Условный оператор не использовать.
14.Дан массив A размера N. Вывести его элементы в следующем порядке: A0, AN–1, A1, AN–2, A2, AN–3,….
15.Включить заданное число D в массив A(N), упорядо-
ченный по возрастанию, с сохранением упорядоченности.
16.Определить, имеется ли в заданном целочисленном массиве A(N) хотя бы одна пара совпадающих по значению чисел.
17.Дан массив A ненулевых целых чисел размера N. Вывести значение первого из тех его элементов AK, которые удовлетворяют неравенству AK < AN. Если таких элементов нет, то вывести 0.
18.Дан массив размера N. Найти минимальный из его локальных максимумов (локальный максимум – это элемент, который больше любого из своих соседей), либо сообщение, что локальных максимумов нет.
19.Дан целочисленный массив A размера N. Вывести по-
рядковый номер последнего из тех его элементов AK,
которые удовлетворяют |
двойному неравенству |
A1 < AK < AN. Если таких элементов нет, то вывести 0. |
|
20. Дан массив размера N и |
целые числа K и L |
(1 K L N ). Найти сумму элементов массива с номерами от K до L включительно.
35
21. |
Дан |
массив |
размера |
N и целые числа K и L |
||
|
(1 |
K L N ). Найти |
среднее арифметическое |
эле- |
||
|
ментов массива с номерами от K до L включительно. |
|||||
22. |
Дан |
массив |
размера |
N и целые числа K |
и L |
|
|
(1 |
K L N ). Найти сумму всех элементов массива, |
||||
|
кроме элементов с номерами от K до L включительно. |
|||||
23. |
Дан |
массив |
размера |
N и целые числа K и L |
||
|
(1 |
K L N ). Найти |
среднее арифметическое |
всех |
||
элементов массива, кроме элементов с номерами от K до L включительно.
24.Дан целочисленный массив размера N, не содержащий одинаковых чисел. Проверить, образуют ли его элементы арифметическую прогрессию. Если образуют, то вывести разность прогрессии, если нет – вывести 0.
25.Дан массив ненулевых целых чисел размера N. Проверить, образуют ли его элементы геометрическую прогрессию. Если образуют, то вывести знаменатель прогрессии, если нет – вывести 0.
26.Дан целочисленный массив размера N. Проверить, чередуются ли в нем четные и нечетные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
27.Дан массив ненулевых целых чисел размера N. Проверить, чередуются ли в нем положительные и отрицательные числа. Если чередуются, то вывести 0, если нет, то вывести порядковый номер первого элемента, нарушающего закономерность.
28.Дан массив A размера N. Найти минимальный элемент из его элементов с четными номерами: A0, A2, A4, A6, …
29.Дан массив A размера N. Найти максимальный элемент из его элементов с нечетными номерами: A1, A3, A5, … .
30.Дан массив размера N. Найти номера тех элементов массива, которые больше своего правого соседа, и ко-
36
личество таких элементов. Найденные номера выводить
в порядке их возрастания.
31.Дан массив размера N. Найти номера тех элементов массива, которые больше своего левого соседа, и количество таких элементов. Найденные номера выводить в порядке их убывания.
32.Дан массив размера N. Найти номер его первого локального минимума (локальный минимум – это элемент, который меньше любого из своих соседей), либо сообщение, что локальных минимумов нет.
33.Дан массив размера N. Найти номер его последнего локального максимума (локальный максимум – это элемент, который больше любого из своих соседей), либо сообщение, что локальных максимумов нет.
34.Дан массив размера N. Найти максимальный из его локальных минимумов (локальный минимум – это элемент, который меньше любого из своих соседей), либо сообщение, что локальных минимумов нет.
35.Дан массив размера N. Найти максимальный из его элементов, не являющихся ни локальным минимумом, ни локальным максимумом (локальный минимум – это элемент, который меньше любого из своих соседей; локальный максимум – это элемент, который больше любого из своих соседей). Если таких элементов в массиве нет, то вывести 0 (как вещественное число).
36.Дан массив размера N. Найти количество участков, на которых его элементы возрастают.
37.Дан массив размера N. Найти количество участков, на которых его элементы убывают.
38.Дан массив размера N. Найти количество его промежутков монотонности (то есть участков, на которых его элементы возрастают или убывают).
39.Дано число R и массив A размера N. Найти элемент массива, который наиболее близок к числу R (то есть
37
такой элемент AK, для которого величина |AK – R| является минимальной).
40.Дан массив размера N. Найти два соседних элемента, сумма которых максимальна, и вывести эти элементы в порядке возрастания их индексов.
41.Дано число R и массив размера N. Найти два соседних элемента массива, сумма которых наиболее близка к числу R, и вывести эти элементы в порядке возрастания их индексов (то есть такой элемент AK, для которого величина |AK – R| является минимальной).
42.Дан целочисленный массив размера N, все элементы которого упорядочены (по возрастанию или по убыванию). Найти количество различных элементов в данном массиве.
43.Дан целочисленный массив размера N, содержащий ровно два одинаковых элемента. Найти номера одинаковых элементов и вывести эти номера в порядке возрастания.
44.Дан массив размера N. Найти номера двух ближайших элементов из этого массива (то есть элементов с наименьшим модулем разности) и вывести эти номера в порядке возрастания.
45.Дано число R и массив размера N. Найти два различных элемента массива, сумма которых наиболее близка к числу R, и вывести эти элементы в порядке возрастания их индексов (то есть такой элемент AK, для которого величина |AK – R| является минимальной).
46.Дан целочисленный массив размера N. Найти количество различных элементов в данном массиве.
47.Дан целочисленный массив размера N. Найти максимальное количество его одинаковых элементов.
48.Дан массив. Образовать новый массив, состоящий из элементов исходного, заканчивающихся на цифру k.
49.Дан целочисленный массив размера N. Найти количество противоположных элементов в данном массиве.
38
50.Упорядочить одномерный массив в порядке возрастания методом простого выбора.
51.Упорядочить одномерный массив в порядке убывания методом пузырька.
52.Даны два 10-элементных массива a и b. Вычислить
a0 b9 a1 b8 a2 b7 a9 b0
53.Даны n, массив a из n элементов. Переставить элементы массива таким образом, чтобы они шли в обратном порядке. Второго массива не использовать.
54.Даны n, целочисленный массив А из n элементов. В массив В из n элементов поместить сначала все четные элементы массива А, а затем все нечетные элементы массива А.
55.Дан массив А из 12 элементов. В массив В из 12 элементов поместить сначала все отрицательные элементы массива А, а затем все неотрицательные элементы массива А.
56.Даны натуральное число n, массив целых чисел А из n элементов. Определить, образуют ли элементы массива неубывающую последовательность.
57.Даны n точек плоскости (хi, yi). Вывести номера тех точек, которые попадают в круг радиуса 2 с центром в начале координат.
58.Даны n точек плоскости (хi, yi). Найти радиус наименьшего круга с центром в начале координат, содержащего все эти точки.
59.Дан массив x из 55 элементов. Вычислить
x0 x1 x2 x3 x4 x5 x45 x46 x54
Тема 8. Двумерные массивы (матрицы)
Двумерный массив – это массив данных имеющий двойную индексацию. Такой тип данных применяют для обработки
39
табличных данных, таких как числовые матрицы. За номера строк матрицы отвечает первый индекс массива, а за столбцы
– второй, причем значения индексов начинаются с нулевых значений.
Пример 1. Вычислить суммы элементов столбцов целочисленной матрицы A(N,M ). Первоначально объем памяти ре-
зервируется для матрицы размерности Lim Lim. Причем значение константы Lim задается с помощью директивы #define. Фактическая размерность матрицы читается с клавиатуры с помощью циклов, в которых проверяется корректность вводимых значений переменных n и m. После ввода с клавиатуры значений матрицы осуществляется её вывод на экран в табличном виде, т.е. построчно. После вывода каждой строки матрицы курсор переводится на следующую строку экрана.
#include <stdio.h> #define Lim 30 int main(){
int i,j,n,m,sum,a[Lim][Lim]; printf("\Ввод размерности матрицы\n"); do{
printf("Введите 0<n<=%d ",Lim); scanf("%d",&n);
}while(n<=0 || n>Lim); do{
printf("Введите 0<m<=%d ",Lim); scanf("%d",&m);
}while(m<=0 || m>Lim); printf("Заполнение матрицы\n"); for(i=0;i<n;i++)
for(j=0;j<m;j++){
printf("Введите элемент %d,%d ",i,j); scanf("%d",&a[i][j]);
}
printf("Вывод матрицы а(n,m)\n"); for(i=0;i<n;i++)
{for(j=0;j<m;j++)
40
