Эти объявления
int no, i,j, product = 1;
int* ar1 = (int*)malloc(sizeof(int) * no);
int* ar2 = (int*)malloc(sizeof(int) * no);
вызывают неопределенное поведение, поскольку переменная no не инициализирована и имеет неопределенное значение.
Сначала вы должны спросить пользователя, сколько элементов в массиве он хочет и только после этого для динамического выделения массивов или использования массивов переменной длины.
Эти циклы
for(i=0; i<no; i++){
for(j=0; j<no; j++){
while(j!=i){
product=ar1[i]*product;
}
}
ar2[i]=product;
}
также недопустимы. Например, внутреннее время l oop может быть бесконечным. И переменная product
должна быть инициализирована в каждой итерации внешнего l oop.
В этом l oop
for(i=0; i<no; i++){
printf("The output array is: \n");
printf("%d", ar1[i]);
}
этот вызов pf printf
printf("The output array is: \n");
должен быть вне l oop, и в этом вызове printf
printf("%d", ar1[i]);
вы должны использовать ar2
вместо ar1
.
Также объявите переменную где Они используются. Иначе трудно понять их значения, когда вы не видите сразу, где они используются.
Вот демонстрационная программа.
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
printf( "Enter the number of elements in array: " );
size_t n = 0;
scanf( "%zu", &n );
int *a1 = malloc( n * sizeof( int ) );
long long int *a2 = malloc( n * sizeof( long long int ) );
printf( "Enter the elements: " );
for ( size_t i = 0; i < n; i++ )
{
scanf( "%d", &a1[i] );
}
for ( size_t i = 0; i < n; i++ )
{
a2[i] = 1;
for ( size_t j = 0; j < n; j++ )
{
if ( i != j ) a2[i] *= a1[j];
}
}
printf( "The output array is: " );
for ( size_t i = 0; i < n; i++ )
{
printf( "%lld ", a2[i] );
}
putchar( '\n' );
free( a1 );
free( a2 );
return 0;
}
Вывод программы может выглядеть как
Enter the number of elements in array: 10
Enter the elements: 1 2 3 4 5 6 7 8 9 10
The output array is: 3628800 1814400 1209600 907200 725760 604800 518400 453600 403200 362880
Обратите внимание на то, что поскольку произведение элементов массива может быть очень большим, тогда лучше выделить второй массив как элемент типа long long int
, чтобы избежать переполнения.