Advertisement
Guest User

Untitled

a guest
Jul 19th, 2019
122
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.28 KB | None | 0 0
  1. #include <iostream>
  2. #include <math.h>
  3. #define MAX 10
  4. using namespace std;
  5. double A[MAX][MAX]; //系数矩阵
  6. int NUM; // A的阶数
  7. int size; //最大迭代次数
  8. int t; //标记最大的数所在的行
  9. double Max; //比较每列时暂时存放最大的数
  10. double tmp; //用于交换时存放中间变量的
  11. double tmp1; //存储中间变量以减少计算量
  12. int sign = 0; //标记行交换的次数
  13. int main(void)
  14. {
  15. int i, j, k; //计数器
  16. //以下代码输入系数矩阵A,右端项b
  17. cout << "请输入行列式A的阶数:";
  18. cin >> NUM;
  19. size = NUM;
  20. for (i = 1; i <= size; i++)
  21. {
  22. cout << "请输入A的第" << i << "行元素,各元素间以空格间隔:\n";
  23. for (j = 1; j <= size; j++)
  24. cin >> A[i - 1][j - 1];
  25. }
  26. //在屏幕中输出用户输入的行列式A
  27. cout << "\n您输入的维度是:" << NUM << endl
  28. << "您输入的矩阵A[][]:\n"; //在屏幕中输出用户输入的矩阵A
  29. for (i = 0; i < size; i++)
  30. {
  31. for (j = 0; j < size; j++)
  32. cout << A[i][j] << "\t";
  33. cout << "\n\n";
  34. }
  35. for (i = 0; i < size - 1; i++)
  36. {
  37. t = i;
  38. Max = A[i][i];
  39. for (j = i + 1; j < size; j++) //判断每列的最大数,并将其放到主对角线上
  40. {
  41. if (fabs(Max) < fabs(A[j][i]))
  42. //当某一行大于k时将其赋值给k,并将其所在行标记下来
  43. {
  44. Max = A[j][i];
  45. t = j;
  46. }
  47. }
  48. if (fabs(Max) < 0.000001) //判断矩阵是否为奇异阵
  49. {
  50. printf("行列式的值是: 0 ");
  51. break;
  52. }
  53. if (t != i) //当t不等于i时交换这两行的所有元素
  54. {
  55. sign++;
  56. for (j = i; j <= size; j++)
  57. {
  58. tmp = A[i][j];
  59. A[i][j] = A[t][j];
  60. A[t][j] = tmp;
  61. }
  62. }
  63. for (j = i + 1; j < size; j++) //消去过程,化为上三角的形式
  64. {
  65. tmp1 = A[j][i] / A[i][i]; // tmp1避免了p每次变化时都要计算这个
  66. for (k = i; k < size + 1; k++) // p=i注意了啊!!
  67. A[j][k] = A[j][k] - A[i][k] * tmp1;
  68. }
  69. }
  70. tmp1 = 1;
  71. for (i = 0; i < size; i++) //求化简后行列式的值
  72. tmp1 *= A[i][i];
  73. if (sign % 2 == 0)
  74. cout << "行列式的值是:" << tmp1 << "\n";
  75. else
  76. cout << "行列式的值是:" << -tmp1 << "\n";
  77. return 0;
  78. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement