task1
1 #include <stdio.h> 2 3 char score_to_grade(int score); 4 5 int main() { 6 int score; 7 char grade; 8 9 while(scanf("%d", &score) != EOF) { 10 grade = score_to_grade(score); 11 printf("分數: %d, 等級: %c\n\n", score, grade); 12 } 13 14 return 0; 15 } 16 17 18 char score_to_grade(int score) { 19 char ans; 20 21 switch(score/10) { 22 case 10: 23 case 9: ans = 'A'; break; 24 case 8: ans = 'B'; break; 25 case 7: ans = 'C'; break; 26 case 6: ans = 'D'; break; 27 default: ans = 'E'; 28 } 29 30 return ans; 31 }
a1:功能是>=90為A,>=80為B,>=70為C,>=60為D,<60為E。形參類型為int,返回值和類型為char
a2:case后面沒有break,ans用' '接收

task2
1 #include <stdio.h> 2 3 int sum_digits(int n); 4 5 int main() { 6 int n; 7 int ans; 8 9 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 10 ans = sum_digits(n); 11 printf("n = %d, ans = %d\n\n", n, ans); 12 } 13 14 return 0; 15 } 16 17 18 int sum_digits(int n) { 19 int ans = 0; 20 21 while(n != 0) { 22 ans += n % 10; 23 n /= 10; 24 } 25 26 return ans; 27 }
a1:求各數之和
a2:可以實現

task3
1 #include <stdio.h> 2 3 int power(int x, int n); 4 5 int main() { 6 int x, n; 7 int ans; 8 9 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 10 ans = power(x, n); 11 printf("n = %d, ans = %d\n\n", n, ans); 12 } 13 14 return 0; 15 } 16 17 18 int power(int x, int n) { 19 int t; 20 21 if(n == 0) 22 return 1; 23 else if(n % 2) 24 return x * power(x, n-1); 25 else { 26 t = power(x, n/2); 27 return t*t; 28 } 29 }
a1:計算X的n次冪
a2:是,當n為奇數,x^n=x*x^n-1。當n為偶數時,x^n=x^n/2*x^n/2。n=0,x^0=1

task4
1 #include <stdio.h> 2 3 int is_prime(int n); 4 int main() 5 { 6 int i, n, x, count; 7 printf("100以內的孿生素數:\n"); 8 9 for(count=0, i=2, n=100;i+2<n; ++i) 10 { 11 x=i+2; 12 if( is_prime(i)==1 && is_prime(x)==1) 13 { 14 printf("%d,%d\n", i,x); 15 count+=1; 16 } 17 } 18 printf("100以內的孿生素數共有%d個", count); 19 return 0; 20 } 21 int is_prime(int n) 22 { 23 24 int a=2, b=0; 25 for(; a<n; ++a) 26 { 27 b = n%a; 28 if(b==0) 29 break; 30 31 } 32 if(b==0) 33 return 0; 34 else 35 return 1; 36 37 }

task5
1 #include <stdio.h> 2 3 int hanoi(unsigned int n, char from, char temp, char to); 4 void moveplate(unsigned int n, char from, char to); 5 6 int main() 7 { 8 unsigned int n; 9 while(scanf("%u", &n) != EOF) 10 { 11 int count = hanoi(n, 'A', 'B', 'C'); 12 printf("一共移動了%d次\n", count); 13 } 14 return 0; 15 } 16 17 int hanoi(unsigned int n, char from, char temp, char to) 18 { 19 int count = 0; 20 21 if(n == 1) 22 { 23 moveplate(n, from, to); 24 count++; 25 } 26 else 27 { 28 count += hanoi(n-1, from, to, temp); 29 moveplate(n, from, to); 30 count++; 31 count += hanoi(n-1, temp, from, to); 32 } 33 return count; 34 } 35 36 void moveplate(unsigned int n, char from, char to) 37 { 38 printf("%u: %c --> %c\n", n, from, to); 39 }

task6
迭代
1 #include <stdio.h> 2 3 4 int func(int n, int m); 5 6 int main() { 7 int n, m; 8 int ans; 9 10 while (scanf("%d%d", &n, &m) != EOF) { 11 ans = func(n, m); 12 printf("n = %d, m = %d, ans = %d\n", n, m, ans); 13 } 14 15 return 0; 16 } 17 18 19 int func(int n, int m) { 20 if (m > n) return 0; 21 if (m == 0 || m == n) return 1; 22 23 int result = 1; 24 for (int i = 1; i <= m; i++) { 25 result *= (n - i + 1) / i; 26 } 27 28 return result; 29 }
遞歸
1 #include <stdio.h> 2 3 4 int func(int n, int m); 5 6 int main() { 7 int n, m; 8 int ans; 9 10 while (scanf("%d%d", &n, &m) != EOF) { 11 ans = func(n, m); 12 printf("n = %d, m = %d, ans = %d\n", n, m, ans); 13 } 14 15 return 0; 16 } 17 18 19 int func(int n, int m) { 20 21 if (m == 0 || m == n) { 22 return 1; 23 } 24 25 return func(n - 1, m) + func(n - 1, m - 1); 26 }

task7
1 #include <stdio.h> 2 3 4 int gcd(int a, int b); 5 6 int main() { 7 int a, b, c; 8 int ans; 9 10 while (scanf("%d%d%d", &a, &b, &c) != EOF) { 11 ans = gcd(gcd(a, b), c); // 先計算 a 和 b 的最大公約數,再計算結果與 c 的最大公約數 12 printf("最大公約數:%d\n", ans); 13 } 14 15 return 0; 16 } 17 18 // 計算兩個數的最大公約數 19 int gcd(int x, int y) { 20 while (y != 0) { 21 int temp = y; 22 y = x % y; 23 x = temp; 24 } 25 return x; 26 }

浙公網安備 33010602011771號