2к3с Языки программирования / МУ ПР 4
.pdf
4. Запустить программу нажатием кнопки Start или F5. Если в про-
граммном коде не обнаружено ошибок, будет получен результат.
Рассмотрим типовые задачи работы с массивами.
Задача 1. З а п о лн е н и е м а с с и в а м е то д о м в во д а ч и с е л с к ла ви а т у -
р ы
Блок-схема заполнения массива методом ввода чисел с клавиатуры при-
ведена на рисунке 1.
1
начало
2
i=0;size;1
3
a[i]
4
конец
Рис. 1. Блок-схема заполнения массива методом
ввода чисел с клавиатуры
Составим программный код:
//Заполнение массива методом ввода чисел с клавиатуры // (доступ к элементам по номеру)
#include <stdio.h> #include <conio.h>
#define size 5 //размер массива void main ()
{
int a[size]; //массив int i; //индекс
printf (“Введите массив целых чисел.\n”); printf ("После ввода каждого числа”); printf (“нажимайте <Enter>\n);
for (i=0; i<size; i++)
{
12
printf (“a[%i]->”,i+1); scanf (“%i”, &a[i]);
}
geth();
}
После запуска программы на выполнение, получим следующий резуль-
тат:
Введите массив целых чисел.
После ввода каждого числа нажимайте <Enter>
a[1]->2
a[2]->4
a[3]->6
a[4]->8
a[5]->5
Задача 2 З а п о лн е н и е м а с с и ва м е то д о м с л уч а й н ы х ч и с е л
Блок-схема заполнения массива методом случайных чисел приведена на
рисунке 2.
Составим программный код:
//Заполнение массива методом генерирования случайных чисел
#include <stdio.h> #include <conio.h>
#include <stdlib.h> //для доступа к strad #include <time.h>
#define size 5 //размер массива void main ()
{
int a[size]; //массив int i; //индекс
for (i=0; i<size; i++)
{
a[i]=rand()%100+1; //генерируются числа от 1 до 100 printf (“\ta[%i]=%a[i]”,i,a[i]);
}
getch();
13
}
1
начало
2
i=0;size;1
3
a[i]=rand()%100+1
4
a[i]
5 конец
Рис. 2. Блок-схема заполнения массива методом случайных чисел
После запуска программы на выполнение, получим следующий резуль-
тат: |
|
|
|
|
a[1]=2 |
a[2]=4 |
a[3]=6 |
a[4]=8 |
a[5]=5 |
Задача 3 На х о ж д е н и е с ум м ы ( п |
р ои зве д е н и я ) э ле м е н то в м а с с и в а |
|||
Блок-схема нахождения суммы (произведения) элементов массива пред-
ставлена на рисунке 3.
Составим программный код, здесь следует отметить, что в данной про-
грамме применяется заполнение массива методом случайных чисел:
#include <stdio.h> #include <conio.h>
#include <stdlib.h> //для доступа к strad #include <time.h>
#define size 5 //размер массива void main ()
{
int a[size]; //массив int i; //индекс
int S (P); //сумма (произведение)
for (i=0; i<size; i++)
{
a[i]=rand()%100+1; //генерируются числа от 1 до 100
14
printf (“\ta[%i]=%a[i]”,i,a[i]);
S+=a[i] (P*=a[i]);
}
printf (“\nS=%i”,S) (“\nP=%i”,P); getch();
}
1 начало
2
S=0 (P=1)
3
i=0;size;1
4
a[i]=rand()%100+1
5
a[i]
6
S=S+a[i] (P=P*a[i])
7
S (P)
8 конец
Рис. 3. Блок-схема нахождения суммы (произведения) элементов массива После запуска программы на выполнение, получим следующий резуль-
тат: |
|
|
|
|
a[1]=2 |
a[2]=4 |
a[3]=6 |
a[4]=8 |
a[5]=5 |
S=25 (P=1920) |
|
|
|
|
Задача 4 На х о ж д е н и е |
м а к с и м а л ьн о г о ( м и н и м а л ьн о г о ) э ле м е н та |
|||
м а с с и ва .
Блок-схема нахождения максимального (минимального) элемента масси-
ва приведена на рисунке 4.
15
Составим программный код:
//Нахождение максимального (минимального) элемента массива
#include <stdio.h> #include <conio.h>
#define size 5 //размер массива void main ()
{
int a[size]; //массив int i; //индекс
int max (min); //максимальный (минимальный) элемент int k; //номер максимального (минимального) элемента printf (“Введите массив целых чисел.\n”);
printf ("После ввода каждого числа”); printf (“нажимайте <Enter>\n);
for (i=0; i<size; i++)
{
printf (“a[%i]->”,i+1); scanf (“%i”, &a[i]);
}
max (min)=a[1]; k=1;
for (i=2; i<size; i++)
{
if a[i]>max (a[i]<min) {max(min)=a[i]
k=i; }
printf (“max(min)=%i”,max(min)); printf (“k=%i”,k);
geth();}
После запуска программы на выполнение, получим следующий резуль-
тат:
a[1]->2 a[2]->4 a[3]->6 a[4]->8 a[5]->5
max=8 (min=2)
16
1 |
начало |
|
2
i=0;size;1
3
a[i]
4
max=a[1] (min=a[1])
5
k=1
6
i=2;size;1
|
|
да |
|
7 |
a[i]>max |
|
|
|
|
||
|
|
|
|
||
|
|
|
|
|
(a[i]<min |
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
max=a[i] |
|
|
|
|
|
(min=a[i]) |
|
|
нет |
|
|
k=i |
|
|
||
|
|
|
|
||
|
|
|
|
|
|
9
max (min) k
10 |
конец |
|
Рис. 4. Блок-схема нахождения максимального (минимального)
элемента массива
Задача 5 С о р ти р ов к а э ле м е н то в м а с с и в а м е то д о м п узы р ьк а Блок-схема сортировки элементов массива приведена на рисунке 5.
17
|
|
|
|
1 |
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
начало |
||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
i=0;size;1 |
|||||||
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
a[i]=rand()%100+1 |
||||||||||||||||
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
4 |
|
|
|
a[i] |
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
5 |
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0;size-1;1 |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
j=i;size;1 |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
да |
|
|
|
|
|
|
|
|
7 |
|
|
a[i]>a[j] |
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c=a[i] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
нет |
||
|
a[i]=a[j] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
a[j]=c |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
9
i=0;size;1
10 |
a[i] |
|
11
конец
Рис. 5. Блок-схема сортировки элементов массива методом пузырька
Составим программный код:
#include <stdio.h> #include <conio.h>
#include <stdlib.h> //для доступа к strad #include <time.h>
#define size 5 //размер массива
18
void main ()
{
int a[size]; //массив int i; //индекс
printf (“\tИсходный массив”); for (i=0; i<size; i++)
{
a[i]=rand()%100+1; //генерируются числа от 1 до 100 printf (“\ta[%i]=%a[i]”,i,a[i]);
}
for (i=0; i<size-1; i++)
{
for (j=i; j<size; j++)
{
if a[i]>a[j]
{
c=a[i];
a[i]=a[j];
a[j]=c;
}
}
}
printf (“\nОтсортированный по возрастанию массив”); for (i=0; i<size; i++)
{
printf (“\ta[%i]=%a[i]”,i,a[i]);
}
getch();
}
После запуска программы на выполнение получим следующий результат:
Исходный массив
a[1]=2 |
a[2]=4 |
a[3]=6 |
a[4]=8 |
a[5]=5 |
Отсортированный по возрастанию массив: |
|
|||
a[1]=2 |
a[2]=4 |
a[3]=5 |
a[4]=6 |
a[5]=8 |
Задача 6 С о р ти р ов к а |
м а с с и ва м е то д о м п р я м о г о вы б о р а э ле м е н - |
|||
то в |
|
|
|
|
Блок-схема сортировки массива по возрастанию методом прямого выбора
приведена на рисунке 6.
19
Составим программный код:
//Сортировка массива методом прямого выбора
#include <stdio.h> #include <conio.h>
#define SZ 5 //размер массива void main ()
{
int a[SZ]; //массив of integer
int i; //номер элемента, от которого ведется поиск минимального //элемента
int min; //номер минимального элемента в части массива от i до верхней границы массива
int j; //номер элемента, сравниваемого с минимальным int b; //используется при обмене элементов массива int k; //индекс для ввода и вывода
printf (“\nСортировка массива\n”);
printf (“Введите массив (в одной строке %i”,SZ); printf (“целых чисел) и нажмите <Enter>\n”); printf (“->”);
for (k=0; k<SZ; k++) scanf (“%i”, &a[k]);
printf (“Сортировка …\n”); for (i=0; i<SZ-1; i++)
{
min=i;
for (j=i+1; j<SZ; j++)
if (a[j]<a[min] min=j; //поменяем местами a[min] и a[i] b=a[i];
a[i]=a[min];
a[min]=b;
//цикл сортировки закончен //отладочная печать
//выведем промежуточное состояние массива for (k=0; k<SZ; k++)
printf (“%i”, a[k]);
20
|
|
|
|
1 |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
начало |
||||||
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
k=0;k<SZ;k++ |
|||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
3 |
|
|
|
a[k] |
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
i=0;i<SZ-1;i++ |
|||||
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
5 |
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
min=i |
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
6 |
|
|
|
|
j=i+1;j<SZ-1;j++ |
|||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
||||
нет |
|
|
7 |
|
|
|
a[j]<a[min] |
|||||||
|
|
|
|
|
|
|
|
|
|
|
||||
да
8
min=j
9
b=a[i]
a[i]=a[min]
a[min]=b
10
k=0;k<SZ;k++
11 a[k]
12
конец
Рис.5. Блок-схема сортировки массива по возрастанию методом прямого выбора
printf (“\n”);
}
//выведем отсортированный массив
21
