Приложение. текст программы с комментариями.

Задание

Сформировать массив простых множителей заданного числа.

Теоретический материал

Операторы создают то, что в обыденном сознании ассоциируется с понятием алгоритм – описание последовательности действий, выполняемых программой, или логика ее работы. В Си реализован общий для большинства языков программирования «джентльменский набор» управляющих конструкций:

  • линейная последовательность действий;
  • условная конструкция (если-то-иначе);
  • конструкция повторения (цикл);
  • переход (и его разновидности).

Управляющая конструкция — линейная последовательность действий является основной в языках программирования.

В соответствии с принципом вложенности элементами последовательности могут быть не только элементарные действия (простые операторы), но и вложенные синтаксические конструкции, которые на текущем уровне также выполняются последовательно друг за другом.

В Си используется такой принцип: если составной частью управляющей конструкции является единственный оператор, то он никак синтаксически не выделяется. Если же составной частью является последовательность операторов, то она заключается в фигурные скобки ({}) и образует блок.

Блок, или составной оператор выступает как единая синтаксическая единица, вложенная в конструкцию верхнего уровня. В начале его могут быть определены собственные переменные блока, действие которых не распространяется за его пределы, а время существования совпадает с временем его выполнения. Операторы, составляющие блок, выполняются последовательно друг за другом.

Единственный условный оператор имеет две разновидности: с else и без него.

В качестве условия выступает выражение, которое может иметь любой целый результат и интерпретируется в соответствии с принятыми в Си соглашениями о логических значениях: 0 –«ложь», не 0 – «истина». Действует он как и во всех языках программирования: если значение выражения есть «истина», то выполняется первый оператор, если «ложь» — второй (после else). Конструкция является структурированной, обе ветви – прямая и альтернативная – «сливаются» в одну

В Си имеется три вида циклических конструкций. Общее у них одно: все условия в них являются условиями продолжения, то есть циклы продолжаются, пока значение этих условных выражений – «истина». Операторы цикла состоят из заголовка, в котором определяется характер циклического процесса и оператора — тела цикла. Скобки в заголовке цикла являются неотъемлемым элементом синтаксиса языка.

Массив – совокупность элементов одного типа.

тип имя_массива[количество_элементов]

тип – задает тип элемента массива и может быть как стандартный так и определенный пользователем.

имя_массива – задается пользователем и используется для обращения к массиву, может состоять из символов английского алфавита, цифр и символов подчеркивания но недолжно начинаться с цифры и недолжно совпадать с зарезервированными словами среды разработки.

количество_элементов – целочисленная константа определяющая сколько элементов будет в массиве.

Доступ к элементу массива осуществляется с помощью индекса, например A[0] – первый элемент, A[1] – второй элемент, A[n] – n-й элемент массива. Нумерация элементов начинается с нуля. В памяти элементы массива хранится последовательно т.е A[0], A[1], A[2]…A[n]. Имя массива это адрес ячейки памяти по которому находится первый элемент.

Описание алгоритма

Дано:

Целое число

Результат:

Массив простых множителей заданного числа

Метод решения:

Путем перебора всех целых чисел до значения заданного числа (исключая единицу, так как единица при умножении на себя дает единицу и так может продолжаться до окончания места в массиве), находятся все множители числа. Далее они проверяются путем деления на себя, являются ли они простыми (равен ли остаток их деления на самих себя нулю).

Найденный простой множитель вносится в формирующийся массив и выводится на экран.

После этого для продолжения поиска следующего простого множителя, заданное число делится на найденный множитель, и цикл повторяется с остатком от деления, пока не разложится до последнего множителя без остатка.

Описание реализации

Подключаемые библиотеки:

#include stdio.h

#include conio.h

Используемые переменные:

m — размер массива (количество элементов)

mas[] — массив чисел

val – переменная для заданного числа (value)

i — счетчик для перебора всех целых чисел для нахождения множителя

mn – переменная для множителя

Используемые конструкции:

if — для исключения ввода единицы, для которой нет решения.

for – для обхода всех значений последовательности (массива), и условие для проверки множителя, простой ли он, путем деления на себя

Функции, используемые в программе:

printf() – вывод форматированного на экран

scanf_s() – считывание введенного пользователем числа

_getch() – остановка программы до нажатия любой клавиши с клавиатуры

Основной блок программы void main () инициализирует переменные, массив, вызывает функцию ввода/вывода значения для переменной, находит множители, проверят, являются ли они простыми, вносит в массив и выводит его на экран.

Пример работы программы

Результат работы программы.

Пример №1.

Приложение. текст программы с комментариями.

Пользователь вводит число. Программа раскладывает его на простые множители

Пример №2.

Приложение. текст программы с комментариями.

Пример №3.

Пример работы, если пользователь вводит единицу.

Приложение. текст программы с комментариями.

Выводы

В ходе выполнения лабораторной работы были изучены основные принципы работы с массивом. Использование массива для хранения полученных данных, а также использование цикла for для обхода всех элементов массива и введения условия для проверки каждого множителя, является ли он простым.

На приведенном наборе тестов программа работает корректно.

Приложение. Текст программы с комментариями.

#include

#include

#define m 1000

void main()

{

int mas[m];

int val; //переменная для заданного числа, разлагаемого на множители

int i; //переменная-счетчик

int mn; //множитель

printf(vvedite tseloe chislo, neravnoe edinnitse: );

scanf_s(%d, val);//ввод пользователем числа, которое нужно разложить на множители

if (val == 1) //исключение единицы

{

printf(Resheniya net);

_getch();

}

else{

for (i = 1; i

{

for (mn = 2; val%mn!= 0; mn++); //проверка, является ли множитель простым путем деления самого на себя без остатка

val /= mn; //уменьшение заданного числа делением на найденный множитель

mas[i] = mn; //внесение найденного значения в массив

printf( %d, mas[i]); //вывод значения массива на экран

}

_getch();

}

}

Защита.

Перевести что угодно телефоном!


Похожие статьи.

Понравилась статья? Поделиться с друзьями: