資訊處理 108 年程式語言考古題
題目為考試當年公告版本,實務標準請以現行規範為準。
有一函式如下,試問其平均時間複雜度為何?(25 分) Function A(n) { int a = 0; int b = 0; for (int i = 0; i < n; i++) { a++; } printf("Hello"); for (int j = 0; j < n; j++) { for (int k = 0; k < n; k++) { b++; } } printf("World"); }
請指出下列程式碼不合理之處。(25 分) #include<stdio.h> #include<stdlib.h> int main() { int s ,t; scanf("%d%d", &s,&t); while (s < 30) { if (s < 100 || s >50) { t++; } else if (s > 60 && s<-1) { t++; } else if (s > 10 && s < 100) { t--; } else t++; } system("pause"); return 0; }
試問下列程式碼的輸出為何?(25 分) #include <iostream> using namespace std; class A { public: int testa; A() :testa(100) { } virtual void f() { cout << "apple" << endl; } void g() { cout << "banana" << endl; } }; class B : public A { public: B() :testb(300) {} void f() { cout << "cat" << endl; } void g() { cout << "dog" << endl; } int testb; }; int main() { B b; A *a = &b; a->g(); a->f(); cout << a->testa << endl; cout << b.testb << endl; system("pause"); return 0; }
試問下列程式碼的輸出為何?(25 分) #include<stdio.h> #include<stdlib.h> int main() { int i, k1 = 0, k2 = 0, k3 = 0; char a[] = "aA123bd45YH*#*"; for (i = 0; a[i] != '\0'; i++) if ((a[i] >= 'a' && a[i] <= 'z') || (a[i] >= 'A' && a[i] <= 'Z')) k1++; else if ((a[i] >= '0') && (a[i] <= '9')) k2++; else k3++; printf("%d,%d,%d\n", k1, k2, k3); system("pause"); return 0; }
下列問題請用Scheme/Lisp 程式語言來回答。 ㈠請只用cons 函式來建出s-expression (A (B) C)。(5 分) ㈡請只用list 函式來建出s-expression (A (B) C)。(5 分) ㈢給定x 為變數且已執行(setf x ‘(A (B) C)),請只用car 及cdr 函式來 從x 中取得B。(5 分) ㈣請寫一個遞迴函式sumall 用以加總一個串列(list)中所有數字。例如 (sumall nil)回傳0,(sumall ‘(100))回傳100,(sumall ‘(1 2 3 4 5)) 回傳15。(10 分)