文章

第一次上機測驗

第一次考試好緊張ㄛ

第一次上機測驗

考前廢話

老緊張了,上一次上課請假沒來,這一次上課就是第一次考試。
什麼都不知道,什麼都不清楚,又因為完全沒有認識的人,所以沒辦法問老師上次有沒有說什麼。

前一天緊張半天(還真的是半天,因為前一天是國慶日,在家休息,晚上才在想要不要練一下。)
今天已經放棄ㄌ,再怎麼緊張也沒用,乾脆隨機抽路人問老師上次有沒有說什麼。
答案是沒有:)

剛剛聽老師跟助教在討論電腦不夠的問題,說要拜託有筆電的同學坐到最後一排,才知道原來可以用自己的電腦。
緊張的感覺瞬間少了許多,用自己的筆電,熟門熟路ㄌ。
然後老師又說要開eeclass跟codespaces,然後可以查東西。

我只能說,好耶.jpg

老師講話

大概就是會用到之前上課講到的東西,scanf, printf, if, else
只要會這些就可以解題了,while是上次上課教的,所以不在裡面,但要用也可以。
題目看完之後再作答,不要看三四行就開始寫,避免後面還有別的規則

今天考兩題,一題一個c檔。
folder的名稱有建議,不過是方便老師跟助教幫忙處理問題。
檔名有規定,檔名對了就有10分了,真是不錯。

考後心得

其實,滿簡單的。
然後成績出來發現code寫到爛掉就好笑了

真的就如老師所說,就是之前上課教到的東西,我只多用了for迴圈而已,但這也可以不用。
就是很普通的解題,再來就是盡量把變數名稱取好,程式加上註解,版面打得漂漂亮亮,就像之前交作業一樣。


至於題目內容就是:

  1. if else還有判斷大小
    • 輸入三個學生的成績
    • 判斷他們的成績區間
    • 輸出每個區間共有幾人
  2. 還是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之類的。
反正就,加油ㄅ。

結語

考試中遇到的困難:題目是英文的還不能複製翻譯。

本文章以 CC BY-NC-ND 4.0 授權