# TQC正式考試詳解 ## Code Judger 網址:[codejudger.com](http://codejudger.com/groups/1444/tqc) 帳號:a911@stdmail.nssh.ntpc.edu.tw 密碼:19911223 ## C語言架構 每一個程式都一定要打的! ```c= #include <stdio.h> //就像是引入字典,讓電腦知道你接下來打的東西是什麼。 int main(){ //進入主程式區,所有程式碼都打在這裡面。 } ``` ## 通過標準 作答時間:100分鐘 最低通過分數:70分 ※第1\~4大類每題10分,第5~7大類每題20分。 ※證書不會寫分數,只會寫通過。 答題技巧:(真心建議放棄) * 版本7:放棄 $410$、$706$。 * 版本8:放棄 $608$。 已將以下程式碼存在雲端硬碟,[點我查看](https://drive.google.com/drive/folders/12iWwM_cCywSJDpL2cETd7j53w5OeWH3p?usp=sharing)。 版本7:1, 2, 3, 8, 14, 22, 26, 28, 29, 31, 33, 34, 35, 36, 37號 版本8:4, 5, 6, 7, 16, 17, 18, 19, 21, 24, 27, 30, 32, 38號 # 版本7 ## 108 輸入:整數$n$代表直徑。 輸出:直徑、半徑(第2位)、面積(第4位)。(靠左對齊、欄寬10、以3.1415計算) ```c= #include <stdio.h> int main(){ int n; scanf("%d", &n); printf("%-10d\n%-10.2f\n%-10.4f", n, n/2.0, (n/2.0)*(n/2.0)*3.1415); } ``` ## 202 輸入:整數$n$代表分數。 輸出:若在0~100分以外,輸出"error"。若大於60分,加10分,否則加5分。 ```c= #include <stdio.h> int main(){ int n; scanf("%d", &n); if(n<0 || n>100) printf("error"); else if(n>60) printf("%d", n+10); else printf("%d", n+5); } ``` ## 304 輸入:6個整數。 輸出:有幾個是3的倍數。(須撰寫一名為 $compute()$ 的函式) ```c= #include <stdio.h> int compute(){} int main(){ int i, n, ans=0; for(i=0; i<6; i++){ scanf("%d", &n); if(n%3==0) ans++; } printf("%d\n", ans); } ``` ## 410 輸入:整數$n$,讀取 read.txt。 輸出:前$n$列,每個字首轉大寫,並寫入 write.txt。 ```c= #include <stdio.h> int main(){ int n, line=0, i; scanf("%d", &n); FILE *r = fopen("read.txt", "r"); FILE *w = fopen("write.txt", "w"); char s[100]; while(fgets(s, 100, r)){ for(i=1; i<strlen(s); i++){ s[0]=toupper(s[0]); if(s[i-1]==' ') s[i]=toupper(s[i]); } line++; printf("%s", s); fputs(s, w); if(line==n) break; } } ``` ## 510 輸入:整數$n$、$m$,$n*m$陣列。 輸出:最外圍為1 或 1的上下左右有0,輸出"*"。 ```c= #include <stdio.h> int main(){ int n, m, i, j; scanf("%d %d", &n, &m); int a[n][m]; for(i=0; i<n; i++) for(j=0; j<m; j++) scanf("%d", &a[i][j]); for(i=0; i<n; i++){ for(j=0; j<m; j++){ if(a[i][j]==1&&(i==0||j==0||i==n-1||j==m-1)) printf("*"); else if(a[i][j]==1&&(a[i-1][j]==0||a[i][j-1]==0||a[i+1][j]==0||a[i][j+1]==0)) printf("*"); else printf(" "); } printf("\n"); } } ``` ## 602 輸入:字串。 輸出:大寫分離,小寫分離,大寫字數。 ```c= #include <stdio.h> int main(){ char s[10]; int i, count=0; scanf("%s", s); for(i=0; i<strlen(s); i++){ if(isupper(s[i])){ printf("%c", s[i]); count++; } } printf("\n"); for(i=0; i<strlen(s); i++){ if(islower(s[i])) printf("%c", s[i]); } printf("\n%d", count); } ``` ## 706 輸入:4個整數,讀取 read.txt。 輸出:由小到大排序,寫入 write.txt。 ```c= #include <stdio.h> int main(){ int a[10], n=3, i, j; FILE *r = fopen("read.txt", "r"); FILE *w = fopen("write.txt", "w"); for(i=0; i<4; i++) scanf("%d", &a[i]); while(fscanf(r, "%d", &a[++n]) != EOF); for(i=n-1; i>=1; i--){ for(j=0; j<i; j++){ if(a[j] > a[j+1]){ int tmp = a[j]; a[j] = a[j+1]; a[j+1] = tmp; } } } for(i=0; i<n; i++){ printf("%d\n", a[i]); fprintf(w, "%d\n", a[i]); } } ``` # 版本8 ## 102 輸入:整數$n$代表數量。 輸出:一瓶23.34元,要花多少錢(第2位)。 ```c= #include <stdio.h> int main(){ int n; scanf("%d", &n); printf("%.2f", n*23.34); } ``` ## 202 輸入:整數$n$代表分數。 輸出:若在0~100分以外,輸出"error"。若大於60分,加10分,否則加5分。 ```c= #include <stdio.h> int main(){ int n; scanf("%d", &n); if(n<0 || n>100) printf("error"); else if(n>60) printf("%d", n+10); else printf("%d", n+5); } ``` ## 310 輸入:整數$n$。 輸出:小於$n$的阿姆斯壯數、總和。(須撰寫一名為 $compute()$ 的函式) 阿姆斯壯數的例子:$153 = 1^3 + 5^3 + 3^3$ ```c= #include <stdio.h> int compute(){} int main(){ int n, i, a, b, c, sum=0; scanf("%d", &n); for(i=1; i<n; i++){ if(i<10){ printf("%d\n", i); sum += i; continue; } a=i/100, b=(i%100)/10, c=i%10; if(a*a*a + b*b*b + c*c*c == i){ printf("%d\n", i); sum += i; } } printf("%d", sum); } ``` ## 406 輸入:字串。 輸出:依鍵盤位置輸出右邊的字母。(若非字母則保持原樣) ```c= #include <stdio.h> int main(){ char s[50], a[]="qwertyuioppasdfghjkllzxcvbnmm"; scanf("%s", s); int i, j; for(i=0; i<strlen(s); i++){ for(j=0; j<strlen(a); j++){ if(tolower(s[i]) == a[j]){ if(isupper(s[i])) printf("%c", toupper(a[j+1])); else printf("%c", a[j+1]); break; } } } } ``` ## 504 輸入:整數$n$ 輸出:判斷是否為迴文數(Yes/No)。 迴文數:12321、48784 ```c= #include <stdio.h> int main(){ int n, a, b=0; scanf("%d", &n); a=n; while(n!=0){ b=b*10 + n%10; n/=10; } if(a==b) printf("Yes"); else printf("No"); } ``` ## 608 輸入:10個整數。(0:三振,1,2,3:一,二,三壘,4:全壘打) 輸出:棒球得分。 ```c= #include <stdio.h> int main(){ int n, score=0, i, j; int a[3] = {0, 0, 0}; for(i=0; i<10; i++){ scanf("%d", &n); for(int j=2; j>=0; j--){ if(a[j]==1){ a[j]=0; if(j+n<3) a[j+n]=1; else score++; } } a[n-1]=1; if(n==4) score++; } printf("score = %d", score); } ``` ## 704 輸入:整數$n$,$n$個整數。 輸出:出現次數大於$n/2$的數。(若無輸出error) ```c= #include <stdio.h> int main(){ int n, i, j, d, check, count=0; scanf("%d", &n); int a[n], b[n]; memset(b, 0, sizeof(b)); for(i=0; i<n; i++){ scanf("%d", &d); check=0; for(j=0; j<count; j++){ if(a[j] == d){ b[j]++; check=1; break; } } if(check==0){ a[count] = d; b[count]++; count++; } } for(i=0; i<count; i++){ if(b[i] > n/2){ printf("%d", a[i]); return 0; } } printf("error"); } ```