Вычислить скалярное произведение двух одномерных массивов - C (СИ)
Формулировка задачи:
Задание: Вычислить скалярное произведение двух одномерных массивов.
Ввод: С консоли. Подается число элементов массивов n, затем элементы первого массива, затем элементы второго массива.
Ограничения: 1?n?10000, -1000?Array[n]?1000, время работы программы не более 1 с.
Вывод: Число равное скалярному произведению данных массивов.
Ввод 1 2 1 5 5 1 Вывод 1 10
Ввод 2 1 2 2 Вывод 2 4
Ввод 3 3 0 0 0 13 25 -15 Вывод 3 0
Решение задачи: «Вычислить скалярное произведение двух одномерных массивов»
textual
Листинг программы
#include <stdio.h> #include <stdlib.h> #include <malloc.h> int ScalProd(int n, int *a, int *b) { return (n==0)?0:a[0]*b[0]+ScalProd(n-1,a+1,b+1); } int main(int argc, char *argv[]) { int i,n,*A,*a,*B,*b; printf("n="); scanf("%d",&n); A=(int*) calloc(n,sizeof(int)); B=(int*) calloc(n,sizeof(int)); a=A; b=B; for(i=0; i<n; i++) scanf("%d",&a[i]); for(i=0; i<n; i++) scanf("%d",&b[i]); printf("%d\n",ScalProd(n,a,b)); free(A); free(B); system("PAUSE"); return 0; }
Объяснение кода листинга программы
В этом коде реализован рекурсивный алгоритм вычисления скалярного произведения двух одномерных массивов.
- В функции
main
объявлены следующие переменные:i
- счётчик для цикла;n
- размер массива;A
,a
- указатели на первый массив;B
,b
- указатели на второй массив.
- Сначала пользователю предлагается ввести размер массива.
- Затем выделяется память под массивы
A
иB
с помощью функцииcalloc
. - Указатели
a
иb
устанавливаются на начало выделенной памяти. - В цикле с помощью функции
scanf
пользователь заполняет элементами массивыa
иb
. - Вызывается функция
ScalProd
для вычисления скалярного произведения. - Результат вычисления выводится на экран.
- Выделенная память освобождается с помощью функции
free
. - Команда
PAUSE
приостанавливает выполнение программы до нажатия клавиши. - Функция
main
возвращает 0, что означает успешный конец работы программы. В функцииScalProd
реализован рекурсивный алгоритм вычисления скалярного произведения. - Если
n
равно 0, то возвращается 0 (базовый случай). - Если
n
больше 0, то:a[0]
умножается наb[0]
;- рекурсивно вызывается функция
ScalProd
с аргументамиn-1
,a+1
иb+1
.
- Результат вычисления возвращается в качестве результата.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д