第一次上機測驗
第一次考試好緊張ㄛ
考前廢話
老緊張了,上一次上課請假沒來,這一次上課就是第一次考試。
什麼都不知道,什麼都不清楚,又因為完全沒有認識的人,所以沒辦法問老師上次有沒有說什麼。
前一天緊張半天(還真的是半天,因為前一天是國慶日,在家休息,晚上才在想要不要練一下。)
今天已經放棄ㄌ,再怎麼緊張也沒用,乾脆隨機抽路人問老師上次有沒有說什麼。
答案是沒有:)
剛剛聽老師跟助教在討論電腦不夠的問題,說要拜託有筆電的同學坐到最後一排,才知道原來可以用自己的電腦。
緊張的感覺瞬間少了許多,用自己的筆電,熟門熟路ㄌ。
然後老師又說要開eeclass跟codespaces,然後可以查東西。
我只能說,好耶.jpg
老師講話
大概就是會用到之前上課講到的東西,scanf, printf, if, else
只要會這些就可以解題了,while是上次上課教的,所以不在裡面,但要用也可以。
題目看完之後再作答,不要看三四行就開始寫,避免後面還有別的規則
今天考兩題,一題一個c檔。
folder的名稱有建議,不過是方便老師跟助教幫忙處理問題。
檔名有規定,檔名對了就有10分了,真是不錯。
考後心得
其實,滿簡單的。
然後成績出來發現code寫到爛掉就好笑了
真的就如老師所說,就是之前上課教到的東西,我只多用了for迴圈而已,但這也可以不用。
就是很普通的解題,再來就是盡量把變數名稱取好,程式加上註解,版面打得漂漂亮亮,就像之前交作業一樣。
至於題目內容就是:
- if else還有判斷大小
- 輸入三個學生的成績
- 判斷他們的成績區間
- 輸出每個區間共有幾人
- 還是if else跟判斷大小
- 得到三個邊長,判斷是否是三角形(兩邊之和大於第三邊)
然後我剛剛查了還有兩邊之差小於第三邊,不知道會不會影響到:poop:- 判斷是否是直角三角形(畢氏定理a^2+b^2=c^2)
順便在這邊測試一下放code的功能好了。
code
雖然寫的可能不太好放在這邊有點害羞,但我上課用的repo也是公開的,這樣說起來好像沒什麼差就是了。
第一題
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<stdio.h>
int main(void)
{
//3 students, check score(0~100), if invalid just stop.
printf("This is a program for you to classify students' grade range.\n");
printf("please enter the scores of 3 students.\n");
int gradeA=0, gradeB=0, gradeC=0, gradeD=0, gradeF=0;//grade counter
int studentGrade=0;
int invalid=0;
for(int i=0; i<3; i++)
{
scanf("%d", &studentGrade);
if(studentGrade>=0 && studentGrade<= 100)
{
if(studentGrade<60)
gradeF++;
else if(studentGrade>=60 && studentGrade<=69)
gradeD++;
else if(studentGrade>=70 && studentGrade<=79)
gradeC++;
else if(studentGrade>=80 && studentGrade<=89)
gradeB++;
else if(studentGrade>=90 && studentGrade<=100)
gradeA++;
}//valid grade
else
{
printf("sorry, all scores must be between 0 and 100.\n");
printf("\nprogram ends \n");
invalid++;
break;
}//inalid grade
}//for, input grade and count
if(invalid==0)
{
printf("grade distribution:\n");
printf("A(90 and above):%d student(s)\n", gradeA);
printf("B(80-89):%d student(s)\n", gradeB);
printf("C(70-79):%d student(s)\n", gradeC);
printf("D(60-69):%d student(s)\n", gradeD);
printf("F(below 60):%d student(s)\n", gradeF);
printf("\nprogram ends \n");
}//ouput result
}//end main
沒什麼好解釋的,應該看程式碼跟註解就能懂了。
是說第32行的valid++
,原本我想用bool,結果vscode竟然在底下畫紅線,就乾脆用int了。
剛剛查了一下,原因是因為沒有bool……
https://www.runoob.com/w3cnote/c-bool-true-false.html
第二題
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
#include<stdio.h>
int main(void)
{
int lengthsFirst=0, lengthsSecond=0, lengthsThird=0;
int tmp=0;//for sort
printf("This is a program for you to determine whether 3 lengths can form a triangle and whether is a right tirangle.\n");
printf("Please enter the first lengths of three sides: \n");
scanf("%d",&lengthsFirst);
printf("Please enter the second lengths of three sides: \n");
scanf("%d",&lengthsSecond);
printf("Please enter the third lengths of three sides: \n");
scanf("%d",&lengthsThird);
while(1)//sort
{
if(lengthsFirst<=lengthsSecond && lengthsSecond<=lengthsThird)
{
//printf("end sort\n"); for debug
break;
}
else
{
if(lengthsFirst>lengthsSecond)
{
tmp=lengthsFirst;
lengthsFirst=lengthsSecond;
lengthsSecond=tmp;
//printf("sort 1\n"); for debug
}
if(lengthsSecond>lengthsThird)
{
tmp=lengthsSecond;
lengthsSecond=lengthsThird;
lengthsThird=tmp;
//printf("sort 2\n"); for debug
}
}//end sort else
}//end while
if(lengthsFirst+lengthsSecond>lengthsThird)//check whether is a triangle
{
if(lengthsFirst*lengthsFirst+lengthsSecond*lengthsSecond == lengthsThird*lengthsThird)
{
printf("A Right Triangle.\n\n");
printf("Program ends.\n");
}
else
{
printf("Not a Right Triangle.\n\n");
printf("Program ends.\n");
}
}
else
{
printf("Cannot form a triangle.\n\n");
printf("Program ends.\n");
}
}//end main
在判斷三角形的時候,一開始只想到要用畢氏定理,看到底下的測資才注意到還要判斷是不是三角形。
其實題目有寫但題目是英文的
畢氏定理中的a跟b是兩個小邊,c是最長的斜邊,雖然可以if else判斷完,但我有點懶。
原本想找c有沒有內建sort可以用,是有一個qsort()
可以用,但看一看怕我學會之後考試時間都沒了。
最後就直接寫一個超簡略的醜醜算是bubble sort的東西,然後現在才想到應該看看有沒有swap可以用。
剛剛查了一下,看起來還是得自己做一個swap出來,但是也查到了滿酷的東西。
不用暫存空間進行互換:https://adrianhuang.blogspot.com/2011/08/c.html
用到指標:https://www.796t.com/content/1549322654.html
是說,題目原本還有要求判斷正、等腰、不等邊三角形,然後我直接現場開查equilateral isosceles scalene是什麼意思。不過後來這段敘述被刪除了。
然後我想順便放一下剛剛查到的東西。
1
2
公式: n = b^2+c^2-a^2 (a>b>c)
如果n<0為鈍角三角形,n>0為銳角三角形,n=0為直角三角形
成績出後的感想
10/18成績出了。
我以為會像第一次作業一樣有評語,但沒有,就只有分數。
所以我好像也沒什麼好說的,哈哈。
老師說因為這是第一次考試,所以題敘都會比較清楚完整,之後就會不一樣了,也可能會給一張流程圖要我們打code之類的。
反正就,加油ㄅ。
結語
考試中遇到的困難:題目是英文的還不能複製翻譯。