zoukankan      html  css  js  c++  java
  • 紫书 习题3-2 分子量(字符串,常量数组)

    #include<stdio.h>
    #include<string.h>
    int main()
    {
        int t,i,num;
    
        char a[]={'C','H','O','N'};
        double n[]={12.01,1.008,16.00,14.01};//此所谓之常量数组的妙用
        char s[105];
    
        double sum;
    
        scanf("%d",&t);
        while(t--)
        {
            sum=0;//每次多组数据输入时sum复位
            scanf("%s",s);
            for(i=0;i<strlen(s);i++)
            {
                if(s[i+1]>='0'&&s[i+1]<='9')//字符后面带数字
                {
                    if(s[i+2]>='0'&&s[i+2]<='9')//带了两位数字
                    {
                        num=10*(s[i+1]-'0')+(s[i+2]-'0');
                    }
                    else//带了一位数字
                        num=s[i+1]-'0';
                }
    
                else//不带数字
                    num=1;
    
                         if(s[i]==a[0]) sum += num*n[0];
                    else if(s[i]==a[1]) sum += num*n[1];
                    else if(s[i]==a[2]) sum += num*n[2];
                    else if(s[i]==a[3]) sum += num*n[3];
            }
    
            printf("%.3f
    ",sum);
        }
        return 0;
    }
    

      

    #include <stdio.h>
    #include <string.h>
    int main()
    {
        double d[200];
        int n,sum,i;
        double w;
        char c,a[1000];
        d['C']=12.01;
        d['H']=1.008;
        d['O']=16.00;
        d['N']=14.01;  //常量数组的妙用
        scanf("%d",&n);
        while(n--)
        {
            i=0;
            w=0;
            scanf("%s",a);
            while(a[i]!='')
            {
                sum=0;
                c=a[i];
                i++;
                while(a[i]>='0' && a[i]<='9') //判断字符后面有多少数字的
                {
                    sum=sum*10+a[i]-'0';    //sum为数字大小/包括数字占后面1,2,3···位的
                    i++;                   //往后遍历是否有数字
                }
                if(sum)                  //若字符后面有数字,分子量=分子数*单位原子质量
                    w+=sum*(d[c]);
                else                    //若字符后面无数字
                    w+=(d[c]);
            }
            printf("%.3f
    ",w);
        }
        return 0;
    }
    /*
    解题思路:
    
    1.将分子量用double 数组记录下来
    
    2.将字符串存储在字符数组中,从头向后扫描,一直记住“字母”,对下一个字符进行判断,是否是数字,如果是数字:用一个整数记录,本代码中用的sum,同时下标++。
    
      进行判断,查看是否对数字进行了记录,即查看sum是否进入了while循环并被赋值,如果没有被赋值,说明下一个字符不是数字,直接对W(总记录)值进行赋值,为当前字符的权值(分子量),即double数组的中的值。如果被赋值,说明字符后面是一个数字,sum中存放了该“数字”,也是对w赋值,不过此时是赋sum倍的当前字符的权值(分子量)。
    
    3.最后整个字符串循环完毕,输出总记录W即可。*/
    

      

  • 相关阅读:
    rtmp推流
    git 分支操作
    git 当前分支推送的新的仓库地址
    git 修改当前项目的仓库地址,项目迁移,仓库修改
    linux 服务器测试端口连通性
    ffmpeg linux 安装
    rtmp 命令详解
    slf4j和log4j源代码解析以及详解
    聊聊java基础,int值强制类型转换成byte
    应用中并发控制技巧
  • 原文地址:https://www.cnblogs.com/Roni-i/p/7198143.html
Copyright © 2011-2022 走看看