实验三
Task 1:
1 #include <stdio.h> 2 char score_to_grade(int score); // 函数声明 3 int main() { 4 int score; 5 char grade; 6 while(scanf("%d", &score) != EOF) { 7 grade = score_to_grade(score); // 函数调用 8 printf("分数: %d, 等级: %c\n\n", score, grade); 9 } 10 return 0; 11 } 12 // 函数定义 13 char score_to_grade(int score) { 14 char ans; 15 switch(score/10) { 16 case 10: 17 case 9: ans = 'A'; break; 18 case 8: ans = 'B'; break; 19 case 7: ans = 'C'; break; 20 case 6: ans = 'D'; break; 21 default: ans = 'E'; 22 } 23 return ans; 24 }

问题一:score_to_grade的作用是将分数转换成等级;形参类型是整型,返回值类型是字符型
问题二:没有break终止,程序会继续执行后续代码,ans会被后续分支的赋值覆盖,最后输出的全是E
Task 2:
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 return 0; 14 } 15 int sum_digits(int n){ 16 int ans = 0; 17 18 while(n != 0){ 19 ans +=n % 10; 20 n /= 10; 21 } 22 23 return ans; 24 }

问题一:sum_digits是计算输入的n的所有位数字之和
问题二:能实现同样的输出。原:迭代的思维;现:递归的思维,拆分成计算去掉个位后剩余数字的和,以及个位数字
Task 3:
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 10 while (printf("Enter x and n:"),scanf("%d%d",&x,&n)!=EOF){ 11 ans = power(x,n); 12 printf("n = %d,ans = %d\n\n",n,ans); 13 } 14 return 0; 15 } 16 17 int power(int x,int n){ 18 int t; 19 20 if(n == 0) 21 return 1; 22 else if(n%2) 23 return x*power(x,n-1); 24 else{ 25 26 t = power(x,n/2); 27 return t*t; 28 } 29 }

问题一:power的功能是实现x的n次方
问题二:是。

Task4:
1 #include <stdio.h> 2 int is_prime(int n); 3 int main() 4 { 5 int count = 0; 6 int n; 7 printf("100以内的孪生素数:\n"); 8 for(n = 2; n <= 98; n++) 9 { 10 if (is_prime(n) && is_prime(n + 2)) 11 { 12 printf("%d %d\n", n, n + 2); 13 count++; 14 } 15 } 16 printf("\n100以内的孪生素数共有%d个。\n", count); 17 return 0; 18 } 19 20 int is_prime(int n) 21 { 22 int i; 23 if (n<2) 24 { 25 return 0; 26 } 27 for(i=2;i*i <= n;i++) 28 { 29 if(n%i == 0) 30 { 31 return 0; 32 } 33 } 34 return 1; 35 }

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

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

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

Task 7:
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 void print_charman(int n); 5 int main() 6 { 7 int n; 8 printf("Enter n: "); 9 scanf("%d", &n); 10 print_charman(n); 11 return 0; 12 } 13 void print_charman(int n) 14 { 15 int i,j; 16 for ( i = n; i >= 1; i--) 17 { 18 for ( j = 0; j < n - i; j++) 19 { 20 printf("\t"); 21 } 22 for ( j = 0; j < (2*i-1); j++) 23 { 24 printf(" O "); 25 if (j < (2*i-1) - 1) 26 { 27 printf("\t"); 28 } 29 } 30 printf("\n"); 31 for ( j = 0; j < n - i; j++) 32 { 33 printf("\t"); 34 } 35 for ( j = 0; j < (2*i-1); j++) 36 { 37 printf("<H>"); 38 if (j < (2*i-1) - 1) 39 { 40 printf("\t"); 41 } 42 } 43 printf("\n"); 44 for ( j = 0; j < n - i; j++) 45 { 46 printf("\t"); 47 } 48 for ( j = 0; j < (2*i-1); j++) 49 { 50 printf("I I"); 51 if (j < (2*i-1) - 1) 52 { 53 printf("\t"); 54 } 55 } 56 printf("\n"); 57 if (i > 1) { 58 printf("\n"); 59 } 60 } 61 }


浙公网安备 33010602011771号