Тема: Организация и обработка данных при помощи массивов
Массив - это n-мерная совокупность однотипных элементов. Данные объединяют в массивы, если необходимо выполнить одни и те же действия над определенным количеством однотипных значений. Массивы объявляются следующим образом:
float a[10]; //одномерный массив, состоящий из 10 элементов, каждый из которых вещественного типа
или
int b[3][3]; //двухмерный массив (матрица 3x3} состоящий из элементов целочисленного типа
Обращение к элементу массива по ходу выполнения программы формируется в виде имени массива и списка индексов в квадратных скобках:
a[i] - в первом случае;
b[i][j] - во втором случае.
Ввод-вывод и обработку элементов массивов обычно производят при помощи циклов. Если мы имеем дело с двухмерными массивами, то необходимо использовать вложенные циклы (задача №4b).
математический алгоритмизация программа циклический
Задача 4a
Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего:
Найти произведение всех элементов массива, удовлетворяющих условию c<a[I]<d
|
|
#include <stdio.h>
#include <conio.h>main()
{ const n=7;i,c,d,k=0,pr=1;("c="); scanf("%d",&c);("d="); scanf("%d",&d);a[n];(i=1;i<=n;i++)
{ printf("a[%d]=",i); scanf("%d",&a[i]);(a[i]>c && a[i]<d) {k++; pr*=a[i];}
}
if (k==0) printf("чисел, удовлетворяющих условию не было!");
else printf("pr=%d",pr);
getch();
}
Еще пример:
Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего: найти количество четных и количество нечетных элементов в массиве.
#include <stdio.h>
#include <conio.h>main()
{ const n=7;i,ch=0,nch=0;a[n];(i=1;i<=n;i++)
{ printf("a[%d]=",i); scanf("%d",&a[i]);(a[i]%2==0) ch++; else nch++;
}("ch=%d nch=%d",ch,nch);
getch();
}
Сформировать одномерный массив, состоящий из N целочисленных элементов. После чего:
№ вар | Задание | № вар | Задание |
1 | Найти, сколько элементов массива удовлетворяют условию c<=a[I]<=d | 16 | Найти произведение кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d |
2 | Найти произведение элементов массива, удовлетворяющих условию c<=a[I]<=d | 17 | Найти произведение последних L элементов массива |
3 | Найти, сколько отрицательных элементов удовлетворяют условию c<=a[I]<=d | 18 | Найти произведение первых L элементов массива |
4 | Найти, сколько положительных элементов удовлетворяют условию c<=a[I]<=d | 19 | Найти произведение отрицательных элементов массива, удовлетворяющих условию c<=a[I]<=d |
5 | Найти сумму кубов всех отрицательных элементов массива | 20 | Найти произведение положительных элементов массива, удовлетворяющих условию c<=a[I]<=d |
6 | Найти сумму кубов всех положительных элементов массива | 21 | Найти сумму отрицательных элементов массива, удовлетворяющих условию c<=a[I]<=d |
7 | Найти сумму квадратов всех отрицательных элементов массива | 22 | Найти сумму положительных элементов массива, удовлетворяющих условию c<=a[I]<=d |
8 | Найти сумму квадратов всех положительных элементов массива | 23 | Найти произведение кубов всех отрицательных элементов массива |
9 | Найти сумму кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d | 24 | Найти произведение кубов всех положительных элементов массива |
10 | Найти сумму квадратов всех элементов массива, удовлетворяющих условию c<=a[I]<=d | 25 | Найти произведение квадратов всех отрицательных элементов массива |
11 | Найти, сколько положительных, отрицательных и нулевых элементов в массиве | 26 | Найти произведение квадратов всех положительных элементов массива |
12 | Найти произведение квадратов всех элементов массива, удовлетворяющих условию c<=a[I]<=d | 27 | Найти произведение кубов всех элементов массива, удовлетворяющих условию c<=a[I]<=d |
13 | Найти, сколько четных и нечетных элементов в массиве | 28 | Найти произведение квадратов всех нечетных элементов массива |
14 | Найти произведение квадратов всех четных элементов массива | 29 | Найти, сколько четныхэлементов удовлетворяют условию c<=a[I]<=d |
15 | Найти произведение квадратов всех элементов массива, кратных 3 | 30 | Найти произведение всех нечетных элементов массива, удовлетворяющих условию c<=a[I]<=d |
|
|
Заполнение массива случайными числами
Для инициализации генератора случайных чисел служит функция randomize();
Это функция содержится в библиотеке <stdlib.h>, которую необходимо подключить в разделе #include.
Функция random возвращает случайное число в заданном диапазоне.
Например, присвоить переменной x случайное число в диапазоне от А до В.
х=A+random(B-A+1)
Случайное число в диапазоне от 0 до 99:
х=random(100)
Задача 4b
Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в диапазоне от 10 до 100). После чего: найти сумму элементов столбца, в котором расположен минимальный элемент матрицы.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>main()
{ const n=7;i,j,k=0,sum=0,min;a[n][n];();(i=0;i<n;i++)
{(j=0;j<n;j++)
{[i][j]=10+random(91);("%5d",a[i][j]);
}
printf("\n"); //переход на другую строку
}=a[1][1];(i=0;i<n;i++)(j=0;j<n;j++)
if (min>a[i][j])
{min=a[i][j]; k=j;}(i=0,i<n,i++)+=a[i][k];("min=%d k=%d\n",min,k);("sum=%d",sum);();
}
Еще пример:
Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в диапазоне от 10 до 100). После чего: сформировать одномерный массив из сумм минимальных и максимальных значений элементов строк.
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>main()
{ const n=3;i,j,min,max;a[n][n];mas[n];();(i=0;i<n;i++)
{(j=0;j<n;j++) {[i][j]=10+random(91);("%4d",a[i][j]);
}("\n");
}(i=0;i<n;i++)
{
min=a[i][0]; max=a[i][0];(j=1;j<n;j++)
{(min>a[i][j])min=a[i][j];(max<a[i][j])max=a[i][j];
}[i]=min+max;
}(i=0;i<n;i++)("%5d",mas[i]);();
}
Сформировать двухмерный массив, состоящий из N x N элементов (заполнить случайными числами в произвольном диапазоне). После чего:
№ вар | Задание | № вар | Задание |
1 | Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент | 16 | Сформировать одномерный массив из сумм элементов столбцов |
2 | Получить новую матрицу путем деления всех элементов данной матрицы на ее наименьший по модулю элемент | 17 | Сформировать одномерный массив из произведений элементов строк |
3 | Получить новую матрицу путем умножения всех элементов данной матрицы на ее наибольший по модулю элемент | 18 | Сформировать одномерный массив из произведений элементов столбцов |
4 | Получить новую матрицу путем умножения всех элементов данной матрицы на ее наименьший по модулю элемент | 19 | Сформировать одномерный массив из наименьших значений элементов строк |
5 | Получить новую матрицу путем сложения всех элементов данной матрицы с ее наибольшим по модулю элементом | 20 | Сформировать одномерный массив из наибольших значений элементов строк |
6 | Получить новую матрицу путем сложения всех элементов данной матрицы с ее наименьшим по модулю элементом | 21 | Сформировать одномерный массив из наименьших значений элементов столбцов |
7 | Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наибольшего по модулю элемента | 22 | Сформировать одномерный массив из наибольших значений элементов столбцов |
8 | Получить новую матрицу путем вычитания всех элементов данной матрицы из ее наименьшего по модулю элемента | 23 | Сформировать одномерный массив из разницы наибольших и наименьших значений элементов столбцов |
9 | Заменить нулями все элементы, расположенные на главной диагонали и выше нее. | 24 | Сформировать одномерный массив из разницы наибольших и наименьших значений элементов строк |
10 | Заменить нулями все элементы, расположенные на главной диагонали и ниже нее. | 25 | Сформировать одномерный массив из суммы наибольших и наименьших значений элементов столбцов |
11 | Заменить нулями все элементы, расположенные на главной диагонали. | 26 | Сформировать одномерный массив из суммы наибольших и наименьших значений элементов строк |
12 | Сформировать одномерный массив из сумм элементов строк | 27 | Найти сумму элементов строки, в которой расположен максимальный элемент матрицы |
13 | Найти максимальное значение элементов этого массива, вычислить среднее арифметическое строки с этим элементом, указав номер данной строки в массиве. | 28 | Найти минимальное значение элемента этого массива, вычислить среднее арифметическое столбца с этим элементом, указав номер данного столбца в массиве. |
14 | Найти среднее арифметическое элементов каждой нечетной строки этого массива. | 29 | Найти среднее арифметическое элементов каждой четной строки этого массива. |
15 | Найти среднее арифметическое элементов каждого из нечетных столбцов этого массива. | 30 | Найти среднее арифметическое элементов каждого из четных столбцов этого массива. |
|
|
Задача 4c
|
|
Сформировать одномерный массив, состоящий из 5 элементов и отсортировать его по возрастанию.
// Сортировка массива методом прямого выбора
#include <stdio.h>
#include <conio.h>
#define SZ 5 // размер массива main ()
{
int a[SZ]; // объявляем массив, состоящий из целочисленных элементов
int i,min,j,buf,k;
//формируем одномерный массив
for (i = 0; i < SZ; i++)
{printf("a[%d]=",i); scanf("%d",&a[i]);
}
printf("\n"); //переход на другую строку
for (i = 0; i < SZ-1; i++)
{ // поиск минимального эл-та
// в части массива от а[1] до последнего эл-та
min = i; //запоминаем номер минимального элемента
for (j = i+1; j < SZ; j++)(a[j] < a[min]) min = j; // поменяем местами a[min] и a[i]= a[i]; a [i] = a [min]; a[min] = buf;
}(k =0; k < SZ; k++)("%i ", a[k]); printf("\n");();
}
Еще пример:
Заполнить массив, состоящий из 12 элементов случайными числами в диапазоне от -100 до100. Сортировать их по убыванию и вывести на экран по 4 элемента в строке.
// Сортировка массива методом прямого выбора
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#define SZ 12 // размер массиваmain ()
{();a[SZ];i,max,j,buf,k;(i = 0; i < SZ; i++)
{[i]=-100+random(201);("%5d",a[i]);
}("\n");(i = 0; i < SZ-1; i++)
{= i;(j = i+1; j < SZ; j++)(a[j] > a[max]) max = j; // поменяем местами a[min] и a[i]= a[i]; a [i] = a [max]; a[max] = buf;
}(k =0; k < SZ; k++)
{("%i ", a[k]);((k+1)%4==0) printf("\n");
}();
}
Еще пример:
Ввести последовательность целых чисел (завершение ввода - «ноль») и напечатать их в порядке убывания по 5 элементов в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицами.
#include <stdio.h>
#include <conio.h>
#define SZ 100
void main ()
{a[SZ];
int i=-1,max,j,buf,k;
//формируем массив
do
{++; printf("a[%d]=",i); scanf("%d",&a[i]);
}
while (a[i]!=0); //условие окончания формирования массива - ввод нуля
k=i; //количество элементов в массиве
printf("\n");
//сортировка элементов
for (i = 0; i < k-1; i++)
{= i;(j = i+1; j < k; j++)(a[j] > a[max]) max = j;= a[i]; a [i] = a [max]; a[max] = buf;
}
//вывод отсортированных элементов по 5 в строке
for (i =0; i < k; i++)
{("%5d ", a[i]); ((i+1)%5==0) printf("\n");
}
//заполнение оставшихся позиций единицами
for (i=1;i<=(k/5+1)*5-k;i++)(" %d",1);//четыре пробела перед знаком %();
}
№ вар | Задание | № вар | Задание |
1 | Заполнить одномерный массив, состоящий из 20 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по убыванию и вывести на экран по 5 элементов в строке | 16 | Ввести последовательность целых чисел в диапазоне от 0 до 150 (завершение ввода - «Число вне диапазона») и напечатать их в порядке возрастания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить максимальным значением. |
2 | Ввести последовательность целых чисел (завершение ввода -«ноль») и напечатать их в порядке убывания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить нулями. | 17 | Три одномерных массива состоят из N=5 произвольных действительных компонентов каждый. Разместить минимальные компоненты этих массивов в порядке возрастания. |
3 | Три одномерных массива состоят из N=7 произвольных действительных компонентов каждый. Разместить максимальные компоненты этих массивов в порядке убывания. | 18 | Заполнить одномерный массив, состоящий из 10 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по возрастанию и вывести на экран по 3 элемента в строке. Недостающие в строке элементы заменить минимальным значением. |
4 | Заполнить одномерный массив, состоящий из 20 элементов, случайными числами в диапазоне от 0 до 500. Сформировать другой массив, состоящий из элементов исходного, кратных 7. Сортировать полученный массив по убыванию. | 19 | Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из элементов исходного, являющихся четными числами. Сортировать полученный массив по возрастанию. |
5 | Пять одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить средние арифметические значения элементов этих массивов в порядке возрастания. | 20 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из сумм строк исходного и сортировать его по убыванию. |
6 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из произведений столбцов исходного и сортировать его по возрастанию. | 21 | Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из элементов исходного, кратных 7. Сортировать полученный массив по возрастанию. |
7 | Даны два двухмерных массива (3*3). Получить одномерный массив, элементы которого будут являться суммой соответствующих элементов исходного массива. Сортировать массив по убыванию | 22 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из сумм столбцов исходного и сортировать его по убыванию. |
8 | Даны два двухмерных массива (3*3). Получить одномерный массив, элементы которого будут являться произведением соответствующих элементов исходного массива. Сортировать массив по возрастанию. | 23 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сортировать массив по возрастанию и вывести по строкам. |
9 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из минимальных элементов строк исходного и сортировать его по убыванию. | 24 | Ввести последовательность целых чисел в диапазоне от -100 до 100 (завершение ввода -«Число вне диапазона») и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить значением модуля минимального числа. |
10 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из элементов исходного, расположенных ниже главной диагонали и сортировать его по убыванию. | 25 | Заполнить двухмерный массив, состоящий из 4x3 элементов, случайными числами в диапазоне от 0 до 100. Сформировать двухмерный массив 6x2, состоящий из элементов исходного, расположенных по убыванию. |
11 | Заполнить одномерный массив, состоящий из 50 элементов, случайными числами в диапазоне от 0 до 1000. Сформировать другой массив, состоящий из четных элементов исходного. Сортировать полученный массив по возрастанию. | 26 | Ввести последовательность целых чисел в диапазоне от 0 до 150 (завершение ввода -«Число вне диапазона») и напечатать их в порядке возрастания по 3 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить значением среднего арифметического элементов массива. |
12 | Три одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить модули разности нечетных элементов этих массивов в порядке убывания. | 27 | Заполнить двухмерный массив, состоящий из 5x5 элементов, случайными числами в диапазоне от 0 до 100. Сформировать одномерный массив, состоящий из элементов исходного, расположенных вышеглавной диагонали и сортировать его по возрастанию. |
13 | Ввести последовательность целых чисел (завершение ввода - «ноль») и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицей. | 28 | Три одномерных массива состоят из N=10 произвольных действительных компонентов каждый. Разместить суммы четных элементов этих массивов в порядке возрастания. |
14 | Заполнить одномерный массив, состоящий из 13 элементов случайными числами в диапазоне от 0 до 100. Сортировать полученный массив по убыванию и вывести на экран по 3 элемента в строке. Недостающие в строке элементы заменить суммой отрицательных элементов массива. | 29 | Заполнить одномерный массив, состоящий из 20 элементов, случайными числами в диапазоне от 0 до 500. Сформировать другой массив, состоящий из элементов исходного, кратных 3. Сортировать полученный массив по убыванию. |
15 | Ввести последовательность целых чисел (завершение ввода -«ноль»), вычесть из них наименьшее и напечатать их в порядке возрастания по 5 элементов в каждой строке. Недостающие в строке элементы (если такие имеются) заменить нулем. | 30 | Ввести последовательность целых чисел (завершение ввода -«ноль»), прибавить к ним наибольшее и напечатать их в порядке возрастания по 4 элемента в каждой строке. Недостающие в строке элементы (если такие имеются) заменить единицей. |