Как передать ссылку на элемент массива в функцию? - C (СИ)
Формулировка задачи:
Программа должна ставить наооборот биты в каждом байте числа
#include "stdafx.h" int Reverse(int n); int Pow(int x,int y); void ChangeBytes(); int main() { ChangeBytes(); //int x = Reverse(1); // printf("%d", x); return 0; } int Reverse(int n) { int result[32]; int pow = 0; int number = 0; for (int i = 0; i < 32; i++) { int res = (n % 2 == 0) ? 0 : 1; result[i] = res; n /= 2; } for (int i = 0; i < 32; i += 8) { for (int j = 0; j < 8/2; j++) { int temp = result[i + j]; result[i + j] = result[i + 7 - j]; result[i + 7 - j] = temp; } } for (int i = 0; i < 32; i++) { if (result[i] == 1) { number = number + Pow(2,i); } } return number; } int Pow(int x,int y) { int result = x; if (y == 0) return 1; for (int i = 1; i < y; i++) { result *= x; } return result; } void ChangeBytes() { const int length = 5; int arr[5]; for (int i = 0; i < length; i++) { printf("Enter number %d \n", i + 1); scanf("%d", &arr[i]); } for (int i = 0; i < length; i++) { Reverse(arr[i]); } for (int i = 0; i < length; i++) printf("Result is %d \n", arr[i]); }
Решение задачи: «Как передать ссылку на элемент массива в функцию?»
textual
Листинг программы
#include "stdafx.h" int Reverse(int *n); int Pow(int x,int y); void ChangeBytes(); int main() { ChangeBytes(); //int x = Reverse(1); // printf("%d", x); return 0; } int Reverse(int *n) { int result[32]; int pow = 0; int number = 0; for (int i = 0; i < 32; i++) { int res = (*n % 2 == 0) ? 0 : 1; result[i] = res; *n /= 2; } for (int i = 0; i < 32; i += 8) { for (int j = 0; j < 8/2; j++) { int temp = result[i + j]; result[i + j] = result[i + 7 - j]; result[i + 7 - j] = temp; } } for (int i = 0; i < 32; i++) { if (result[i] == 1) { number = number + Pow(2,i); } } return number; } int Pow(int x,int y) { int result = x; if (y == 0) return 1; for (int i = 1; i < y; i++) { result *= x; } return result; } void ChangeBytes() { const int length = 5; int arr[5]; for (int i = 0; i < length; i++) { printf("Enter number %d \n", i + 1); scanf("%d", &arr[i]); } for (int i = 0; i < length; i++) { Reverse(&arr[i]); } for (int i = 0; i < length; i++) printf("Result is %d \n", arr[i]); }
Объяснение кода листинга программы
- Включаем файл
stdafx.h
. - Объявляем три функции: Reverse, Pow, ChangeBytes.
- Запускаем основную функцию main.
- В функции main вызываем функцию ChangeBytes.
- В функции ChangeBytes создаем массив arr длиной 5 и заполняем его значениями, введенными пользователем.
- В функции main вызываем функцию Reverse, передавая в нее указатель на первый элемент массива arr.
- В функции Reverse создаем массив result и переменные pow и number.
- В цикле перебираем элементы массива result, присваивая им значение 0 или 1 в зависимости от чётности текущего числа.
- В цикле перебираем элементы массива result, меняя местами четные и нечетные числа.
- В цикле перебираем элементы массива result, увеличивая число впереди на степень двойки, равную индексу элемента.
- Возвращаем полученное число.
- В функции main выводим на экран результаты работы функции Reverse.
- Завершаем основную функцию main.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д