1. 程式人生 > >紫書 習題3-2 分子量(字符串,常量數組)

紫書 習題3-2 分子量(字符串,常量數組)

strlen 1.0 進入 num 復位 %d ble i+1 對數

#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\n",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]!=‘\0‘)
        {
            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\n",w);
    }
    return 0;
}
/*
解題思路:

1.將分子量用double 數組記錄下來

2.將字符串存儲在字符數組中,從頭向後掃描,一直記住“字母”,對下一個字符進行判斷,是否是數字,如果是數字:用一個整數記錄,本代碼中用的sum,同時下標++。

  進行判斷,查看是否對數字進行了記錄,即查看sum是否進入了while循環並被賦值,如果沒有被賦值,說明下一個字符不是數字,直接對W(總記錄)值進行賦值,為當前字符的權值(分子量),即double數組的中的值。如果被賦值,說明字符後面是一個數字,sum中存放了該“數字”,也是對w賦值,不過此時是賦sum倍的當前字符的權值(分子量)。

3.最後整個字符串循環完畢,輸出總記錄W即可。*/

  

紫書 習題3-2 分子量(字符串,常量數組)