我想制作点矩阵并将它们旋转为自定义角度 当我进入所需的角度时,我得到一堆0,无法弄清楚原因 可能是一个非常简单的错误,我对C语言编程有点新意,试图学习。
这是我的代码:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
int main(){
double pi = 3.14159265;
double rot[2][2], obj[2][10], obj2[2][10];
int a, c, d, i, j;
double x,y, sum=0;
double element = 0;
printf("Enter the number of columns of the matrix:\n");
scanf("%d", &a);
printf("Enter the elements of the matrix:\n");
for (c = 0; c < 2; c++){
for (d = 0; d < a; d++){
scanf("%lf", &obj[c][d]);
}
}
printf("Enter the desired clockwise rotation angle:\n");
scanf("%lf", &x);
if ((int)x > 360){
x = (int)x % 360;
}
if ((int)x < 0){
x = 360 + x;
}
y = (pi / 180) * x;
rot[0][0] = cos(y);
rot[0][1] = sin(y);
rot[1][0] = -sin(y);
rot[1][1] = cos(y);
for (c = 0; c < 2; c++){
for (d = 0; d < a; d++){
for (i = 0; i < 2; i++){
sum += rot[c][i] * obj[i][d];
}
obj2[c][d] = sum;
sum = 0;
}
}
printf("Rotated object in matrix form:\n");
for (c = 0; c < 2; c++){
for (d = 0; d < a; d++){
printf("%f\t", obj2[c][d]);
}
printf("\n");
}
system("PAUSE");
return 0;
}
接受矩阵字段中的值时出现问题,几乎所有值都很混乱。还有&amp;在printf函数中,所以它打印错误的东西。现在全部解决了,调整了一些输出看起来更好但现在它是一个正常运行的代码。
编辑:修复printf后,我在调试后得到http://prntscr.com/7fgq7m 编辑2:输入值正常工作,现在将使用sin()和cos()部分来查看是否有效。
最终编辑:对于我计划的价值观,一切顺利进行,会与朋友进行更多测试,但看起来不错。
谢谢大家的帮助,非常感谢。
答案 0 :(得分:0)
从此行中删除.
,使其显示为
scanf("%lf", &x);
如果您打印输入值,将显示哪个错误。
另外,我发现你在检查输入值时遇到了麻烦,但sin()
和cos()
只能通过愚蠢的极端输入失败。
另一点,fflush(stdin)
是实现定义的,通常不是必需的。
更新这是一个错误
for (d = 0; d < a; c++)
应该是
for (d = 0; d < a; d++)
答案 1 :(得分:0)
scanf("%.lf", &obj[c][d]);
这是错的。 “%.lf”没有这样的说明符。对于double类型值,它必须是“%lf”。
此外,您正在使用fflush(stdin);
,这是不正确的刷新标准输入缓冲区,并且根据标准(C11 7.21.5.2)
它是未定义的行为。 (okey编译器支持它,但错误)。
您可以使用自己喜欢的功能;
void FlushStdin(void)
{
int ch;
while((ch = getchar()) != '\n' && ch != EOF )
;
}