实验三
实验任务1
task.1.c 源代码
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 }
运行截图

问题1:将输入的百分制转化为对应等级。形参类型:int 返回值类型:char类型
问题2:每个case分支后缺少break,从而导致会继续执行下去;单个字符要用' '表示
实验任务2
task.2.c源代码
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 }
运行截图

问题1:计算一个整数的个位数字之和
问题2:可以,进行递归调用
实验任务3
task.3.c源代码
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 }
运行截图

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

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

实验任务6
task6.c
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", ans); 11 } 12 return 0; 13 } 14 15 int gcd(int a, int b, int c) { 16 int min = a; 17 int i; 18 19 if(b < min) 20 min = b; 21 if(c < min) 22 min = c; 23 24 for (int i = min; i >= 1; i--) { 25 if(a%i == 0 && b%i == 0 && c%i == 0) { 26 return i; 27 } 28 } 29 }
运行截图

实验任务7
task7.c源代码
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 } 13 return 0; 14 15 } 16 17 void print_charman(int n) { 18 for (int i = 1; i <= n; i++) { 19 for (int j = 1; j < i; j++) { 20 printf("\t"); 21 22 } 23 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 24 printf(" O \t"); 25 26 } 27 printf("\n"); 28 29 for (int j = 1; j < i; j++) { 30 printf("\t"); 31 32 } 33 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 34 printf(" <H> \t"); 35 36 } 37 printf("\n"); 38 39 for (int j = 1; j < i; j++) { 40 printf("\t"); 41 42 } 43 for (int j = 1; j <= 2 * (n - i) + 1; j++) { 44 printf(" I I \t"); 45 46 } 47 printf("\n"); 48 49 } 50 51 }
运行截图


浙公网安备 33010602011771号