echo_chenchen 2022-10-15 10:17 采纳率: 80.2%
浏览 28
已结题

分子量计算,这里哪错了??


#include<stdio.h>
#include<ctype.h>
int main()
{
  const double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
  char str[100][100]={'\0'};
  char x;
  double sum[100]={0},n=0;
  int numble=0;
  scanf("%d",&numble);
  for(int j=0;j<numble;j++)
  {
      n=0;
      gets(str[j]);//???
     for(int i=0;i<numble;i++)
   {
     for(int i=0;str[j][i]!='\0';i++)
    {
      if(isalpha(str[j][i]))//是字母
        {
          x=str[j][i];
          sum[j]+=d[x-'A'];
        }
      else//是数字
        {
           n=str[j][i]-'0';
          while(isdigit(str[j][i+1]))
          {
              n=n*10;
              n+=str[j][i+1]-'0';
              i++;
          }
          sum[j]+=(n-1)*d[x-'A'];
        }
     }
     printf("%.3f",sum[j]);
    }
  }
}

img

  • 写回答

1条回答 默认 最新

  • qzjhjxj 2022-10-15 13:05
    关注

    重新修改见注释,供参考:

    #include<stdio.h>
    #include<ctype.h>
    int main()
    {
      const double d[]={0,0,12.01,0,0,0,0,1.008,0,0,0,0,0,14.01,16.00};
      char str[100]={'\0'};  //[100] 修改
      char x , fx;           //修改
      double sum[100]={0},n=0;
      int numble=0;
      scanf("%d",&numble);
      getchar();            //修改
      for(int j=0;j<numble;j++)
      {
    
          scanf("%s", str); //gets(str[j]);
                            //for(int i=0;i<numble;i++) 修改
          n=0;              //{                         修改
          for(int i=0;str[i]!='\0';i++)
          {
              if(isalpha(str[i]))//是字母
              {
                  x=str[i];
                  sum[j]+=d[x-'A'];
                  if (n != 0)
                       sum[j] += (n-1)*d[fx-'A'];
                  fx = x;
                  n=0;
              }
              else//是数字
              {
                  n = n * 10 + str[i]-'0';
                      //while(isdigit(str[j][i+1]))
                      //{
                       //   n=n*10;
                       //   n+=str[j][i+1]-'0';
                       //   i++;
                       //}
                  if (str[i+1] == '\0')
                       sum[j] += (n-1)*d[fx-'A'];
              }
          }
          printf("%.3f\n",sum[j]);
                       //}修改
      }
      return 0;
    }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 10月23日
  • 已采纳回答 10月15日
  • 创建了问题 10月15日

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看