Примеры программ обработки одномерных массивов
Пример 1. Дан одномерный массив. Найти минимальный и максимальный элементы массива, их порядковые номера и вывести их на печать.
Ход выполнения работы
1. Для нахождения минимального элемента применим стандартный ход. На первом шаге примем за минимальный нулевой элемент массива и номер этого элемента равен нулю. Затем, меняя индексы элементов массива, будем сравнивать найденное минимальное значение с текущим элементом. Если окажется, что текущий элемент меньше минимального значения, найденного на предыдущих шагах, то он становится минимальным и т.д. Для нахождения максимального элемента используют аналогичную схему. Следовательно, для того чтобы проверить каждый элемент массива, нужно использовать цикл с параметром. В алгоритме и программе переменные min и imin обозначают соответственно минимальное значение и его номер, а переменные max и imax – максимальное значение и его номер.
2. Написать программу, соответствующую алгоритму:
Алгоритм | Программа |
объявление вещ: а[10], min, max; цел: i, imin, imax для i=0 до 10-1 шаг 1 ввод а[i] все для i //задаются начальные максимальное и //минимальное значения элементов //массива и их номера min=a[0], imin =0 max=a[0], imax=0 для i=1 до 10-1 шаг 1 // в цикле изменяется номер i // элемента массива //поэтому переменные min и max //сравниваются с // каждым элементом отдельно если min>а[i] min=a[i] imin=i все_ если если max<а[i] max=a[i] imax=i все_ если все_для i печать imin, min печать imax, max для i=0 до 10-1 шаг 1 вывод a[i] все_для i | #include "stdio.h" #define N 10 int main ( ) { float а[N], min, max; int i, imin, imax; // ввод массива с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("a[%i]= " ,i ); scanf ("%f", &а[i]); } //находим максимальное и минимальное //значение в массиве min=a[0], imin =0; max=a[0], imax=0; for ( i=1; i<=N-1; i++ ) { if(min>а[i]) { min=a[i]; imin=i; } if(max<а[i]) { max=a[i]; imax=i; } } //вывод номеров минимального и //максимального элементов массива и их //значений на экран printf("№min=%i, min=%f\n",imin,min); printf("№max=%i,max=%f\n",imax,max); // вывод массива на экран for (i=0; i<=N-1; i++) printf ("%.3f ", а[i]); printf("\n"); return 1; } |
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 2. Сформировать массив по закону . При заданном k подсчитать среднее арифметическое элементов массива, больших k.
Ход выполнения работы
1. Средним арифметическим называется отношение суммы чисел к их количеству. Таким образом, для решения задачи нужно найти сумму и количество элементов, удовлетворяющих условию задачи. Так как нужно проверить каждый элемент массива, то необходимо использовать цикл с параметром, где параметр будет обозначать индекс элемента массива. В алгоритме и программе переменные sum и count будут обозначать сумму и количество определенных элементов соответственно.
2. Написать программу, соответствующую алгоритму:
Алгоритм | Программа |
объявление вещ: а[15], sum, k; цел: i, count ввод k // формирование элементов массива для i=0 до 15-1 шаг 1 все для i //сначала сумма элементов и их // количество равны нулю sum=0,count=0 для i=0 до 15-1 шаг 1 // в цикле изменяется номер i элемента // массива // каждый элемент сравнивается со //значением k // нужный элемент добавляется к сумме если а[i]>k sum=sum+a[i] count++ все_ если все_для i // находим среднее арифметическое sum=sum/count // печатаем полученное значение печать sum // вывод массива на экран для i=0 до 15-1 шаг 1 вывод a[i] все_для i | #include "stdio.h" #include "math.h" #define N 15 int main ( ) { float а[N], sum, k; int i, count; // ввод k printf ("k=" ); scanf ("%f", &k); // ввод массива с клавиатуры for ( i=0; i<=N-1; i++ ) { a[i]=sqrt(i)+sin(i); } //сначала сумма элементов и их //количество равны нулю sum=0, count=0; //вычисление суммы и количества //элементов for ( i=0; i<=N-1; i++ ) { if(а[i]>k) { sum=sum+a[i]; count++; } } // находим среднее арифметическое sum=sum/count; // печатаем полученное значение printf("sred_arif=%f\n", sum); // вывод массива на экран for (i=0; i<=N-1; i++) printf ("%.3f ", а[i]); printf("\n"); return 1; } |
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 3. Дан одномерный массив. Вычислить произведение нечетных элементов массива, расположенных на четных позициях.
Ход выполнения работы
1. Первоначально значение произведения равно 1 (при умножении на 1 значение произведения не меняется). Затем организуется цикл для проверки каждого элемента на соответствие указанному в задаче условию. Если текущий элемент удовлетворяет условию, то с его помощью изменяется искомое произведение.
2. Написать программу, соответствующую алгоритму:
Алгоритм | Программа |
объявление цел: а[14], цел: i, p // ввод массива a с клавиатуры для i=0 до 14-1 шаг 1 ввод а[i] все_для i // вычисление произведения p=1 для i=0 до 14-1 шаг 1 если a[i]%2=1 и i%2=0 p=p*a[i] все_если все_для i // печатаем полученное значение печать p // вывод массива a на экран для i=0 до 4-1 шаг 1 вывод a[i] все_для i | #include "stdio.h" #define N 14 int main ( ) { int а[N]; int i, p=1; // ввод массива a с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("a[%i]= " ,i ); scanf ("%i", &а[i]); } // вычисление произведения for ( i=0; i<=N-1; i++ ) { if(а[i]%2==1 && i%2==0) { p=p*a[i]; } } // печатаем полученное значение printf("p=%i\n", p); // вывод массива a на экран for (i=0; i<=N-1; i++) printf ("%i ", а[i]); printf("\n"); return 1; } |
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 4. Даны одномерные массивы x[5] и y[5]. Сформировать новый массив z[5] по правилу .
Ход выполнения работы
1. Организуется цикл для проверки индекса каждого элемента на соответствие указанному в задаче условию. Если индекс – четное число, то выполняется одно действие, иначе элементом массива z становится наименьший из текущих элементов массивов x и y.
2. Написать программу, соответствующую алгоритму.
Алгоритм | Программа |
объявление вещ: x[5], y[5], z[5], цел: i // ввод массива x с клавиатуры для i=0 до 5-1 шаг 1 ввод x[i] все_для i // ввод массива y с клавиатуры для i=0 до 5-1 шаг 1 ввод y[i] все_для i // формирование массива z для i=0 до 5-1 шаг 1 если i%2= =1 // i – нечетное z[i]=sin(x[i]) иначе // т.е. i – четное если x[i]<y[i] // находится // минимальное из // xi и yi z[i]=x[i] иначе z[i]=y[i] все_если все_если все_для i // вывод массива x на экран для i=0 до 5-1 шаг 1 вывод x[i] все_для i // вывод массива y на экран для i=0 до 5-1 шаг 1 вывод y[i] все_для i // вывод массива z на экран для i=0 до 5-1 шаг 1 вывод z[i] все_для i | #include "stdio.h" #include "math.h" #define N 5 int main ( ) { float x[N], y[N], z[N]; int i; // ввод массива x с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("x[%i]= " ,i ); scanf ("%f", &x[i]); } // ввод массива y с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("y[%i]= " ,i ); scanf ("%f", &y[i]); } // формирование массива z for ( i=0; i<=N-1; i++ ) { if(i%2= =1) z[i]=sin(x[i]); else if(x[i]<y[i]) z[i]=x[i]; else z[i]=y[i]; } // вывод массива x на экран for (i=0; i<=N-1; i++) printf ("%.3f ", x[i]); printf("\n"); // вывод массива y на экран for (i=0; i<=N-1; i++) printf ("%.3f ", y[i]); printf("\n"); // вывод массива z на экран for (i=0; i<=N-1; i++) printf ("%.3f ", z[i]); printf("\n"); return 1; } |
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 5. Дан одномерный массив a[15]. Сформировать новый массив b из элементов массива а, меньших заданного k.
Ход выполнения работы
1. При решении данной задачи нужно знать, сколько элементов должен содержать массив b. Так как массив а вводится с клавиатуры, то значения его элементов заранее неизвестно. В общем случае все элементы массива могут быть меньше заданного k. Предполагаем, что массив b будет содержать столько же элементов, что и массив а. Однако при формировании нового массива не все элемента старого могут удовлетворять условию задачи. По этой причине индексация элементов этих массивов может различаться и, следовательно, для этой цели объявляют разные переменные.
2. Написать программу, соответствующую алгоритму:
Алгоритм | Программа |
объявление вещ: a[15], b[15],k, цел: i, j ввод k для i=0 до 15-1 шаг 1 ввод a[i] все_для i j=0 для i=0 до 15-1 шаг 1 если a[i]<k b[j]=a[i] j++ все_если все_для i для i=0 до 15-1 шаг 1 вывод a[i] все_для i для i=0 до j-1 шаг 1 вывод b[i] все_для i | #include "stdio.h" #include "math.h" #define N 15 int main ( ) { float a[N], b[N], k; int i,j; printf ("k=" ); scanf ("%f", &k); // ввод массива a с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("a[%i]= " ,i ); scanf ("%f", &a[i]); } j=0; // формирование массива b //переменная j после завершения //формирования нового массива будет //определять количество элементов этого //массива for ( i=0; i<=N-1; i++ ) { if(a[i]<k) { b[j]=a[i]; j++; } } // вывод массива a на экран for (i=0; i<=N-1; i++) printf ("%.3f ", a[i]); printf("\n"); // вывод массива b на экран for (i=0; i<=j-1; i++) printf ("%.3f ", b[i]); printf("\n"); return 1; } |
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Пример 6. Дан одномерный массив t[7]. Осуществить циклический сдвиг массива на k элементов влево.
Ход выполнения работы
1. Под циклическим сдвигом на k элементов понимается перемещение элементов вправо или влево. Высвободившиеся элементы помещаются в конец массива (в данном случае) в порядке их следования. Начальное состояние массива:
-5 |
Если будет произведен циклический сдвиг на 3 элемента влево, то массив будет изменен следующим образом:
-5 |
2. Написать программу, соответствующую алгоритму:
Алгоритм | Программа |
объявление вещ: t[7], x, цел: i, j, k,p ввод k для i=0 до 7-1 шаг 1 ввод t[i] все_для i //цикл по j показывает сколько раз должен // произойти циклический сдвиг на один //элемент для j=1 до k шаг 1 // запоминаем первый элемент массива p=t[0] //сдвигаем элементы массива на одну // позицию для i=0 до N-2 шаг 1 x=t[i] t[i]=t[i+1] t[i+1]=x все_для i //на место последнего элемента // записываем первый t[N-1]=p все_для j для i=0 до 7-1 шаг 1 вывод t[i] все_для i | #include "stdio.h" #include "math.h" #define N 7 int main ( ) { float t[N], x; int i,j, k,p; printf ("k=" ); scanf ("%i", &k); // ввод массива t с клавиатуры for ( i=0; i<=N-1; i++ ) { printf ("t[%i]= " ,i ); scanf ("%f", &t[i]); } for ( j=1; j<=k; j++ ) { //запоминаем первый элемент массива p=t[0]; //сдвигаем элементы массива на одну //позицию for ( i=0; i<=N-2; i++ ) { x=t[i]; t[i]=t[i+1]; t[i+1]=x; } //на место последнего элемента //записываем первый t[N-1]=p; } // вывод массива t на экран for (i=0; i<=N-1; i++) printf ("%.3f ", t[i]); printf ("\n"); return 1; } |
Примечание. В алгоритме два соседних элемента массива меняются местами при помощи операторов:
x=t[i-1]
t[i-1]=t[i]
t[i]=x
3. Создать проект и реализовать данную задачу в среде Visual C++ 6.0.
Дата добавления: 2015-08-08; просмотров: 1094;