---
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;
}
```