我有这个代码用于将标量乘以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;
}
答案 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)
问题:
代码在分配值之前使用变量n in。第一行。
int i,n, A [n] ;浮动k, B [n] ;
您可能希望在第一次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;
}