Трудности с возвращением массива Си - C (СИ)
Формулировка задачи:
В общем есть задача
1. Реализовать функции нахождения наибольшего общего делителя и наименьшего общего кратного двух натуральных чисел.
2. Дано натуральное число n. Разработать функцию формирования массива, элементами которого являются цифры числа n.
Всё вродё бы работает, но препод попросил, чтобы функция возвращала массив! Я попробовал что-то сделать... в итоге он сказал, что у меня нет информации про размер массива..
Короче вопрос к вам, как сделать, чтобы функция возвращала массив?( не обязательно чтобы в консоли отображалось), скорее всего у меня неверно это сделано.
#include <stdio.h> #include <locale.h> int NOD(int a, int b) { while (a != b) if (a>b) a -= b; else b -= a; return a; } int NOK(int a,int b) { int c; c=a*b/NOD(a,b); return c; } int* mass(int num) { int *array =new int[100]; int count = 0,tmp; tmp=num; while (tmp>0) { count++; tmp=tmp / 10; } for (int i = 0; i < count; i++) { array[i]=num % 10; num/=10; printf("%d", array[i]); } return array; } int main() { int a, b, c, d, num; printf("zadanie 1 \n"); printf("Vvedite a and b \n"); scanf("%d%d", &a, &b); d=NOD(a,b); c=NOK(a,b); printf("NOD:%d\nNOK:%d\n\n", c, d); printf("zadanie 2 \n"); printf("vvedite chyslo \n"); scanf("%d", &num); mass(num); }
Решение задачи: «Трудности с возвращением массива Си»
textual
Листинг программы
int mass(int** arr) { int count = 0, tmp; tmp=num; while (tmp>0) { count++; tmp=tmp / 10; } *arr=(int*)malloc(sizeof(int)*count); for (int i = 0; i < count; i++) { (*arr)[i]=num % 10; num/=10; printf("%d", *arr[i]); } return count; }
Объяснение кода листинга программы
В этом коде:
- В функции
mass
объявлены две переменные:count
иtmp
. Значениеcount
инициализируется как 0, аtmp
какnum
. - В цикле
while
происходит делениеtmp
на 10 и увеличениеcount
на 1 до тех пор, покаtmp
больше 0. Это означает, что код извлекает цифры из числаnum
, используя деление на 10 как способ получения последней цифры. - После окончания цикла
while
,count
будет содержать количество цифр в числеnum
. - С помощью
malloc
выделяется память для массиваcount
элементов типаint
. - В цикле
for
значения каждой ячейки массива инициализируются как остаток от деленияnum
на 10. Значениеnum
затем делится на 10, чтобы получить следующую цифру. - Каждое значение массива выводится с помощью
printf
. - Функция возвращает значение
count
. Похоже, что этот код предназначен для разделения числа на его отдельные цифры и сохранения этих цифр в массиве.