实验三
实验一
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 char score_to_grade(int score) { 18 char ans; 19 20 switch(score/10) { 21 case 10: 22 case 9: ans = 'A'; break; 23 case 8: ans = 'B'; break; 24 case 7: ans = 'C'; break; 25 case 6: ans = 'D'; break; 26 default: ans = 'E'; 27 } 28 29 return ans; 30 }

问题一:将分数转化为相应的等级。int,char。
问题二:缺少break,双引号改为单引号。
实验二
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 int sum_digits(int n) { 18 int ans = 0; 19 20 while(n != 0) { 21 ans += n % 10; 22 n /= 10; 23 } 24 25 return ans; 26 }

问题一:计算整数各位数字之和。
问题二:能。一个是迭代,一个是递归。
实验三
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 int power(int x, int n) { 18 int t; 19 if(n == 0) 20 return 1; 21 else if(n % 2) 22 return x * power(x, n-1); 23 else { 24 t = power(x, n/2); 25 return t*t; 26 } 27 }

问题一:进行幂运算。
问题二:是。
{1 n=0
power(x,n)={x*power(x,n-1) n为奇
{【power(x,n/2)】2 n为偶
实验四
1 #include <stdio.h> 2 3 int classify_triangle(int a, int b, int c); 4 5 int main() { 6 int a, b, c; 7 while (scanf("%d %d %d", &a, &b, &c) != EOF) { 8 int type = classify_triangle(a, b, c); 9 switch (type) { 10 case 0: printf("不能构成三角形\n"); break; 11 case 1: printf("普通三角形\n"); break; 12 case 2: printf("等边三角形\n"); break; 13 case 3: printf("等腰三角形\n"); break; 14 case 4: printf("直角三角形\n"); break; 15 } 16 } 17 return 0; 18 } 19 20 int classify_triangle(int a, int b, int c) { 21 if (a + b <= c || a + c <= b || b + c <= a) { 22 return 0; 23 } 24 if (a == b && b == c) { 25 return 2; 26 } 27 if (a == b || a == c || b == c) { 28 return 3; 29 } 30 if (a * a + b * b == c * c || a * a + c * c == b * b || b * b + c * c == a * a) { 31 return 4; 32 } 33 else 34 return 1; 35 }

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

1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 7 while(scanf("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); 9 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 10 } 11 12 return 0; 13 } 14 15 int func(int n, int m){ 16 if(m==0||m==n) 17 return 1; 18 if(m>n) 19 return 0; 20 21 return func(n-1,m)+func(n-1,m-1); 22 }

实验六
1 #include<stdio.h> 2 3 int gcd(int a,int b,int c); 4 5 int main() { 6 int a, b, c; 7 int ans; 8 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 9 ans = gcd(a, b, c); 10 printf("最大公约数: %d\n\n", ans); 11 } 12 return 0; 13 } 14 15 int gcd(int a, int b, int c) { 16 int min; 17 int i; 18 19 min = a; 20 if (b < min) min = b; 21 if (c < min) min = c; 22 23 for (i = min; i >= 1; i--) { 24 if (a % i == 0 && b % i == 0 && c % i == 0) { 25 return i; 26 } 27 } 28 }

实验七
1 #include <stdio.h> 2 #include <stdlib.h> 3 void print_charman(int n); 4 int main() { 5 int n; 6 printf("Enter n: "); 7 while(scanf("%d", &n) != EOF){ 8 printf("input n: %d\n", n); 9 print_charman(n); 10 printf("\nEnter n: "); 11 } 12 return 0; 13 } 14 void print_charman(int n) { 15 for (int i = 1; i <= n; i++) { 16 for (int j = 1; j < i; j++) { 17 printf("\t"); 18 } 19 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 20 printf(" O \t"); 21 } 22 printf("\n"); 23 for (int j = 1; j < i; j++) { 24 printf("\t"); 25 } 26 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 27 printf(" <H> \t"); 28 } 29 printf("\n"); 30 for (int j = 1; j < i; j++) { 31 printf("\t"); 32 } 33 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 34 printf(" I I \t"); 35 } 36 printf("\n"); 37 } 38 }

浙公网安备 33010602011771号