紫書 習題3-2 分子量(字符串,常量數組)
阿新 • • 發佈:2017-07-18
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 分子量(字符串,常量數組)