如何在 C 中的矩阵(二维数组)内声明双精度数?
How to declare doubles inside a matrix (2d arrays) in C?
我正在自学(几天前开始),找不到可靠的葡萄牙语(我的母语)信息。
头痛太多之后,我放弃了,来到这里寻求帮助。
我不知道如何制作 array/2d 双精度数组,只有整数。
以下代码按预期工作:
int main(void){
int matriz[5][2] = {{1,2}, // DECLARATION OF MATRIX COMPOSED OF INTERGERS
{3,4},
{5,6},
{7,8},
{9,10}};
int maior = matriz[0][0]; // BIGGEST NUMBER INSIDE MATRIX, STARTED AS FIRST POSITION
int soma = 0; // SUM OF NUMBERS START WITH ZERO
int lin = 0; // INDICATION OF LINE
int col = 0; // INDICATION OF COLUMN
for (lin = 0; lin < 5; lin++){
for (col = 0; col < 2; col++){
if (maior < matriz[lin][col]) {maior = matriz[lin][col];}
soma += matriz[lin][col];
}
}
printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma, maior);
// THE SUM OF NUMBERS IS %D AND THE BIGGEST NUMBER IS %D
// I COPIED THE FOLLOWING CODE FROM ELSEWHERE TO SEE WHAT WAS GOING ON
int i, j;
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, matriz[i][j] );
}
}
return 0;}
输出符合预期:
A soma dos numeros eh 55 e o maior numero eh 10
a[0][0] = 1
a[0][1] = 2
a[1][0] = 3
a[1][1] = 4
a[2][0] = 5
a[2][1] = 6
a[3][0] = 7
a[3][1] = 8
a[4][0] = 9
a[4][1] = 10
**
然而,任何更改如以下代码总是错误的:
**
int main(void){
double matriz2[5][2] = {{10000,1000},
{100,10},
{1,0.1},
{0.01,0.001},
{0.0001,0.00001}};
double maior2 = matriz2[0][0];
double soma2 = 0;
int lin2 = 0;
int col2 = 0;
for (lin2 = 0; lin2 < 5; lin2++){
for (col2 = 0; col2 < 2; col2++){
if (maior2 < matriz2[lin2][col2]) {maior2 = matriz2[lin2][col2];}
soma2 += matriz2[lin2][col2];
}
}
printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma2, maior2);
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, matriz2[i][j] );
}
}
return 0;}
输出总是错误的,因为我一直在改变它。
我声明了长双打、双打、整数和双打等。每次代码都输出错误的答案。
一些组合输出负数。其他人只是到处输出零。两个例子:
A soma dos numeros eh 0 e o maior numero eh 0
a[0][0] = 10000
a[0][1] = 1000
a[1][0] = 100
a[1][1] = 10
a[2][0] = 1
a[2][1] = 0
a[3][0] = 0
a[3][1] = 0
a[4][0] = 0
a[4][1] = 0
或
A soma dos numeros eh 953826337 e o maior numero eh 0
a[0][0] = 0
a[0][1] = 0
a[1][0] = 0
a[1][1] = 0
a[2][0] = 0
a[2][1] = -1717986918
a[3][0] = 1202590843
a[3][1] = -755914244
a[4][0] = -350469331
a[4][1] = -1998362383
我根本找不到在矩阵中声明或放置双数的方法。
我该怎么做?
%d
printf
的格式说明符需要一个 int
参数,但您传递的是 double
。然后您的程序会表现出未定义的行为。查阅您最喜欢的 C 或 C++ 教科书,了解如何输出 double
.
类型的值
您已经标记了 C
和 C++
,您应该选择一个。我会给出两种语言的答案。
如果将 C
与 printf()
一起使用,当您将二维数组从 int
更改为 double
时,计算似乎没问题,但您的输出有问题printf()
。您正在使用 %d
,它需要一个 int
,但您将其传递给一个 double
,这会导致未定义的行为。使用 float
或 double
时,将其更改为 %f
或 %g
。
如果使用 C++
尽量不要使用 printf()
。相反,您应该包括 iostream
。然后你的输出看起来像:
// printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma2, maior2);
std::cout << "A soma dos numerous eh " << soma2 << " e o maior numero eh << maior2 << '\n';
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
// printf("a[%d][%d] = %d\n", i,j, matriz2[i][j] );
std::cout << "a[" << i << "][" << j "] = " << matriz2[i][j] << '\n';
}
}
我正在自学(几天前开始),找不到可靠的葡萄牙语(我的母语)信息。 头痛太多之后,我放弃了,来到这里寻求帮助。 我不知道如何制作 array/2d 双精度数组,只有整数。 以下代码按预期工作:
int main(void){
int matriz[5][2] = {{1,2}, // DECLARATION OF MATRIX COMPOSED OF INTERGERS
{3,4},
{5,6},
{7,8},
{9,10}};
int maior = matriz[0][0]; // BIGGEST NUMBER INSIDE MATRIX, STARTED AS FIRST POSITION
int soma = 0; // SUM OF NUMBERS START WITH ZERO
int lin = 0; // INDICATION OF LINE
int col = 0; // INDICATION OF COLUMN
for (lin = 0; lin < 5; lin++){
for (col = 0; col < 2; col++){
if (maior < matriz[lin][col]) {maior = matriz[lin][col];}
soma += matriz[lin][col];
}
}
printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma, maior);
// THE SUM OF NUMBERS IS %D AND THE BIGGEST NUMBER IS %D
// I COPIED THE FOLLOWING CODE FROM ELSEWHERE TO SEE WHAT WAS GOING ON
int i, j;
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, matriz[i][j] );
}
}
return 0;}
输出符合预期:
A soma dos numeros eh 55 e o maior numero eh 10
a[0][0] = 1
a[0][1] = 2
a[1][0] = 3
a[1][1] = 4
a[2][0] = 5
a[2][1] = 6
a[3][0] = 7
a[3][1] = 8
a[4][0] = 9
a[4][1] = 10
**
然而,任何更改如以下代码总是错误的:
**
int main(void){
double matriz2[5][2] = {{10000,1000},
{100,10},
{1,0.1},
{0.01,0.001},
{0.0001,0.00001}};
double maior2 = matriz2[0][0];
double soma2 = 0;
int lin2 = 0;
int col2 = 0;
for (lin2 = 0; lin2 < 5; lin2++){
for (col2 = 0; col2 < 2; col2++){
if (maior2 < matriz2[lin2][col2]) {maior2 = matriz2[lin2][col2];}
soma2 += matriz2[lin2][col2];
}
}
printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma2, maior2);
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
printf("a[%d][%d] = %d\n", i,j, matriz2[i][j] );
}
}
return 0;}
输出总是错误的,因为我一直在改变它。 我声明了长双打、双打、整数和双打等。每次代码都输出错误的答案。 一些组合输出负数。其他人只是到处输出零。两个例子:
A soma dos numeros eh 0 e o maior numero eh 0
a[0][0] = 10000
a[0][1] = 1000
a[1][0] = 100
a[1][1] = 10
a[2][0] = 1
a[2][1] = 0
a[3][0] = 0
a[3][1] = 0
a[4][0] = 0
a[4][1] = 0
或
A soma dos numeros eh 953826337 e o maior numero eh 0
a[0][0] = 0
a[0][1] = 0
a[1][0] = 0
a[1][1] = 0
a[2][0] = 0
a[2][1] = -1717986918
a[3][0] = 1202590843
a[3][1] = -755914244
a[4][0] = -350469331
a[4][1] = -1998362383
我根本找不到在矩阵中声明或放置双数的方法。 我该怎么做?
%d
printf
的格式说明符需要一个 int
参数,但您传递的是 double
。然后您的程序会表现出未定义的行为。查阅您最喜欢的 C 或 C++ 教科书,了解如何输出 double
.
您已经标记了 C
和 C++
,您应该选择一个。我会给出两种语言的答案。
如果将 C
与 printf()
一起使用,当您将二维数组从 int
更改为 double
时,计算似乎没问题,但您的输出有问题printf()
。您正在使用 %d
,它需要一个 int
,但您将其传递给一个 double
,这会导致未定义的行为。使用 float
或 double
时,将其更改为 %f
或 %g
。
如果使用 C++
尽量不要使用 printf()
。相反,您应该包括 iostream
。然后你的输出看起来像:
// printf("A soma dos numeros eh %d e o maior numero eh %d\n", soma2, maior2);
std::cout << "A soma dos numerous eh " << soma2 << " e o maior numero eh << maior2 << '\n';
for ( i = 0; i < 5; i++ ) {
for ( j = 0; j < 2; j++ ) {
// printf("a[%d][%d] = %d\n", i,j, matriz2[i][j] );
std::cout << "a[" << i << "][" << j "] = " << matriz2[i][j] << '\n';
}
}