无法弄清楚 printf 语句

时间:2021-04-27 02:22:29

标签: c loops matrix printf

高斯乔丹 3x4

用户输入 12 个值

这段代码的目的是使用高斯乔丹方法将一个矩阵减少到 简化梯形

所以基本上我正在尝试编写和调试高斯乔丹算法,但我被我的 printf 语句的去向卡住了。我想在运行输出中标记我的步骤 1-12,但是当我运行它时,一切似乎都不合适:

[![在此处输入图片描述][1]][1]

*我还在我的代码中故意省略了第 1、4、9 步,因为它们与我应用算法的情况无关,如果这会引起混淆,抱歉

如果您有任何帮助或建议,我将不胜感激

#include <stdio.h>

int main(void) {

        int i,j,z,m;
        //coefficent array
        double a[3][3];
        //constant value array
        double b[3];
        //augmented array
        double c[3][4];
        //solution array
        double x[3];

        //prompt user input and store coefficients and constants in seperate matrices
        printf("Input coefficients of equations\n");
        for (i=0; i<3; i++){
                for (j=0; j<3; j++){

                        scanf("%lf", &a[i][j]);
                }
        }

        printf("Input constant values\n");
        for (i=0; i<3; i++){

                scanf("%lf",&b[i]);
        }

        //create augmented matrix
        for (i=0; i<3; i++){

                for(j=0; j<3; j++){

                        c[i][j]=a[i][j];
                }
        }

        for (i=0; i<3; i++){

                c[i][3]=b[i];
        }

        printf("Augmented matrix:\n");

        //print loop
        for (i=0; i<3; i++){

                for (j=0; j<4; j++){

                        printf("%.2lf\t",c[i][j]);

                }
        printf("\n");
        }

        /*z=0 step 2,3,4
        z=1 step 6,7,8
        z=2 step 10,11,12


        if m!=z, do steps 3,4  7,8  11,12
        if m==z, do steps 2,6,10

        */

        for (z=0; z<3; z++){

                for (m=0; m<3; m++){

                                if(m==z){
                                        //STEP 2,6,10
                                        double step2 = c[z][z];
                                        for (j=0; j<4; j++){

                                        c[z][j]=c[z][j]/step2;
                                        }


                                        if(z==0){
                                        printf("Step 2:\n");
                                        }
                                        if(z==1){
                                        printf("Step 6:\n");
                                        }
                                        if(z==2){
                                        printf("Step 10:\n");
                                        }

                                         //print loop
                                        for (i=0; i<3; i++){

                                                for (j=0; j<4; j++){

                                                        printf("%.2lf\t",c[i][j]);

                                                }
                                                printf("\n");
                                        }

                                }

                                if(m!=z){

                                        //STEP 3,7,11
                                        double step3 = c[m][z];
                                        for (j=0; j<4; j++){

                                        c[m][j]=c[m][j]-(step3*c[z][j]);
                                        }


                                        if(z==0&&m==1){
                                        printf("Step 3:\n");
                                        }
                                        if(z==1&&m==2){
                                        printf("Step 7:\n");
                                        }
                                        if(z==2&&m==1){
                                        printf("Step 11:\n");
                                        }

                                        //print loop
                                        for (i=0; i<3; i++){

                                                 for (j=0; j<4; j++){

                                                         printf("%.2lf\t",c[i][j]);

                                                 }
                                                 printf("\n");
                                        }


                                        //STEP 4,8,12
                                        double step4= c[m][z];
                                        for (j=0; j<4; j++){

                                        c[m][j]=c[m][j]-(step4*c[z][j]);
                                        }


                                        if(z==0&&m==2){
                                        printf("Step 4:\n");
                                        }
                                        if(z==1&&m==0){
                                        printf("Step 8:\n");
                                        }
                                        if(z==2&&m==0){
                                        printf("Step 12:\n");
                                        }

                                        //print loop
                                        for (i=0; i<3; i++){

                                                for (j=0; j<4; j++){

                                                        printf("%.2lf\t",c[i][j]);

                                                }
                                                printf("\n");
                                        }
                                }
                }

        }

        printf("Solution:\n");

        for (i=0; i<3; i++){
                x[i]= c[i][3];
        }

        for (j=1; j<=3; j++){
                printf("x[%i]=%.2lf\n",j,x[j-1]);
        }
return 0;
}


  [1]: https://i.stack.imgur.com/Z0ZvZ.png

0 个答案:

没有答案