吴NDIR 2023-12-13 20:56 采纳率: 100%
浏览 5
已结题

C++同一代码不同运行结果

在devc++和另一平台运行结果。前者不符合预期,fun3函数中第二个for循环未执行。

↓devc++结果

img


↓其他平台结果(符合预期)

img

#include <iostream>
#include <string>
using namespace std;
struct content
{
  float s;
  float j;
  float k;
  float v;
  float z;
  float d;
};
int max(int x,int y)
{
    return x>y?x:y;
}
void prt(struct content a[],int n)
{
  int i;
  a[0].k=a[0].s;
  a[0].v=a[0].k+a[0].j;
  a[0].z=a[0].v-a[0].s;
  a[0].d=a[0].z/a[0].j;
  float sum=a[0].z,add=a[0].d;
  for(i=1;i<n;i++)
  {
    if(a[i].s<=a[i-1].v) a[i].k=a[i-1].v;
    else a[i].k=a[i].s;
    a[i].v=a[i].k+a[i].j;
    a[i].z=a[i].v-a[i].s;
    a[i].d=a[i].z/a[i].j;
    sum+=a[i].z;
    add+=a[i].d;
  }
  printf("--------------------------------------------------");
  printf("\n平均周转时间:%.4f",sum/n);
  printf("\n平均带权周转时间:%.4f\n",add/n);
  printf("提交\t执行\t开始\t完成\t周转\t带权周转\n");
  for(i=0;i<n;i++)
  {
    printf("%.2f\t%.2f\t%.2f\t%.2f\t%.2f\t%.2f\n",a[i].s,a[i].j,a[i].k,a[i].v,a[i].z,a[i].d);
  }
  printf("--------------------------------------------------");
  printf("\n\n请输入接下来的操作:\n");
}
void fun1(struct content a[],int n)
{
  int i,j;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-1-i;j++)
    {
      if(a[j].s>a[j+1].s)
      {
        float temp=a[j].s;
        a[j].s=a[j+1].s;
        a[j+1].s=temp;
        temp=a[j].j;
        a[j].j=a[j+1].j;
        a[j+1].j=temp;
      }
    }
  }
  prt(a,n);
}
void fun2(struct content a[],int n)
{
  int i,j;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-1-i;j++)
    {
      if(a[j].j>a[j+1].j)
      {
        float temp=a[j].s;
        a[j].s=a[j+1].s;
        a[j+1].s=temp;
        temp=a[j].j;
        a[j].j=a[j+1].j;
        a[j+1].j=temp;
      }
    }
  }
  prt(a,n);
}
void fun3(struct content a[],int n)
{
  int i,j;
  for(i=0;i<n-1;i++)
  {
    for(j=0;j<n-1-i;j++)
    {
      if(a[j].s>a[j+1].s)
      {
        float temp=a[j].s;
        a[j].s=a[j+1].s;
        a[j+1].s=temp;
        temp=a[j].j;
        a[j].j=a[j+1].j;
        a[j+1].j=temp;
      }
    }
  }
  a[0].v=a[0].s+a[0].j; 
    for(i=1;i<n-1;i++)
  {
      for(j=1;j<n-i;j++)
      {
        if(((a[j].j-a[j].s+a[0].v)/a[j].j)<((a[j+1].j-a[j+1].s+a[0].v)/a[j+1].j))
        {
            float temp=a[j].s;
            a[j].s=a[j+1].s;
            a[j+1].s=temp;
            temp=a[j].j;
            a[j].j=a[j+1].j;
            a[j+1].j=temp;
        }
    }
  }
  prt(a,n); 
}
int markzhu()
{
  int pd;
  printf("1.开始输入数据\n2.退出程序\n");
  while(1)
  {
    scanf("%d",&pd);
    if(pd<1||pd>2) printf("\n输入错误,请重新输入:");
    else break;
  }
  return pd;
}
int marks()
{
  int pd;
  printf("请选择算法(输入序号):\n1.先来先服务算法\n2.短作业优先\n3.优先比算法\n4.返回\n");
    while(1)
    {
      scanf("%d",&pd);
      if(pd<1||pd>4) printf("\n输入错误,请重新输入:");
      else break;
    }
  return pd;
}
int main()
{
  while(1)
  {
    int pd=markzhu();
    if(pd==1)
    {
      while(1)
      {
        struct content a[20];
        int pd=marks(),i=0;
        if(pd==4) break;
        printf("输入0,0结束\n");
        do
        {
          printf("请输入第%d组数据(提交时刻,执行时间):",(i+1));
          scanf("%f,%f",&a[i].s,&a[i].j);
          i++;
        }while(a[i-1].s!=0&&a[i-1].j!=0);
        if(pd==1) 
        {
          fun1(a,i-1);
          break;
        }
        if(pd==2)
        {
          fun2(a,i-1);
          break;
        }
        if(pd==3)
        {
            fun3(a,i-1);
            break;
        }
      }
    }
    if(pd==2) break;
  }
}

fun3函数代码图片

img

  • 写回答

1条回答 默认 最新

  • 哎呀呀不会啊 2023-12-14 11:32
    关注

    img


    浮点数是以二进制表示的,有些十进制小数无法精确地用二进制表示,因此会出现误差

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月22日
  • 已采纳回答 12月14日
  • 创建了问题 12月13日

悬赏问题

  • ¥15 Opencv(C++)异常
  • ¥15 VScode上配置C语言环境
  • ¥15 汇编语言没有主程序吗?
  • ¥15 这个函数为什么会爆内存
  • ¥15 无法装系统,grub成了顽固拦路虎
  • ¥15 springboot aop 应用启动异常
  • ¥15 matlab有关债券凸性久期的代码
  • ¥15 lvgl v8.2定时器提前到来
  • ¥15 qtcp 发送数据时偶尔会遇到发送数据失败?用的MSVC编译器(标签-qt|关键词-tcp)
  • ¥15 cam_lidar_calibration报错