我需要做一個計算項目,計算用戶輸入的任何分子的摩爾質量。 例如,如果用戶鍵入CO2,我的程序需要識別C(與質量相關的矩陣),然後確定O(與其質量相關)並將其乘以2,然後將它們相加。C中的分子質量計算器程序
我正在考慮爲每個元素使用字符串。
我在編程方面很新穎,而且我已經非常瞭解基礎知識。
你們會如何推薦我這麼做? Im相當失去
非常感謝您
我需要做一個計算項目,計算用戶輸入的任何分子的摩爾質量。 例如,如果用戶鍵入CO2,我的程序需要識別C(與質量相關的矩陣),然後確定O(與其質量相關)並將其乘以2,然後將它們相加。C中的分子質量計算器程序
我正在考慮爲每個元素使用字符串。
我在編程方面很新穎,而且我已經非常瞭解基礎知識。
你們會如何推薦我這麼做? Im相當失去
非常感謝您
這似乎是很大的挑戰這裏解析文本,這樣你就可以通過全要素的功能做你的計數。你需要一個字符串來接受輸入,但我強烈建議你遠離std字符串。
而是嘗試一個字符數組。
有些事情要考慮:
多大確實陣列需要是什麼?
我會接受什麼樣的角色? (空格?)
如何知道用戶何時完成輸入? (東西以null結尾......)
我將如何移動數組?
什麼定義了一個元素? (如果是大寫字母,請查看ASCII值以便比較它們)
當我找到它時,如何處理元素?
你問了一個出發的地方,所以我不願意給出任何特定的代碼。看看Jongware的評論,爲您的程序需要做的一個很好的概述。一次處理它一塊(回答這篇文章中的問題,你會很好的輸入),當你完成後檢查你的輪廓。祝你好運!
雖然您有一個答案,但我會建議您仔細看看您的問題後發佈的第一條評論。不管你如何分片,你都必須以字符串的形式解析用戶輸入。雖然解析類似"Li3Co4CO2"
的東西來得到每個元素的原子權重似乎令人望而生畏,但將其乘以正確的乘數並保持運行總和,可以用2個指針和一個嵌套的while循環完成。
就拿在argv[1]
用戶輸入並指定爲指針p
:
char *p = argv[1];
你現在需要的是一個while
循環來檢查字符串中的每個字符:
while (*p) {
在循環,您需要做的就是識別每個元素大寫字母后跟任意小寫和終止數字(如果有)在下一個Cap或空終止字符(字符串的結尾)之前。因此,分配一個結束指針說ep
並處理與嵌套while
循環的字符串。 (我們將添加乘數來保存數字,以及稍後使用的符號長度)我們跳過p
(char *ep = p + 1;
)中的第一個字符,所以我們將初始化符號長度爲1
(乘數始終始於1 ):
char *ep = p + 1; /* end pointer */
char m = 1; /* multiplier */
size_t symlen = 1; /* symbol len */
...
/* for each char in p until next CAP */
while (*ep && (*ep < 'A' || 'Z' < *ep)) {
/* if digit */
if ('0' <= *ep && *ep <= '9')
m = *ep - '0'; /* set multiplier */
else
symlen++; /* increment len */
ep++;
}
您現在擁有所有需要複製/搜索符號的信息,然後將權重添加到運行總和。要完成隔離的符號,你可以簡單地使用你的symlen
隨着strncpy
的符號複製到一個臨時數組/字符串:
char srchsym[8] = {0}; /* search sym */
strncpy (srchsym, p, symlen);
srchsym[symlen] = 0; /* null-terminate */
(在技術上不是因爲你初始化srchsym[8] = {0};
需要手動空終止,但它是一種好習慣)
現在剩下的就是在週期表(結構數組)中搜索srchsym
,並返回一個指向與匹配搜索符號的元素對應的數組的元素的指針(原子符號)。一旦你有一個數據指針在週期表中,保持運行總和wt
很簡單,只要:
wt += (float)m * ptp->atwt;
(其中ptp
- 指針元素週期表及結構atwt
的元素是原子量)。隨着計算完成的第一個元素,只需提前指針p
的字符串中的下蓋,並重復:
p = ep;
}
完成後,可以打印結果:
printf ("\n %s (atomic weight) : %.3f\n\n", argv[1], wt);
如果您願意,還可以讓循環打印輸出的每個元素,因爲它是通過srchsym
搜索返回的。對於假設"Li3Co4CO2"
一個例子是:
$ ./bin/ptable Li3Co4CO2
element : Lithium
symbol : Li
atomic num : 3
atomic wt. : 6.941
element : Cobalt
symbol : Co
atomic num : 27
atomic wt. : 58.933
element : Carbon
symbol : C
atomic num : 6
atomic wt. : 12.011
element : Oxygen
symbol : O
atomic num : 8
atomic wt. : 15.999
Li3Co4CO2 (atomic weight) : 300.565
祝你好運,讓我知道你是否需要額外的幫助件裝配在一起。
1.合適原子名稱及其質量的表格 - 一個'struct'。 2.掃描大寫字母,然後選擇多個小寫字母。 3.掃描數字。 4.相乘並添加。 5.沖洗並重復,直到繩子結束。 6.利潤。 – usr2564301