标题:小白求大佬检查错误!爸爸!while之后的语句为什么不能被执行?
只看楼主
xiaohu1102
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2019-10-24
 问题点数:0 回复次数:3 
小白求大佬检查错误!爸爸!while之后的语句为什么不能被执行?
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define M 33*pow(10,5)
int f1(double B[])
{int i;                                                
double k=B[0];
for(i=1;i<11;i++){if(k>B[i])k=B[i];}
printf("最小的σj:%14.2f\n",k);
i=0;
while(k!=B[i]){i++;}
printf("最小的σj所在列为%d\n",i+1);
if(k<0)return(i+1);
}
int f2(double B[][12],int m)
{int i;
double C[6],k;
for(i=0;i<6;i++){if(B[i][m-1]!=0){C[i]=B[i][11]/B[i][m-1];}else{C[i]=100*M;}}
for(i=0;i<6;i++)printf("θi的数值%14.4f\n",C[i]);
for(i=0;i<6;i++){if(C[i]<0)C[i]=1000*M;}
k=C[0];
for(i=1;i<6;i++){if(k>C[i]) k=C[i];}
printf("最小θi为%14.4f\n",k);
i=0;
while(k!=C[i]){i++;}
printf("最小θi的所在行为%d\n",i+1);
return(i+1);
}
main()
{int i,j,in,out,G[11]={1,2,3,4,5,6,7,8,9,10,11},N[6]={6,7,8,9,10,11};
double a[11]={0.38,0.41,0.55,0,0,0,0,0,M,M,M},min;                                 
double h[6][12]={{0.0061,0.0194,0.0046,0,0,1,0,0,0,0,0,0.0061},
{0.421,0.3248,0.2137,0,0,0,1,0,0,0,0,0.272},
{0.18,0.162,0.11,0,0,0,0,1,0,0,0,0.14},
{1,1,1,0,0,0,0,0,1,0,0,1},
{13.536,17.793,24.346,-1,0,0,0,0,0,1,0,21.032},
{0.2191,0.385,0.3848,0,-1,0,0,0,0,0,1,0.371}
};                                                                           
double E[11],g,J[6]={0,0,0,M,M,M};
int k=5;double p,q[12],r[6];
printf("Cj ");
for(i=0;i<11;i++)
printf("%6.2f",a[i]);
printf("\n");
printf("    X1     X2      X3    X4     X5     X6     X7      X8    X9     X10    X11   b\n");
for(i=0;i<6;i++)
for(j=0;j<12;j++)
{printf("%7.4f",h[i][j]);
if((j+1)%12==0)printf("\n");}
printf("\n");
for(i=0;i<6;i++)
printf("%10d",N[i]);
printf("\n");
do{
printf("σj= ");
for(j=0;j<11;j++)              
{g=0;
for(i=0;i<6;i++){g=J[i]*h[i][j]+g;}
E[j]=a[j]-g;
printf("%14.2f",E[j]);}                        
printf("\n");
printf("\n");
in=f1(E);      
out=f2(h,in);  
J[out-1]=a[in-1];
p=h[out-1][in-1];
for(j=0;j<12;j++) q[j]=h[out-1][j]/p;
for(i=0;i<6;i++)
r[i]=h[i][in-1];
printf("\n");
for(i=0;i<6;i++)
for(j=0;j<12;j++){h[i][j]=h[i][j]-r[i]*q[j];}
for(j=0;j<12;j++)h[out-1][j]=q[j];
for(i=0;i<6;i++)
for(j=0;j<12;j++)
{printf("%12.4f",h[i][j]);
if((j+1)%12==0)printf("\n");}
printf("\n");
printf("基本变量的下标");
N[out-1]=G[in-1];for(i=0;i<6;i++)
printf("%10d",N[i]);
printf("\n");
printf("基本变量的系数");
for(i=0;i<6;i++)printf("%14.2f",J[i]);printf("\n");
printf("\n");
min=0;
for(i=0;i<6;i++)min=J[i]*h[i][11]+min;
printf("min S=%10.4f\n",min);
printf("\n");printf("要按回车键才能继续往下算哦...\n");printf("必须按回车哦......\n");
printf("如果这个exe自动关闭了就说明计算过程已经完成了\n");
printf("这个exe关闭之前得到的值就是最小的min S值\n");
getchar();
}while(in!=0);
system("pause");
}




搜索更多相关主题的帖子: printf double int for i++ 
2019-10-24 22:40
纯蓝之刃
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:76
帖 子:554
专家分:3690
注 册:2019-7-29
得分:0 
你是指的哪个while后面的语句没有执行。你这个代码太乱了,自己看着不难受么。要想问题少,首先就应该书写规范。
好多for嵌套的后面都没有加{},不知道是你就是想要那么短的作用域,还是忘记加了,还是不了解for循环后作用域的范围。
程序代码:
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define M 33*pow(10,5)

