【稽音のC語言】周刊虛擬歌手中文曲排行榜(中V周刊)得點(diǎn)計(jì)算器的C語言程序編寫
最近大學(xué)剛好開始了C語言的學(xué)習(xí),因?yàn)楦咧行畔⒓夹g(shù)課上也學(xué)過一點(diǎn)最基礎(chǔ)的C語言知識
所以寫起來比較輕松,除了最后隱式轉(zhuǎn)化為浮點(diǎn)運(yùn)算沒學(xué)過,問了下我們課程老師,基本沒什么問題。
中V周刊計(jì)算的程序


首先我們有了基礎(chǔ)變量:播放量(章節(jié)數(shù)默認(rèn)為1),評論,彈幕,收藏,點(diǎn)贊,硬幣
接著我們有了計(jì)算邏輯。
對于播放得點(diǎn),我們繼續(xù)設(shè)置中間變量,因?yàn)樽詈筮€要結(jié)合修正B算最終得點(diǎn)。
修正C同理。
此時(shí),我們可以通過一系列if和else的簡單嵌套來實(shí)現(xiàn)。
當(dāng)修正B>50或修正C>20時(shí),可以使用goto語句(少用為好)返回輸入變量的環(huán)節(jié)。
最后,計(jì)算修正A和最終得點(diǎn)
然后我們讓系統(tǒng)輸出幾個(gè)數(shù)據(jù),執(zhí)行完成。
2.程序設(shè)計(jì)實(shí)例(歡迎提出改進(jìn)建議)
#include <stdio.h>
#include <math.h>
int main()
{int playnumber,danmakunumber,coinnumber,likenumber,collectionnumber,commentnumber,midplay,midlike,finalplay,finallike;
//構(gòu)建變量存儲播放,彈幕,硬幣,點(diǎn)贊,收藏,評論,以及兩個(gè)得點(diǎn)的數(shù)據(jù)
float fixA,fixB,fixC;
//構(gòu)建變量存儲修正數(shù)值
L1:printf("請輸入播放數(shù)\n");
scanf("%d",&playnumber);
printf("請輸入彈幕數(shù)\n");
scanf("%d",&danmakunumber);
printf("請輸入硬幣數(shù)\n");
scanf("%d",&coinnumber);
printf("請輸入點(diǎn)贊數(shù)\n");
scanf("%d",&likenumber);
printf("請輸入收藏?cái)?shù)\n");
scanf("%d",&collectionnumber);
printf("請輸入評論數(shù)\n");
scanf("%d",&commentnumber);
//導(dǎo)入曲目在b站的各項(xiàng)數(shù)據(jù)
if (playnumber>10000)
midplay=playnumber/2+5000;
else
midplay=playnumber;
//基礎(chǔ)播放>10000時(shí),播放得點(diǎn)=播放量/2+5000
if (likenumber>2000)
? ? midlike=likenumber*2+4000;
else
? ? midlike=likenumber*4;
//基礎(chǔ)播放>2000時(shí),點(diǎn)贊得點(diǎn)計(jì)算
fixB=(collectionnumber*1.0/playnumber)*250.0;
//利用隱式轉(zhuǎn)化進(jìn)行浮點(diǎn)運(yùn)算,得到修正B
if (fixB>50.0)
{printf("修正B數(shù)值大于50,請重新輸入數(shù)據(jù) \n");
goto L1;}
//修正B上限為50的情況
else
fixC=(coinnumber*1.0/playnumber)*150.0;
//利用隱式轉(zhuǎn)化進(jìn)行浮點(diǎn)運(yùn)算,得到修正B
if (fixC>20.0)
{printf("修正C數(shù)值大于20,請重新輸入數(shù)據(jù) \n");
goto L1;}
//修正C上限為20的情況
else
if (fixB<10.0)
finalplay=midplay*fixB*0.1;
else
? ? finalplay=midplay;
//最終播放得點(diǎn)計(jì)算
if (fixC<5.0)
? ? finallike=midlike*fixC*0.2;
else
? ? finallike=midlike;
//最終點(diǎn)贊得點(diǎn)計(jì)算
fixA=pow((finalplay+collectionnumber)/(finalplay+collectionnumber+danmakunumber*10.0+commentnumber*20.0),2.0);
//修正A計(jì)算
printf("修正A:%f\n",fixA);
printf("修正B:%f\n",fixB);
printf("修正C:%f\n",fixC);
//輸出三項(xiàng)修正值
float score=finalplay+(commentnumber*25.0+danmakunumber)*fixA+collectionnumber*fixB+finallike+coinnumber*fixC;
//最終得分計(jì)算
printf("您的最終得點(diǎn)是:%f\n",score);
//輸出最終得點(diǎn)
return 0;
}
3.程序運(yùn)行實(shí)測

用周刊551期,我的27位作品《匿名L》進(jìn)行計(jì)算

結(jié)果如下:
得點(diǎn)29844分(四舍五入保留整數(shù))
修正A 0.74
修正B 9.69
修正C 1.83

周刊顯示結(jié)果:得點(diǎn)29865分
修正A 0.70
修正B 9.69
修正C 1.83

結(jié)果誤差
得點(diǎn)相差21分
修正A相差0.04
修正BC幾乎沒有任何誤差
可以看出還是相對比較準(zhǔn)確的。
各位P主可以用來計(jì)算自己的VOCALOID得點(diǎn)~從而推斷在周刊中的位置!
下載鏈接:
鏈接:https://pan.baidu.com/s/1WAtkuvcFjgel3U6SsIDabQ?
提取碼:CNVC
感謝各位支持!