--- title: 'HW2 Question' disqus: hackmd --- 作業2解答 === [TOC] ## 第一題(5%,共13大題) 3. 請寫出下列C語言條件運算式的值為true或false(0.5%) (a) 6 != 5 (True) (b) 5 == 2 || 5 > 3 (True) (c ) !(6 < 5) (True) (d) 10 > 5 && 8 < 5 (False) (e) (2 > 9) || (3 < 8) (True) (f) ((9 % 4) > 2) && (8 < 3) (False) (g) !((1 != 2) || (5 - 4)) (False) (h) ! (50 > 60) && (10 > 5) (True) 4. 請寫出下列C語言條件運算式的值為true或false(0.5%) (1) 2 + 3 == 5 (True) (2) 36 < 6 * 6 (False) (3) 8 + 1 >= 3 * 3 (True) (4) 2 + 1 == (3 + 9) / 4 (True) (5) 12 <= 2 + 3 * 2 (False) (6) 2 * 2 + 5 != (2 + 1) * 3 (False) (7) 5 == 5 (True) (8) 4 != 2 (True) (9) 10 >= 2 && 5 == 5 (True) 5. 如果變數x = 5、y = 6和z = 2,請問下列哪些if條件為true;哪些為false(0.5%) if ( x==4 ){ } (False) if ( y>=5 ){ } (True) if ( x!= y-z ){ } (True) if ( z = 1 ){ } (True)不扣分 if ( y ){ } (True) 6. 如果A=-1;B=0;C=1;,請寫出下列條件和邏輯運算的值,答案寫T或F(0.5%) A > B && C > B (False) A < B || C < B (True) (B - C) == (B - A) (False) (A - B) != (B - C) (False) -------- 9. 請寫出2個if條件敘述,y的初值為10,第1個是當x的範圍值在18~65之間時,將變數x的值指定給變數y;第二個是當y值等於10時,將y值加150(0.25%) ``` Ans: int y = 10; if(x >= 18 && x <= 65) y = x; if(y == 10) y += 150; ``` 11. 請寫出下列C程式片段的輸出結果(0.5%) ``` (1) i = 5; j = 0; if (i == 5) j = 5; if (i == 3) j = 2; printf("j = %d\n", j); Ans: j = 5 (要空格) (要換行) (2) int depth = 10; if(depth >= 10){ printf("危險: "); printf("水太深.\n"); } Ans: 危險: 水太深. (冒號後面要空一格) (要換行) ``` 11. 輸入年齡age,判斷是否已經成年,年齡大於等於18顯示"已經成年!",完成下列空格(0.25%) ``` Ans: if(age >= 18){ printf("已經成年!"); } ``` --- 16. 請寫出下列程式片段的執行結果(0.25%) ``` x = 7;y = 5;z = 4; if(x > y){ if(y > z) printf("x = %d\n",x); }else{ printf("y = %d\n",y); } printf("z = %d\n",z); Ans: x = 7; (x,z要小寫,且要換行) z = 4; (要換行) ``` 17. 請寫出下列程式片段執行結果的變數x值為何(0.25%) ``` x = 0; y = 2; if(x > y){ x = x + 2; } else{ x = x + 1; } x = x + y; Ans: 3 ``` 18. 請寫出下列程式片段的執行結果(0.25%) ``` int sum = 8 + 1 + 2 + 7; if(sum < 20) printf("太小\n"); else printf("太大\n"); Ans: 太小 ``` 27. 請**寫出程式**計算網路購物的運費,基本物流處理費199元;1~5公斤,每公斤50元;超過5公斤,每一公斤30元。分別輸入購物重量為3.5、10、25公斤,計算和顯示購物所需的運費+物流處理費。(這題需要code、還有執行結果,寫下來就好)(0.25%) ``` Ans: #include<stdio.h> int main(){ float weight; scanf("%f",&weight); if(weight >= 1 && weight <= 5) printf("%f",199 + 50 * weight); else if(weight > 5) printf("%f",199 + 50 * 5 + 30 * (weight - 5)); return 0; } 3.5 => 374.0000 10 => 599.0000 25 => 1049.0000 ``` --- 32. 請寫出下列程式片段執行結果的變數y值為何(0.5%) ``` x = 15;y = 0; if(x < 10) y = 1; else if(x < 20) y = 2; else if(x > 30) y = 3; else y = 4; Ans: 2 ``` 40. 年齡age小於等於12歲稱為兒童;小於20歲稱為青少年;大於等於20歲稱為成年人。請完成以下的Code:(請交完整code,不要只交空格內答案)(0.5%) ``` Ans: if(age <= 12){ printf("兒童\n"); } else{ if(age<20){ printf("青少年\n"); } else{ printf("成年人\n"); } } ``` 附註:檔案hw02-01.txt ## 第二題(1%,共5個測資) Description ``` 輸入一個整數(x),判斷其為正數(positive)、負數(negative)或是零(zero) 輸入整數範圍:-2,000,000,000 <= x <= 2,000,000,000 ``` Sample input ``` 3 1234567 0 -98765432 ``` Sample output ``` positive zero negative ``` :::danger 每一行輸出結束後都要換行,但最後一行不需換行 ::: 附註 : 檔名hw02-02.c ## 第三題(1%,共5個測資) Description ``` 某個世族的女兒在網路上想要徵求一位男友 他的擇友條件如下 age : 25 <= age <= 30 height : 160 <= height <= 175 Monthly salary : at least 30,000 按照順序輸入某想應徵的男士的各個資料,判斷是否合格應徵 ``` Sample input ``` 2 21 110 10 29 174.9 30001 ``` Sample output ``` No Yes ``` :::danger 每一行輸出結束後都要換行,但最後一行不需換行 ::: 附註 : 檔名hw02-03.c ## 第四題(1%,共5個測資) Description ``` 輸入一個整數1~4, 按照輸入對應輸出結果 若輸入 1 ,則印出 "SPADE" 若輸入 2 ,則印出 "HEART" 若輸入 3 ,則印出 "DIAMOND" 若輸入 4 ,則印出 "CLUB" 以上皆非,則印出 "Error!" ``` Sample input ``` 7 1 3 1 4 5 2 0 ``` Sample output ``` SPADE DIAMOND SPADE CLUB Error! HEART Error! ``` :::danger 每一行輸出結束後都要換行,但最後一行不需換行 ::: 附註 : 檔名hw02-04.c ## 第五題(2%,共10個測資) Description ``` 判斷一個一元二次方程式的解、有無實根、是否為拋物線 輸入 a, b, c 三個實數 代表平面上一條拋物線 f(x) = ax^2 + bx + c, 程式輸出這個拋物線和 x 軸兩個交點的 x 座標 依照 x 的數值從大到小列印 並且精確到小數點第三位 若沒有實根,則輸出"It doesn't have any root."" 如果輸入a=0, 則輸出“It isn't a paracurve.” ``` Sample input ``` 4 1.2 3.4 -5.6 1 -2 1 3.1 2.2 4 0.0 2 3 ``` Sample output ``` 1.167 -4.000 1.000 1.000 It doesn't have any root. It isn't a paracurve. ``` :::danger 輸出的交點座標以一個空白隔開,每個數值精確到小數點第三位 每一行輸出結束後都要換行,但最後一行不需換行 ::: 附註 : 檔名hw02-05.c ## 注意事項 1. 繳交期限:10/03(四) 18:20前 2. 檔案包含第一題的txt檔、.c檔、流程圖 3. 請勿抄襲!!若抄襲被抓到,抄襲者與被抄襲者該次作業0分 4. 檔名要正確,不然該題分數減半 5. 所有coding分數都是以測資的正確與否評分 6. 每一題皆要有流程圖,不會配分但會檢查是否正確 7. 流程圖只要畫沒有for迴圈的部分,也就是下方your code的地方 8. 作業遲交一天:分數x0.9(星期四18:20以後) 作業遲交二天:分數x0.7(星期五) 作業遲交三天:分數x0.5(星期六) 三天以上:0分 ## 參考片段程式碼 ```gherkin= /* 程式檔名: 程式功能: 程式作者: 設計日期: 程式版本: */ #include<stdio.h> int main(){ int T,i; scanf("%d",&T); //有幾個測資 for(i=1;i<=T;i++){ printf("%d.\n",i); //第幾個測資提示 //your code is here. } return 0; } ``` 以作業1 第1題 當例子 ### 第一題(2%,共2個測資) Description ``` 我們已經知道攝氏溫度與華氏溫度的轉換公式 F = C *9/5 + 32 請設計輸入攝氏溫度,輸出華氏溫度 -100 < C < 100 ``` Sample input ``` 2 //代表有兩個側資 27.00 0.34 ``` Sample output ``` 80.60 32.61 ``` :::danger 輸出到小數點後第二位,輸出每行結束時需換行 ::: ```gherkin= /* 程式檔名: 程式功能: 程式作者: 設計日期: 程式版本: */ #include<stdio.h> int main(){ int T,i; float F,C; //變數一律擺在最前面 scanf("%d",&T); for(i=1;i<=T;i++){ printf("%d.\n",i); //your code is here. scanf("%f",&F); //讀區區塊 C = F*9/5 + 32; //運算區塊 printf("%.2f\n",C); //輸出區塊 } return 0; //return 0只需要一個就好 } ``` 附註 : 檔名hw01-01.c 畫流程圖的時候,只需要將以下code畫出來即可 ```gherkin= #include <stdio.h> int main(){ float F,C; scanf("%f",&F); //讀區區塊 C = F*9/5 + 32; //運算區塊 printf("%.2f",C); //輸出區塊 reutrn 0; } ```