int f1(double B[])
{
    int i;
    double k=B[0];
    for(i=1;i<11;i++)
        if(k>B[i])
            k=B[i];
    printf("最小的σj:%14.2f\n",k);
    i=0;
    while(k!=B[i])
        i++;
    printf("最小的σj所在列为%d\n",i+1);
    if(k<0)
        return(i+1);
}

int f2(double B[][12],int m)
{
    int i;
    double C[6],k;
    for(i=0;i<6;i++)
    {
        if(B[i][m-1]!=0)
            C[i]=B[i][11]/B[i][m-1];
        else
            C[i]=100*M;
    }
    for(i=0;i<6;i++)
        printf("θi的数值%14.4f\n",C[i]);
    for(i=0;i<6;i++)
        if(C[i]<0)C[i]=1000*M;
    k=C[0];
    for(i=1;i<6;i++)
        if(k>C[i]) 
            k=C[i];
    printf("最小θi为%14.4f\n",k);
    i=0;
    while(k!=C[i])
        i++;
    printf("最小θi的所在行为%d\n",i+1);
    return(i+1);
}

main()
{
    int i,j,in,out,G[11]={1,2,3,4,5,6,7,8,9,10,11},N[6]={6,7,8,9,10,11};
    double a[11]={0.38,0.41,0.55,0,0,0,0,0,M,M,M},min;
    double h[6][12]=    {{0.0061,0.0194,0.0046,0,0,1,0,0,0,0,0,0.0061},
                        {0.421,0.3248,0.2137,0,0,0,1,0,0,0,0,0.272},
                        {0.18,0.162,0.11,0,0,0,0,1,0,0,0,0.14},
                        {1,1,1,0,0,0,0,0,1,0,0,1},
                        {13.536,17.793,24.346,-1,0,0,0,0,0,1,0,21.032},
                        {0.2191,0.385,0.3848,0,-1,0,0,0,0,0,1,0.371}};
    double E[11],g,J[6]={0,0,0,M,M,M};
    int k=5;
    double p,q[12],r[6];
    printf("Cj ");
    for(i=0;i<11;i++)
        printf("%6.2f",a[i]);
    printf("\n");
    printf("    X1     X2      X3    X4     X5     X6     X7      X8    X9     X10    X11   b\n");
    for(i=0;i<6;i++)
        for(j=0;j<12;j++)
        {
            printf("%7.4f",h[i][j]);
            if((j+1)%12==0)
                printf("\n");
        }
    printf("\n");
    for(i=0;i<6;i++)
        printf("%10d",N[i]);
    printf("\n");
    do
    {
        printf("σj= ");
        for(j=0;j<11;j++)
        {
            g=0;
            for(i=0;i<6;i++)
                g=J[i]*h[i][j]+g;
            E[j]=a[j]-g;
            printf("%14.2f",E[j]);
        }
        printf("\n");
        printf("\n");
        in=f1(E);
        out=f2(h,in);
        J[out-1]=a[in-1];
        p=h[out-1][in-1];
        for(j=0;j<12;j++)
            q[j]=h[out-1][j]/p;
        for(i=0;i<6;i++)
            r[i]=h[i][in-1];
        printf("\n");
        for(i=0;i<6;i++)
            for(j=0;j<12;j++)
                h[i][j]=h[i][j]-r[i]*q[j];
        for(j=0;j<12;j++)
            h[out-1][j]=q[j];
        for(i=0;i<6;i++)
            for(j=0;j<12;j++)
            {
                printf("%12.4f",h[i][j]);
                if((j+1)%12==0)
                    printf("\n");
            }
        printf("\n");
        printf("基本变量的下标");
        N[out-1]=G[in-1];
        for(i=0;i<6;i++)
            printf("%10d",N[i]);
        printf("\n");
        printf("基本变量的系数");
        for(i=0;i<6;i++)
            printf("%14.2f",J[i]);
        printf("\n");
        printf("\n");
        min=0;
        for(i=0;i<6;i++)
            min=J[i]*h[i][11]+min;
        printf("min S=%10.4f\n",min);
        printf("\n");
        printf("要按回车键才能继续往下算哦...\n");printf("必须按回车哦......\n");
        printf("如果这个exe自动关闭了就说明计算过程已经完成了\n");
        printf("这个exe关闭之前得到的值就是最小的min S值\n");
        getchar();
    }while(in!=0);
    system("pause");
}

一沙一世界,一花一天堂。无限掌中置,刹那成永恒。
2019-10-25 14:21
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
写代码为了自己以后翻阅最好加一些注释。
虽然不清楚你这个程序做什么用的,不过这个循环体运行了几次之后,后面的结果就都是一样的,而且in的值不会等于0.

[此贴子已经被作者于2019-10-28 06:19编辑过]

