請先練習課本選擇結構基本演練題

【問題目標】
演練各種選擇結構
【程式碼】學習重點
#include <iostream>
#define FF( a , b , c) ( a>b ? b*c : a*c )
using namespace std;
int main() {
 
    int a=2 , b=3 , c=5;
     cout << FF(2-a,b+c,10) << endl;
前置處理之巨集展開,應注意運算子的優先順序,以左例展開如下:
FF ( 2-a , b+c , 10 ) =
( 2-a > b+c ? b+c*10 : 2-a * 10 )
    a=-2; b=0; c=5;
    if(a>0)
        if(b==0) c=-1;
    else
        c=-3;
    cout << c << endl;
 
    a=-1; b=-2; c=-3;
    if(a>0) b=3;c=0;
    cout << c << endl;
 
    a=-1; b=0; c=-2;
    if(a<0||(c=2)>0) b=3;
    cout << b << c << endl;
 
    a=-1; b=2; c=3;
    if((a=0)&&(b=c*2)<0) c=-1;
    cout << b << c << endl;
 
      a=4; b=3; c=2;
    if(a>b>c)
       cout << "yes\n";
    else
       cout << "no\n";
 
}  

1. 巨集置換須小心加括號
2. else 必須搭配最近之 if,除非+大括號
3. if 不加大括號,只接收 1 行敘述
4. && 與 || 具有最佳化特性,
    && 碰到 0 就會跳過後面敘述,|| 則是碰到非 0
5. 對於 a>b>c 的正確邏輯判斷式為何?

針對下列敘述
說明哪些語法 編譯(compiler)時期會發生錯誤? 錯誤原因為何?
int a=1;b=3;c=1;
switch(a<b)
{
   case "B"-"A":printf("1");
   case 1:printf("2");
   case "1":printf("3");break;
   case c:printf("4");break;
}

float f=2.0;
switch (f)
{
   case 1:printf("1");break;
   case 2:printf("2");break;
}


某一程式功能為:
請使用者輸入 0-2 任一數字,依據輸入的數字做輸出。
當輸入 0,則輸出 A
當輸入 1,則輸出 B
當輸入 2,則輸出 C

針對上敘功能,程式如下,請找出語意邏輯上的 bug
int a;
printf("Input a number(0-2):");
scanf("%d",&a);
switch(a)
{
   case 0:printf("A");
   case 1:printf("B");
   default:printf("C");
}