实验三
试验任务一
源代码
1 #include <stdio.h> 2 #include<stdlib.h> 3 char score_to_grade(int score); 4 int main() { 5 int score; 6 char grade; 7 while(scanf("%d", &score) != EOF) { 8 grade = score_to_grade(score); 9 printf("分数: %d, 等级: %c\n\n", score, grade); 10 } 11 return 0; 12 } 13 // 函数定义 14 char score_to_grade(int score) { 15 char ans; 16 switch(score/10) { 17 case 10: 18 case 9:ans = 'A'; break; 19 case 8:ans = 'B'; break; 20 case 7:ans = 'C'; break; 21 case 6:ans = 'D'; break; 22 default:ans = 'E'; 23 } 24 system("pause"); 25 return ans; 26 }
结果截屏

问题
1.功能:根据输入的分数,将其转换为对应的等级制字符并返回 形参类型:整型 返回值类型:字符型
2.用双引号会存在类型不匹配,从而使运行出错 缺少break语句,从而导致case穿透
试验任务二
源代码
1 #include <stdio.h> 2 #include<stdlib.h> 3 int sum_digits(int n); 4 int main() { 5 int n; 6 int ans; 7 while(printf("Enter n: "), scanf("%d", &n) != EOF) { 8 ans = sum_digits(n); 9 printf("n = %d, ans = %d\n\n", n, ans); 10 } 11 system("pause"); 12 return 0; 13 } 14 int sum_digits(int n) { 15 int ans = 0; 16 while(n != 0) { 17 ans += n % 10; 18 n /= 10; 19 } 20 system("pause"); 21 return ans; 22 }
结果截屏

问题
1.计算并返回一个整数n的各个数字之和
2.能 前者是迭代 后者是递归
试验任务三
源代码
1 #include <stdio.h> 2 #include<stdlib.h> 3 int power(int x, int n); 4 int main() { 5 int x, n; 6 int ans; 7 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 8 ans = power(x, n); 9 printf("n = %d, ans = %d\n\n", n, ans); 10 } 11 system("pause"); 12 return 0; 13 } 14 int power(int x, int n) { 15 int t; 16 if(n == 0) 17 return 1; 18 else if(n % 2) 19 return x * power(x, n-1); 20 else { 21 t = power(x, n/2); 22 return t*t; 23 } 24 }
结果截屏

问题
1.递归计算x的n次幂
2.是递归函数
1, n=0
x X power(x, n-1), n=2k-1
(power(x,n/2))的平方, n=2k
试验任务四
源代码
1 #include <stdio.h> 2 #include<stdlib.h> 3 int main() { 4 int a, b, c; 5 while (scanf("%d %d %d", &a, &b, &c) != EOF) { 6 int result = classify_triangle(a, b, c); 7 switch (result) { 8 case 0: 9 printf("不能构成三角形\n"); 10 break; 11 case 1: 12 printf("普通三角形\n"); 13 break; 14 case 2: 15 printf("等边三角形\n"); 16 break; 17 case 3: 18 printf("等腰三角形\n"); 19 break; 20 case 4: 21 printf("直角三角形\n"); 22 break; 23 default: 24 break; 25 } 26 } 27 system("pause"); 28 return 0; 29 } 30 int classify_triangle(int a, int b, int c) { 31 if (a + b <= c || a + c <= b || b + c <= a) { 32 return 0; 33 } 34 if (a == b && b == c) { 35 return 2; 36 } 37 if (a == b || a == c || b == c) { 38 return 3; 39 } 40 if (a*a + b*b == c*c || a*a + c*c == b*b || b*b + c*c == a*a) { 41 return 4; 42 } 43 return 1; 44 }
结果截屏

试验任务五
源代码
1.迭代
1 #include <stdio.h> 2 #include<stdlib.h> 3 int func(int n, int m); 4 int main() { 5 int n, m; 6 int ans; 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 system("pause"); 12 return 0; 13 } 14 int func(int n, int m){ 15 if(n < m){ 16 return 0; 17 } 18 long long ans = 1; 19 for (int i = n - m + 1; i <= n; i++){ 20 ans *= i; 21 } 22 for (int i = 1; i <= m; i++){ 23 ans /= i; 24 } 25 return ans; 26 }
2.递归
1 #include <stdio.h> 2 #include<stdlib.h> 3 int func(int n, int m); 4 int main() { 5 int n, m; 6 int ans; 7 while(scanf("%d%d", &n, &m) != EOF) { 8 ans = func(n, m); 9 printf("n = %d, m = %d, ans = %d\n", n, m, ans); 10 } 11 system("pause"); 12 return 0; 13 } 14 int func(int n, int m) { 15 if (m < 0 || m > n) return 0; 16 if (m == 0 || m == n) return 1; 17 return func(n - 1, m) + func(n - 1, m - 1); 18 }
结果截屏

试验任务六
源代码
1 #include <stdio.h> 2 #include<stdlib.h> 3 int gcd(int a, int b, int c); 4 int main() { 5 int a, b, c; 6 int ans; 7 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 8 ans = gcd(a, b, c); 9 printf("最大公约数:%d\n\n", ans); 10 } 11 system("pause"); 12 return 0; 13 } 14 int gcd(int a, int b, int c) { 15 int min_val; 16 min_val = (a < b) ? ((a < c) ? a : c) : ((b < c) ? b : c); 17 int i; 18 for(i = min_val; i >= 1; i--) { 19 if(a % i == 0 && b % i == 0 && c % i == 0) { 20 return i; 21 } 22 } 23 return 1; 24 }
结果截屏

试验任务七
源代码
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 scanf("%d", &n); 8 print_charman(n); 9 system("pause"); 10 return 0; 11 } 12 void print_charman(int n) { 13 for (int k = 0; k < n; k++) { 14 for (int i = 0; i < k; i++) { 15 printf(" "); 16 } 17 for (int i = 0; i < n - k; i++) { 18 printf("O "); 19 } 20 printf("\n"); 21 for (int i = 0; i < k; i++) { 22 printf(" "); 23 } 24 for (int i = 0; i < n - k; i++) { 25 printf("<> "); 26 } 27 printf("\n"); 28 for (int i = 0; i < k; i++) { 29 printf(" "); 30 } 31 for (int i = 0; i < n - k; i++) { 32 printf("I I"); 33 } 34 printf("\n"); 35 } 36 }
结果截屏

浙公网安备 33010602011771号