2019-10-28 03:57
bcbbcclbbc
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:11
帖 子:194
专家分:528
注 册:2019-8-15
得分:0 
回复 楼主 xiaohu1102
#include "stdio.h"
#include "math.h"
#include "stdlib.h"
#define M 33*pow(10,5)
int f1(double B[])  //一个一维数列的最小值k。若k<0,则返回k所在的列。
{int i;                                                
double k=B[0];
for(i=1;i<11;i++) if(k>B[i])k=B[i];
printf("最小的σj:%14.2f\n",k);
i=0;
while(k!=B[i]) i++;
printf("最小的σj所在列为%d\n",i+1);
if(k<0) return(i+1);  //这里只有k<0时,才指定返回值,没有考虑到k>=0时,函数返回的值,就会出现问题。
}
int f2(double B[][12],int m)   //一个数列的最小值k。返回k所在的行。
{int i;
double C[6],k;
for(i=0;i<6;i++)if(B[i][m-1]!=0) C[i]=B[i][11]/B[i][m-1];
                   else C[i]=100*M;

for(i=0;i<6;i++) printf("θ%d的数值%14.4f\n",i,C[i]); //输出数组的各个元素。

for(i=0;i<6;i++) if(C[i]<0) C[i]=1000*M;
k=C[0];
for(i=1;i<6;i++) if(k>C[i]) k=C[i];
printf("最小θi为%14.4f\n",k);

i=0;
while(k!=C[i]) i++;
printf("最小θi的所在行为%d\n",i+1);
return(i+1);
}
int main()
{
int G[11]={       1     ,       2,     3, 4, 5, 6, 7, 8, 9,10,11};
double a[11]={    0.38  , 0.41   ,0.55  , 0, 0, 0, 0, 0, M, M, M};                                 
double h[6][12]={{0.0061, 0.0194, 0.0046, 0, 0, 1, 0, 0, 0, 0, 0, 0.0061},
                 {0.421 , 0.3248, 0.2137, 0, 0, 0, 1, 0, 0, 0, 0, 0.272 },
                 {0.18  , 0.162 , 0.11  , 0, 0, 0, 0, 1, 0, 0, 0, 0.14  },
                 {1     , 1     , 1     , 0, 0, 0, 0, 0, 1, 0, 0, 1     },
                 {13.536,17.793 ,24.346 ,-1, 0, 0, 0, 0, 0, 1, 0, 21.032},
                 {0.2191, 0.385 , 0.3848, 0,-1, 0, 0, 0, 0, 0, 1, 0.371 }};        
double p,g,min;                                                                    
double E[11],q[12],r[6];
double J[6]={0,0,0,M,M,M};
int N[6]={6,7,8,9,10,11};
int i,j,in,out,k=5;
//蓝色字体放在循环体外面,比较合理。这样重复项输出太多了。
//--------------输出数组a的元素。----------------
printf("Cj ");  
for(i=0;i<11;i++)
printf("%6.2f",a[i]);
printf("\n");

//--------------输出数组h的元素。----------------
printf("    X1     X2      X3    X4     X5     X6     X7      X8    X9     X10    X11   b\n");
for(i=0;i<6;i++)
for(j=0;j<12;j++)
{printf("%7.4f",h[i][j]);
if((j+1)%12==0)printf("\n");} printf("\n");

//--------------输出数组N的元素。----------------
for(i=0;i<6;i++) printf("%10d",N[i]); printf("\n");


int z=15;  //可以定义一个变量,循环多少次
do{

//--------------赋值并输出数组E的元素。----------------
printf("σj= ");
for(j=0;j<11;j++)              
{g=0;
for(i=0;i<6;i++) g=J[i]*h[i][j]+g;
E[j]=a[j]-g;   printf("%14.2f",E[j]);}
printf("\n"); printf("\n");

in=f1(E);      
out=f2(h,in);  
printf("*******************%d,%d,%d",in,out,15-z);  //循环中加入输出in和out的值。
J[out-1]=a[in-1];
p=h[out-1][in-1];

for(j=0;j<12;j++) q[j]=h[out-1][j]/p;
for(i=0;i<6;i++) r[i]=h[i][in-1];
printf("\n");
for(i=0;i<6;i++)  for(j=0;j<12;j++) h[i][j]=h[i][j]-r[i]*q[j];

for(j=0;j<12;j++) h[out-1][j]=q[j];

//--------------输出数组N更新后的元素。----------------
for(i=0;i<6;i++)
   for(j=0;j<12;j++) {printf("%12.4f",h[i][j]); if((j+1)%12==0) printf("\n");}
printf("\n");

printf("基本变量的下标");
N[out-1]=G[in-1];
for(i=0;i<6;i++) printf("%10d",N[i]);
printf("\n");

printf("基本变量的系数");
for(i=0;i<6;i++) printf("%14.2f",J[i]);
printf("\n"); printf("\n");

min=0;
for(i=0;i<6;i++) min=J[i]*h[i][11]+min;
printf("min S=%10.4f\n",min); printf("\n");

printf("要按回车键才能继续往下算哦...\n");printf("必须按回车哦......\n");
printf("如果这个exe自动关闭了就说明计算过程已经完成了\n");
printf("这个exe关闭之前得到的值就是最小的min S值\n");


getchar();
}
while(--z);      
//while(in!=0);

system("pause");
return 0;
}

[此贴子已经被作者于2019-10-28 06:13编辑过]

2019-10-28 06:04



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-497430-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.301181 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved