iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
1

今天,我們來看一下一個九九乘法表,到底可以用多少方式來撰寫
當然,最簡單而且最常見是用兩個for loop來撰寫
兩個for loop代表兩個變數,因此九九乘法表最常見就是for loop

int main(){
    for(int y=1;y<=9;y++){
      for(int x=1;x<=9;x++){
         printf("%d*%d=%d\t",y,x,y*x );
         }
      printf("\n");
      }
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818EvQIH5LL2G.png

======================分格線======================

可以用兩個for loop來完成,當然也可以用2個while loop來達到目的

int y=1;
int x=1;
int main(){
    while (y<=9){
      while (x<=9){
         printf("%d*%d=%d\t",y,x,y*x );
         x++;
         }
      y++;
      x=1;
      printf("\n");
      }
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818dglb87LD3y.png
要小心while loop只有條件判斷,因此要記得補加變數的初始值跟更新值

======================分格線======================

前後順暢更改一下,while loop就可以更改為do...while loop

int y=1;
int x=1;
int main(){
    do{
      do{
         printf("%d*%d=%d\t",y,x,y*x );
         x++;
         }while (x<=9);
      y++;
      x=1;
      printf("\n");
      }while (y<=9);
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818ZAflC6Sw8T.png
while跟do...while loop,兩者最大分別是:前者會先條件判斷,後者會先執行一次再作條件判斷

======================分格線======================

for、while、do...while一定要同時一對使用嗎?

int main(){
for(int y=1,x=1; y<=9 ;x++){
printf("%d*%d=%d\t",y,x,y*x);
x<9 ? x:(x=0,y++,printf("\n"));
}
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818wOMSeOaiRa.png
加一個三元運算子,就可以離開新手村出去打大魔王了

======================分格線======================

可以用1個for loop完成,當然也可以用1個while loop來完成

int y=1;
int x=1;
int main(){
while(y<=9){
printf("%d*%d=%d\t",y,x,y*x);
x<9 ? x++:(x=1,y++,printf("\n"));
}
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818oQ7tZDhd6F.png

======================分格線======================

while loop可以,同樣道理do...while loop也是沒問題了

int y=1;
int x=1;
int main(){
do{
printf("%d*%d=%d\t",y,x,y*x);
x<9 ? x++:(x=1,y++,printf("\n"));
}while(y<=9);
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171221/201078181vLhw1vhbB.png

======================分格線======================

3個常用的loop已經用完了
那我們就看看有沒有其他方式來達到目的
第四種方式,我們可以return方式呼叫自己

int y=1;
int x=1;
int main(){
    if(x<=9 && y<=9){
       printf("%d*%d=%d\t",y,x,x*y);
       x++;
       }
    if(x>9){
       x=1;
       y++;
       printf("\n");
    }
return main();
}

https://ithelp.ithome.com.tw/upload/images/20171220/20107818lOetX0SUn1.png
但這種方式會不停執行,因此必定會出現「stopped working」
因此不建議這樣做。

======================分格線======================

接下來,就是最大膽的語法,goto

int y=1;
int x=1;
int main(){
 LOOP: if(x<=9 && y<=9){
       printf("%d*%d=%d\t",y,x,x*y);
       x++;
       }
    if(x>9){
       x=1;
       y++;
       printf("\n");
    }
goto LOOP;
return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/2010781886p2gF5HmJ.png
在這裡的return 0是不會執行,但為了良好的習慣,還是要加上去

======================分格線======================

接下來,就是不太常見的遞迴

int x=1;
int y=1;
int table (int x, int y){
    if (x<=9){
        if (y<=9){
            printf("%d*%d=%2d\t",x,y,x*y);
            table(x,y+1);
            }
        else{
            printf("\n");
            x++;
            table(x,1);
            }   }   }
int main() {
    table(x, y);
    return 0;
}

https://ithelp.ithome.com.tw/upload/images/20171220/201078183GbQeXMfNb.png
這方式有點近似main呼叫main,只是改為function呼叫function

======================分格線======================

結論:
「方法很多種,但答案只有一個。」一個簡單的九九乘法表至少可以用9種方式來完成。
每一種方法都有優缺點,有執行速度快、有易理解、佔用記憶體少...大家可以按需要來達到不同目的


上一篇
99乘法表到底可以怎麼玩? [1] \t排版
下一篇
如何在學弟妹前裝帥 [1]DOS入門超速成
系列文
提神?看程式比喝咖啡更有效。30

尚未有邦友留言

立即登入留言