//DSPP-Infix-to-Postfix:中序轉後序(整數運算)
//輸入:
//中序整數運算表示法。
//
//輸出:
//後序整數運算表示法。
//所有運算元及運算子都以一個Space隔開
//修改以下程式
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
#define SIZE 100
typedef struct
{
size_t top;
int items[SIZE];
} STACK;
int isFull_stack(STACK *);
int isEmpty_stack(STACK *);
void push_stack(STACK *, int );
int pop_stack(STACK *);
void postfix(char [], STACK *);
int priority(char );
int main( void )
{
STACK s={0};
char c;
char in[80];
int i=0;
while ( scanf("%c",&c) ){ //A+B-C*D-(E+F/G)
if(c!= ' ') in[i++] = c;
if ( c == 10 ) break;
}
postfix(in,&s);
}
int isFull_stack(STACK *s)
{
return (s->top == SIZE)?1:0;
}
int isEmpty_stack(STACK *s)
{
return (s->top == 0)?1:0;
}
void push_stack(STACK *s, int a)
{
if ( isFull_stack(s) )
{
fprintf(stderr,"%s","stack is overflow\n");
exit(1);
}
else
{
s->items[s->top++] = a;
//fprintf(stdout,"%d is pushed into stack. top=%d\n",a,s->top);
}
}
int pop_stack(STACK *s)
{
int tmp;
if ( isEmpty_stack(s) )
{
fprintf(stderr,"%s","stack is underflow\n");
exit(2);
}
else
{
tmp = s->items[--s->top];
//fprintf(stdout,"%d is popped from stack. top=%d\n",tmp,s->top);
return tmp;
}
}
void postfix(char infix[], STACK *s)
{
int i=0;
char c,tmp;
while ( (c=infix[i++]) != 10 ) // newline
{
if ( isalpha(c) ) printf("%c ",c);//operands
if ( isdigit(c) ){
int d = c - 48;
while(isdigit(c = infix[i++]))
d = d*10 + (c-48);
printf("%d ",d);
}
if ( c == '(' )
push_stack(s,c);
else if ( c == ')' )
{
while ( (tmp = pop_stack(s)) != '(' )
printf("%c ",tmp);
}
else
{
while ( !isEmpty_stack(s) && priority(c) <= priority(s->items[s->top-1]) )
// <= for left associative, < for right associative
{
tmp = pop_stack(s);
if (tmp != '(') printf("%c ",tmp);
}
push_stack(s,c);
}
}
while ( !isEmpty_stack(s))
printf("%c ",pop_stack(s));
}
int priority(char c)
{
switch(c)
{
case '+':
case '-':
return 1;
case '*':
case '/':
case '%':
return 2;
case '(':
default:
return 0;
}
}
冷凍庫 冠宇之家0270
每天都要永保 一點 赤子之心才可以
Translate
2014年11月15日 星期六
2014年6月22日 星期日
好壞球理論 _ 網路轉載
好壞球理論(網路流傳文章)
「當聽到有人罵你時,不要太快反應、太過敏感,很容易生出是非。」
如果人家不喜歡你,因而說出一些故意誣賴、栽贓、辱罵的話,我們不需要猛力揮棒來回應,因為那個球投得太壞。
「喂,妳也喜歡看棒球啊!」
我一邊在跑步機上執行健身計劃,一邊盯著眼前的棒球賽,正看得聚精會神的時候,有人跟我說話,害我嚇了一跳!
原來是與我同一健身房,有數面之緣的張先生,他在隔壁的跑步機上,也在看棒球轉播,我太專注了,沒注意到熟人就在身旁。
張先生是某出版公司的老板,是個溫儒謙恭的人,他曾說,他每天的娛樂,就是看看四書五經、寫寫毛筆字和上健身房。
他的太太偶爾也會來,但從來不運動,只愛在女子三溫暖裡頭,大聲的聊天,個性很熱情,但有時還挺呱噪的,張先生顯得沈默寡言許多。
聊了幾句有關棒球的話,張先生說出了他在棒球比賽中領悟的道理:
「妳可能不知道,我年輕的時候,非常會跟我太太吵嘴,一度吵到要離婚,當初我很喜歡她的善良、熱情和直率,可是婚後,我發現直腸子也挺可怕的,講話像飛機投炸彈一樣,有時難免會炸到不該炸的地方,我們動不動就吵起來。
直到有一天看棒球,我忽然領悟了一個應答的理論:
如果我是個打擊手的話,總不該什麼球都打吧?
應該要選好球才打,如果她投出的是壞球,那麼我幹嘛一直揮棒呢?
壞話就當沒聽見,她球投偏了,未獲得回應就會自討無趣,如果我連壞球都打鐵遭三振,也會氣死自己。」
我覺得他的好壞球理論很有意思。
雖然,投手和打擊手應該屬於敵隊,對婚姻關係而言,也許不那麼適用,但拿這理論來看職場上的人際關係,還真有幾分道理:如果人家不喜歡你,因而說出一些故意誣賴、栽贓、辱罵的話,我們不需要猛力揮棒來回應,因為那個球投得太壞,你再使力也不會打出全壘打,搞不好反而會被敵隊接殺,不如讓它無聲無息的落入捕手的手套裡。
壞球,不要打;值得打的球,再回應好了!
--------------------------------------------------------------------------------------------------------
善意像顆球,丟出還會再回來(網路流傳文章)
有一次家人一起到一家西餐廳用餐。那天客人滿多的,菜出得慢,不過還好,陸續送了來,大家開始用餐,吃到甜點時,我點的餐還沒送來,因為是一家人,所以我吃一點你的前餐,你吃一點他的主菜,大家都沒注意到這事,但我沒忘記。
送飲料來時,服務小姐很不好意思地詢問:是不是還一份餐未送來?
我說「是」,服務小姐很客氣的說了一聲「對不起」就離開了。
不到三十秒,老闆娘帶著大廚到我旁邊,連聲抱歉,說剛把主菜放下去而已,
還要一二十分鐘,問我能不能等一下,或者要退掉?
我答:「沒關係,我知道你們今天忙,難免會慢一些,我等一下好了,等好的時候幫我打包起來,我帶回家。」老闆娘跟大廚連聲道謝離開。
然後,原來沒點餐的小朋友都有了甜點、水果與飲料。
埋單時,我驚訝地問說是否算錯了,老闆娘在旁邊解釋道:「因為你的諒解與客氣,所以餐點打八折,沒上桌的那一份免費,小孩子的附餐也免費招待。」
我笑笑說:「妳太客氣了。」
老闆娘回了一句話:「因為你的客氣,所以不得不讓我們更客氣!」
我笑著離開,不因少花錢,只因「客氣」也可以傳染給別人…… 。
我的工作,讓我常常有機會介紹想裝潢的客戶給做室內設計的朋友,按照行規,或多或少總會有些介紹費,但我從來沒接受。大概是從高中開始,當朋友要回報我對他們的幫助時,我總是拒絕。
我只認真的告訴朋友,那天我需要幫助,拉我一把就好了。
因此,當我須全家外出離家數天時,我不用擔心家裡的魚會餓死、花會枯死,當我需要搬運東西時,我不用找搬家公司﹔當我無車可用時,不必擔心沒人載……。
善意與幫助像是一顆球,當你毫不遲疑的將球丟向對你招手的人之後;
有天,當你也在招手時,也會有顆球飛到你手中,或者,還不只一顆........。
2014年5月10日 星期六
輸入十進制轉換成二進制
方法一.
#include<stdio.h>
int main()
{
int n,i,k;
printf("輸入一個十進制整數");
scanf("%d",&n);
printf("%d 轉換成二進制為:\n",n);
for(i=31;i>=0;i--)
{
k = n >> i;
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
}
----------------------------------------------------------------------------------
方法二.
#include<stdio.h>
int main()
{
int n,i,k;
printf("輸入一個十進制整數");
scanf("%d",&n);
printf("%d 轉換成二進制為:\n",n);
for(i=31;i>=0;i--)
{
k = n >> i;
if(k&1)
printf("1");
else
printf("0");
}
printf("\n");
}
----------------------------------------------------------------------------------
方法二.
#include <stdio.h>
void i2b(int);
int main ( void )
{
int n;
printf("輸入一個十進制整數");
scanf("%d",&n);
i2b(n);
return 0;
}
void i2b(int n)
{
unsigned int mask=0x80000000; /*------------------>32bit*/
int i;
printf("%d 轉換成二進制為:\n",n);
for(i=31;i>=0;i--){
printf("%c",(n&mask)?'1':'0'); /* AND 其中一個是0就0 類似"乘號" 搭配 三元運算子 */
n<<=1; /* n=n<<1 */
}
}
表格轉自:http://www.numberplanet.com/number/80000000/
| binary | 10000000000000000000000000000000 |
| binary bytes | 10000000 00000000 00000000 00000000 |
| decimal | 2147483648 |
| decimal (formatted) | 2,147,483,648 |
| dotted decimal | 128.0.0.0 |
| hex bytes | 80 00 00 00 |
| hexidecimal | 80000000 |
| IPv6 | ::8000:0 |
| octal | 20000000000 |
2014年5月8日 星期四
2014年5月3日 星期六
if....else if..... else V.S if.....if......if....
如果改成這樣 ㄟ 發現也能有相同結果ㄟ
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x<0)
printf("x is negative\n");
if(x==0)
printf("x=0\n");
if(x>0)
printf("x is postive\n");
}
先來看看if.....else....最單純的 二選一觀念吧 喔
只要上面那行if成立就不做else
只要上面那行if不成立就代表else成立
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x<0)
printf("x is negative\n");
if(x==0)
printf("x=0\n");
if(x>0)
printf("x is postive\n");
}
先來看看if.....else....最單純的 二選一觀念吧 喔
只要上面那行if成立就不做else
只要上面那行if不成立就代表else成立
之後這題應該可看出if...if...if...跟if...else if....else 的差別了
先刪掉(b) else後面不可加括號條件 (d) 你是來亂的嗎0.0|||
之後的(a)喔 每行都做的意思第一個if成立了第二個也成立通通都做通通都執行相近的指令
(c)呢????喔 原來如此是二選一阿 第一個if成立了之後下面那個else if 就不鳥它了
再看看一個降冪排列的問題
if...if...if... (一行一行照做) VS if...else if...else(三選一) 所以這裡要使用前面那個呢
訂閱:
文章 (Atom)











