1. 用C實現一計算器 包括四則運算 進制 和匯率之間的轉換
這個支持表達式,比如(3+2*5)*3+4
/*
simple integer arithmetic calculator according to the EBNF
<exp> -> <term>{<addop><term>}
<addop>->+|-
<term>-><factor>{<mulop><factor>}
<mulop> -> *
<factor> -> ( <exp> )| Number
Input a line of text from stdin
Outputs "Error" or the result.
*/
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
char token;/*global token variable*/
/*function prototypes for recursive calls*/
int exp(void);
int term(void);
int factor(void);
void error(void)
{
fprintf(stderr,"Error\n");
exit(1);
}
void match(char expectedToken)
{
if(token==expectedToken)token=getchar();
else error();
}
main()
{
int result;
token = getchar();/*load token with first character for lookahead*/
result = exp();
if(token=='\n')/*check for end of line */
printf("Result = %d\n",result);
else error();/*extraneous cahrs on line*/
return 0;
}
int exp(void)
{
int temp = term();
while((token=='+')||(token=='-'))
switch(token)
{
case '+':
match('+');
temp+=term();
break;
case '-':
match('-');
temp-=term();
break;
}
return temp;
}
int term(void)
{
int temp = factor();
while (token=='*')
{
match('*');
temp*=factor();
}
return temp;
}
int factor(void)
{
int temp;
if(token=='('){
match('(');
temp = exp();
match(')');
}
else if(isdigit(token)){
ungetc(token,stdin);
scanf("%d",&temp);
token = getchar();
}
else error();
return temp;
}
2. 如何計算匯率
比如說人民幣對美元的匯率就是1元人民幣等於多少美元!
我們平時從報紙上讀到的都是名義匯率-E.
名義匯率是一國貨幣跟另一國貨幣的價格之比.比如美元對德國馬克是1.43DM/$或0.70$/DM.簡單地說,就是一個美元可以換算成多少個馬克.我們平時到銀行去兌換就是按照名義匯率折算. 在本節及以後的章節中,我們通常以一單位外國貨幣換多少本國貨幣的形式來表示名義匯率.比如 8.26Yuan/$等. 這樣的話, 如果E上升,也就意味著一單位外國貨幣可以兌換更多本國貨幣,那麼我們說本國貨幣貶值;反之如果E下降,本國貨幣升值.
名義匯率是我們日常生活中最常見的,但是這里我們想討論的是匯率跟宏觀經濟之間的互動關系,從名義匯率里我們看不到什麼關系,所以對於宏觀經濟學學生而言,名義匯率並不是我們特別關心的. 國家之間發生貿易的時候進出口商關心的不僅僅是我的錢能換成國外多少錢,更在於我的錢能從你那兒買多少東西.如果我1塊錢可以兌換成你100個外幣,但是你國內的東西價格比我國內貴200倍,那我還是不能從你那兒進口東西.所以國內國外的價格在這里必須考慮進去. 怎麼考慮? 假如我現在手裡有1塊錢人民幣,國內價格是P,那麼我可以買 1/P 個單位的中國貨物. 如果我兌換成美元, 那麼我可以得到 1/E 美元. 國外價格是P*,那麼我可以買 1/EP* 個單位的美國貨物. 換句話說, 中國 1/P單位的貨物可以換得 1/EP*個單位的美國貨物. 那也就是說, 1個單位的美國貨物可以換成 EP*/P 個單位的中國貨物. 這個概念就是十分重要的實際匯率 RER.
另一個角度看實際匯率: 同樣一件貨物,中國賣P/單位,美國賣P*/單位,換算成人民幣就是EP*/單位.那麼實際匯率其實就是同一件貨物外國用本國貨幣衡量的價格與本國價格之比.這樣進出口商就容易比較了:比如,汽車進口商需要決定是否進口汽車.他先看本國汽車市場價格P,然後看美國汽車市場價格P*,並將之換成EP*人民幣,與本國價格P對比,如果高於本國價格,那麼就不進口.如果實際匯率上升,意味著1單位外國貨物換的本國貨物多了,那麼自然本國匯率貶值;反之RER下降本國匯率升值. 這個跟名義匯率一樣. 用我們的第二個角度考慮,如果實際匯率上升,那麼同一樣東西外國賣得價格更高了,進口商利潤空間減小,從而進口數量減少, 所以對本國進口商來說實際匯率貶值有害,而反之對本國出口商有利. 注意: 1. 我們討論匯率對進出口的影響,都是談的實際匯率,而不是名義匯率,理由開篇已經說過; 2. 雖然實際匯率貶值使進口數量Q(m)減少,但反映在國際收支平衡表中經常項目下的進口總額V(m)=Q(m)EP*=Q(m)*RER*P.現在Q下降,但RER上升,所以難以判斷進口總額的變化方向.事實上是,很多發展中國家在本國貨幣貶值期間,出口總額固然上升,但與之同時進口總額也有所上升.這就是因為Q(m)並沒有減少太多,由於這些發展中國家對發達國家的進口依賴度很高.
以上的實際匯率是兩國之間的匯率,我們稱之為"Bilateral Real Exchange Rate".但是我們知道,客觀世界中一個國家在跟許許多多國家進行貿易,那就有許許多多個雙邊實際匯率.這對我們的經濟分析是十分麻煩的.能不能建立一個綜合性的多邊實際匯率 Muitilateral Real Exchange Rate 呢? 我們說可以. 比方說建立一個中國跟其貿易夥伴之間的多邊實際匯率. 中國跟美國之間有一個雙邊實際匯率可以根據RER(US)=EP*/P計算得到,同樣中國跟英國之間的雙邊實際匯率RER(ENG)也可以計算出來,跟印度RER(IND),跟韓國RER(KOR),跟伊拉克RER(IRA)等等都可以計算.中國出口到美國的貨物佔中國向世界總出口的a%,出口到英國的占總出口b%,出口到印度的佔c%,韓國的d%,伊拉克的e%.那麼中國對世界的雙邊實際匯率(其實就是中國的多邊實際匯率MRER,衡量的是一個單位世界貨物可以換成多少單位的中國同樣的貨物)就是加權平均:
MRER=RER(US)a%+RER(ENG)b%+RER(IND)c%+RER(KORE)d%+RER(IRA)e%
這樣算出的是出口方面的多邊實際匯率,進口同樣可以算出.為了方便起見,經濟學家取進口多邊實際匯率和出口多邊實際匯率的平均作為最終一個國家的多邊實際匯率.
總結: 實際匯率上升,說明國外貨物貴了,本國匯率貶值,對出口有利,對進口有損;實際匯率下降,說明本國貨物相對貴了,本國匯率升值,對進口有利,對出口有損.
3. 匯率是什麼怎麼算
匯率:
外匯是可以互相買賣的。那麼,既然是一種買賣,首先就有一個價格的問題。這就涉及到了外匯的匯率問題,匯率,就是以一國貨幣表示另一國貨幣的價格,或者說是兩種貨幣折算時的比例。舉個例子來說,比如在國際市場上,一美元可以買8斤大米,同時一人民幣可以買1斤同樣的大米,便可以說一美元等於8人民幣,那麼,在國際外匯市場上,匯率價格是如何表示的呢?
匯率價格表示方法—標價:
作為貨幣價格的匯率,要比普通商品的價格復雜一些,現在,國際上主要通行兩種標價方法:
直接標價法:是以一個單位的外國貨幣表示若干本國貨幣的方法。也就是說,就是將外國貨幣當作商品,而本國貨幣作為價值尺度。如一美元等於8.27元人民幣,對於中國來說就是直接標價法。
間接標價法:是以一定單位的本國貨幣為標准,來計算應該收取多少單位的外國貨幣。也就是說,本國貨幣被當作商品,用外國貨幣的數額來表示本國貨幣的價格,充當了價值尺度。如1英鎊等於1.6美元,對於英國來說,就是間接標價法。目前世界上使用間接標價法的國家不多,主要是美國、英國、澳大利亞等。
可是外匯標價並非如此簡單,我們在日常看外匯標價時,常常會看到買入價與賣出價這兩個名詞,它們又是什麼意思呢?
從事外匯買賣的銀行在從事外匯交易時,因所處的立場不一樣(有時是買方、有時是賣方),執行不同的外匯匯率,分為買入價和買出價。在直接標價法下,買入價在前,買出價在後。在間接標價法下,賣出價在前,買入價在後。(事實上,無論是直接標價還是間接標價,凡是高的一定是賣價,凡是低的一定是買價)例如,直接標價下,1美元等於8.17-8.37元人民幣,8.17元是買入價,8.37元是賣出價。其含義是中國的銀行買賣美元時,每買入一美元,支付8.17元人民幣;每賣出一美元,收回8.37元人民幣。每買賣1美元,賺取0.2元人民幣價差。間接標價法下,1英鎊等於1.50-1.70美元,1.50美元是買入價,1.70美元是賣出價。
貨幣價格變動—升值或貶值:
在股市中,我們經常會聽到這樣一些話,「我的股票又升了」或「我的股票又跌了」。在匯市中也會聽到這樣一些話,「美元升值」或「美元貶值」,道理是一樣的,所不同的是某一貨幣的升、貶值是相對而言的。比如,美元對日元升值,意味著同樣數量的美元可以兌換更多的日元;反之,美元對日元貶值,意味著同樣數量的美元可以兌換的日元減少。
匯率的種類:
上面介紹了外匯匯率的一般知識。但在國際結算中,因具體記款的方式不同,在外匯交易中因交易的時間不同,或交割的時間不同,產生了各不相同的外匯匯率,具體有:
a、國際結算中,由於銀行匯款方式的不同,產生了電匯匯率、信匯匯率及票匯匯率。
b、在一天的外匯交易中,因成交的時間的不同分為開盤匯率(開盤價)與收盤匯率(收盤價)。由於世界的外匯交易已經形成了一個24小時環球交易網。如果某市場的開盤價與上一市場的收盤價發生脫節,往往意味著世界的政治或經濟發生了某種突變事件。
c、外匯交易中,因買賣交割的時間不同,匯率又分為即期匯率和遠期匯率。
d、按照匯率體系的不同,又可分為固定匯率和浮動匯率。在本章的選擇性閱讀中,我們會詳細的提及。
影響匯率的主要因素:
現在世界上大部分國家匯率體系都採取浮動匯率制度,匯率的波動由市場決定。是什麼經濟原則決定外匯匯率、又是什麼使之改變呢?由於影響匯率的因素很多並且由於各因素之間往往交叉發生使分析起來很復雜,在這里我們只做簡單枚舉:
a、外匯市場上的供給和需求是匯率決定的基本因素;
b、各國利率和通貨膨脹水平是決定匯率的最重要的因素;
c、一國的經濟實力也是決定匯率的因素之一;
d、政治、歷史和地理因素;
e、市場心理預期;等等
有關匯率的分析、預測的話題似乎永遠是外匯市場上投資者十分關注的問題,能否作出正確的預測便意味著投資資產的是否增值.
分享
4. 交叉匯率的計算
交叉匯率的計算是指根據其他兩種貨幣的匯率通過計算得出的匯率。知道中間匯率後,進行匯率的套算比較簡單。但是在實際業務中,貨幣的匯率是雙向報價,即同時報出買入價和賣出價,此時,套算匯率的計算相對來說比較復雜。
根據兩種貨幣匯率中起中介作用的貨幣所處的位置,將套算匯率的計算方法分為三種。
設美元為中介貨幣,美元在兩種貨幣的匯率中所處的位置有三種情況:
1、美元在兩種貨幣的匯率中均為基礎貨幣;
2、美元在兩種貨幣的匯率中均為標價貨幣;
3、美元在一種貨幣的匯率中是基礎貨幣,在另一種貨幣的匯率中是標價貨幣。
(4)c匯率計算公式擴展閱讀:
交叉匯率的計算考慮了兩次交易費用,無論用乘法還是用除法,每一次將中介貨幣相抵消時,交易費用就增加一次,買入價和賣出價之間的價差就增大一次,也可用此方法來驗算結果。
銀行在公布本幣與其他國家貨幣的匯率時,並不說明哪個是基本匯率或交叉匯率。如果客戶向銀行詢問非美元貨幣間的匯率,銀行通常會直接報出交叉匯率。
雖然交叉匯率已經日益普遍,也為專業交易者所接受,但仍然不是主要的交易開式,對於銀行來說,交叉匯率的交易仍然被視為兩筆對美元的交易。
5. 什麼是套算匯率,怎麼計算套算匯率
套算匯率:又稱交叉匯率,是指各國在制定出基本匯率後,再參考主要外匯市場行情,推算出的本國貨幣與非關鍵貨幣之間的匯率。
套算匯率的簡單易記的計算方法
一.交叉相除法:
例如,我們已知:
美元與日元的匯率為 USD /JPY=a/b ①
美元與港元的匯率為 USD /HKD=c/d ②
現在求:
日元與港元的匯率 JPY/HKD等於多少呢?
我們觀察在①式和②中的「/」紅色斜杠的左邊都是相同的貨幣USD ,這時求套算匯率,用交叉相除法:
(USD/HKD)/( USD /JPY)=(c/b)/(d/a) ,由此推導出日元與港元的匯率:JPY/HKD=(c/b)/(d/a)
(註:這里的交叉相除指的是等號右邊的數字的交叉相除)
同理,我們已知:
澳元與美元的匯率為 AUD/USD=A/B ③
紐西蘭元與美元的匯率為 NZD/USD=C/D ④
現在求:
紐西蘭元與澳元的匯率 NZD/AUD怎麼計算呢?
我們觀察在③式和④中的「/」紅色斜杠的右邊都是相同的貨幣USD ,這時求套算匯率,用交叉相除法:
( NZD /USD) / (AUD/USD)/ =(C/B)/(D/A) , 由此推導出紐西蘭元與澳元的匯率
NZD/AUD=(C/B)/(D/A)
由上,我們總結套算匯率最容易記住的計算方法,首先觀察已知條件,如以下式子,
USD /JPY=a/b ① AUD /USD=A/B ③
USD /HKD=c/d ② 或 NZD/USD=C/D ④
發現①式和②中的「/」紅色斜杠的左邊都是相同的貨幣USD ;
③式和④中的「/」紅色斜杠的右邊都是相同的貨幣USD ;
這時我們要求日元與港元或者澳元與紐西蘭元的套算匯率時的公式總結為:左邊或右邊的兩個貨幣名稱都相同時,用交叉相除法。
同向相乘法:
例如 USD/JPY=e/f ⑤ AUD/USD =E/F ⑦ HKD =h/i ⑥ 或 /NZD=H/I ⑧
我們可以觀察到式子⑤和式子⑥的等號左邊的其中一個對角兩端都是USD ,相同的貨幣名稱,故求JPY/HKD的套算匯率時,用同向相乘法,即(USD/JPY
)* (HKD /USD)=(e/f)*(h/i ),由此推導出JPY/HKD=fi/eh
同理,式子⑦和式子⑧的等號左邊的其中一個對角兩端都是USD ,相同的貨幣名稱,故求AUD/NZD的套算匯率時,也是用同向相乘法,即(AUD/USD
)*(USD /NZD)= (E/F)*(H/I),由此推導出AUD/NZD=(E/F)*(H/I)。
公式總結為:等號左邊若有其中一個對角的兩端的貨幣名稱相同時,用同向相乘法,即等號的左邊乘以左邊=等號的右邊乘以右邊。
6. 用C語言編寫匯率計算器
#include<stdio.h>
#include<windows.h>
#include<math.h>
#define p 3.1415926
#define r p/180 //r=p/180,p=3.14....,p/180是求的1弧度,下面sin(裡面要求的是弧度),sin(30弧度)=0.5。 void main()
{
float i,j,k;
int l,m,n,a[10];
char cmd;
LOOP:
system("cls");
printf("***********************\n");
printf("*******小寒計算器******\n");
printf("***********************\n");
printf("\n\n本計算器提供+、-、*、/四種運算。\n");
printf("p-代表圓周率pai。\n");
printf("a-代表十進制轉換為二進制。\n");
printf("b-代表十進制轉換為八進制。\n");
printf("c-代表十進制轉換為十六進制。\n");
printf("d-代表該數值開方。\n");
printf("e-代表該數值開立方。\n");
printf("f-代表求幾次方。\n");
printf("S-代表sin。\n");
printf("C-代表cos。\n");
printf("T-代表tan。\n");
printf("\n\n請輸入要計算的數字和運算符號,輸入逗#地時,結束;輸入逗!地時復位。\n");
scanf("%f",&k);
while((cmd=getchar())!='#')
{
if(i!=0)
switch(cmd)
{
case '+': scanf("%f",&i);
k=k+i;
printf("=%5.2f",k);
break; case '-': scanf("%f",&i);
k=k-i;
printf("=%5.2f",k);
break; case '*': scanf("%f",&i);
k=k*i;
printf("=%5.2f",k);
break; case '/': scanf("%f",&i);
k=k/i;
printf("=%5.2f",k);
break;
case 'p': k=k*p;
printf("%6.4f",k);
break; case 'f': printf("請輸入要求該數字的幾次方:");
scanf("%d",&n);
i=k;
for(m=0;m<n-1;m++)
k=k*i;
printf("%5.2f",k);
break; case 'a': printf("轉換成二進制\n");
m=0;
while((int)k>0)
{
l=k;
k=k/2;
l=l%2;
a[m]=l;
m++;
}
for(n=m-1;n>=0;n--)
printf("%d",a[n]);
break; case 'b': printf("轉換成八進制\n");
m=0;
while((int)k>0)
{
l=k;
k=k/8;
l=l%8;
a[m]=l;
m++;
}
for(n=m-1;n>=0;n--)
printf("%d",a[n]);
break;
case 'c': printf("轉換成十六進制\n");
m=0;
while((int)k>0)
{
l=k;
k=k/16;
l=l%16;
a[m]=l;
m++;
}
for(n=m-1;n>=0;n--)
{
if(a[n]==10)
{ printf("A");continue;}
else if(a[n]==11)
{ printf("B");continue;}
else if(a[n]==12)
{ printf("C");continue;}
else if(a[n]==13)
{ printf("D");continue;}
else if(a[n]==14)
{ printf("E");continue;}
else if(a[n]==15)
{ printf("F");continue;} printf("%d",a[n]);
}
break;
case 'e': printf("該數值開立方得\n");
i=pow(k,1.0/3);
printf("%5.2f",i );
break;
case 'd': printf("該數值開方得\n");
i=k/2;
j=sqrt(k);
printf("%5.2f",j);
break; case 'S': k=k*r;
i=sin(k);
printf("%5.2f",i);
break;
case 'C': k=k*r;
i=cos(k);
printf("%5.2f",i);
break; case 'T': k=k*r;
i=tan(k);
printf("%5.2f",i);
break; case '!': goto LOOP;
}
}
}
7. 匯率是怎麼換算出來的
舉例說明復:我們來換算一制下EUR(歐元)/CHF(瑞士法郎)的匯率,EUR/CHF現在的價格是1/1.6218!那它要以美圓來換算,也就是USD/CHF1/1.0361*EUR/USD1/1.5653,我們只要把1.0361*1.5653=1.6218.就可以得出1歐元換1.6218瑞士法郎的結果了,,你自己可以找些別的貨幣對換算一下
8. 匯率怎麼算呀
匯率在不同的貨幣制度下有不同的制定方法。在金本位制度下,由於不同國家的貨幣的含金量不同,兩種貨幣含金量的對比(又稱鑄幣平價)是外匯匯率的基礎。在不兌現的信用貨幣制度下,匯率變動受外匯供求關系的制約,當某種貨幣供不應求時,這種貨幣的匯率就會上升,當某種貨幣供過於求時,它的匯率就會下降。
匯率又稱匯價、外匯牌價或外匯行市,即外匯的買賣價格。它是兩國貨幣的相對比價,也就是用一國貨幣表示另一國貨幣的價格。