标量乘C中的向量乘法

时间:2014-09-29 23:06:18

标签: c vector scalar

我有这个代码用于将标量乘以n维向量;它编译但崩溃,我不知道什么是错的,任何想法?

 #include <stdio.h>
    int main()
    {
        int i,n,A[n]; float k,B[n];
        printf ("\n Enter vector dimension \n");
        scanf ("%d",&n);
        for (i=1; i<n+1; i++)
            { printf ("\n Enter a%d",i);
              scanf ("%d", &A[i]);
            }
        printf ("\n Enter value of scalar \n");
        scanf ("%f", &k);  
            for (i=1; i<n+1; i++)
            {B[i]=k*A[i];
            }
            for (i=1; i<n+1; i++)
            { printf ("\n B[%f]=%f",i,B[i]);
            }
        getch();
        return 0;
    }

2 个答案:

答案 0 :(得分:0)

在此声明中

   int i,n,A[n]; float k,B[n];

变量n未初始化。它有一个未指定的值。所以程序有不确定的行为。您首先要为n输入一个值,然后才会声明数组A [n]和B [n]。

还要考虑到数组的索引从0开始。所以如果你有一个包含n个元素的数组,那么索引的有效范围将是0, n-1

以下是程序如何使用支持C99的编译器编译它。

#include <stdio.h>


int main(void) 
{
    int n;

    printf( "\n Enter vector dimension: " );
    scanf( "%d", &n );

    int a[n];
    float b[n];

    for ( int i = 0; i < n; i++ )
    { 
        printf( "Enter a%d ", i );
        scanf( "%d", &a[i] );
    }

    printf( "\n Enter value of scalar " );

    float k;
    scanf( "%f", &k );

    for ( int i = 0; i < n; i++ ) b[i] = k * a[i];

    for ( int i = 0; i < n; i++ ) printf( "\n b[%d] = %f", i, b[i] );

    //getch();

    return 0;
}   

如果输入将接受以下数据

3
1 2 3
0.5

然后输出

b[0] = 0.500000
b[1] = 1.000000
b[2] = 1.500000

答案 1 :(得分:0)

问题:

  1. 代码在分配值之前使用变量n in。第一行。

    int i,n, A [n] ;浮动k, B [n] ;

  2. 您可能希望在第一次scanf调用后初始化这些数组。

    所以你想要这样的代码片段。

    #include <stdio.h>
    #include <conio.h>  // I don't have this library.  
    int main()
    {   
        int n;
    
        printf ("\n Enter vector dimension \n");
    
        scanf ("%d",&n);
    
        int i,A[n]; 
        float k,B[n];
    
        for (i=1; i<n+1; i++)
            { printf ("\n Enter a%d",i);
              scanf ("%d", &A[i]);
            }
    
        printf ("\n Enter value of scalar \n");
    
        scanf ("%f", &k);  
            for (i=1; i<n+1; i++)
            {B[i]=k*A[i];
            }
            for (i=1; i<n+1; i++)
            { printf ("\n B[%f]=%f",i,B[i]);
            }
    
        gets();
    
        return 0;
    }