Вычислить скалярное произведение двух одномерных массивов - 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;
}

Объяснение кода листинга программы

В этом коде реализован рекурсивный алгоритм вычисления скалярного произведения двух одномерных массивов.

  1. В функции main объявлены следующие переменные:
    • i - счётчик для цикла;
    • n - размер массива;
    • A, a - указатели на первый массив;
    • B, b - указатели на второй массив.
  2. Сначала пользователю предлагается ввести размер массива.
  3. Затем выделяется память под массивы A и B с помощью функции calloc.
  4. Указатели a и b устанавливаются на начало выделенной памяти.
  5. В цикле с помощью функции scanf пользователь заполняет элементами массивы a и b.
  6. Вызывается функция ScalProd для вычисления скалярного произведения.
  7. Результат вычисления выводится на экран.
  8. Выделенная память освобождается с помощью функции free.
  9. Команда PAUSE приостанавливает выполнение программы до нажатия клавиши.
  10. Функция main возвращает 0, что означает успешный конец работы программы. В функции ScalProd реализован рекурсивный алгоритм вычисления скалярного произведения.
  11. Если n равно 0, то возвращается 0 (базовый случай).
  12. Если n больше 0, то:
    • a[0] умножается на b[0];
    • рекурсивно вызывается функция ScalProd с аргументами n-1, a+1 и b+1.
  13. Результат вычисления возвращается в качестве результата.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы