实验3
实验任务1
源代码
1 #include <stdio.h> 2 3 char score_to_grade(int score); 4 5 int main() 6 { 7 int score; 8 char grade; 9 10 while(scanf("%d", &score) != EOF){ 11 grade = score_to_grade(score); 12 printf ("分数:%d, 等级:%c\n\n", score, grade); 13 } 14 15 return 0; 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 return ans; 30 }
运行截图

问题1:将整形变为字符,形参类型为int,返回值为char
问题2:少break不能终止,输出结果变为字符串
实验任务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 14 return 0; 15 } 16 int sum_digits(int n){ 17 int ans = 0; 18 19 while(n != 0){ 20 ans += n % 10; 21 n /= 10; 22 } 23 return ans; 24 } 25 26
运行截图

问题1:计算n的每位数子之和
问题2:由迭代变为递归
实验任务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 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 return 0; 14 } 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 t = power(x, n/2); 26 return t*t; 27 } 28 } 29
运行截图

问题1:计算n的x次方
问题2:

实验任务4
源代码
1 #include <stdio.h> 2 int is_prime(int n) { 3 if (n <= 1) { 4 return 0; 5 } 6 if (n == 2) { 7 return 1; 8 } 9 if (n % 2 == 0) { 10 return 0; 11 } 12 for (int i = 3; i * i <= n; i += 2) { 13 if (n % i == 0) { 14 return 0; 15 } 16 } 17 return 1; 18 } 19 int main() { 20 int count = 0; 21 printf("100以内的孪生素数:\n"); 22 for (int n = 2; n <= 98; n++) { 23 if (is_prime(n) && is_prime(n + 2)) { 24 printf("%d %d\n", n, n + 2); 25 count++; 26 } 27 } 28 printf("100以内的孪生素数共有%d个.\n", count); 29 return 0; 30 }
运行截图

实验任务5
源代码
迭代
1 #include <stdio.h> 2 int func(int n, int m); // 函数声明 3 4 int main() { 5 int n, m; 6 int ans; 7 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 13 return 0; 14 } 15 16 // 函数定义 17 int func(int n, int m){ 18 int ans, i, a = 1, b = 1; 19 if(m == 1 || m == n){ 20 return 1;} 21 if(m>n){ 22 return 0; 23 } 24 for(i = 1;i<=m;++i){ 25 a *= (n - i + 1); 26 b *= i;} 27 ans = a / b; 28 return ans; 29 }
运行截图

递归
1 #include <stdio.h> 2 int func(int n, int m); // 函数声明 3 4 int main() { 5 int n, m; 6 int ans; 7 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 13 return 0; 14 } 15 16 // 函数定义 17 int func(int n, int m){ 18 if(m == 0 || m == n){ 19 return 1; 20 } 21 else if(m > n){ 22 return 0; 23 } 24 else{ 25 return func(n-1, m) + func(n-1 , m-1); 26 } 27 }
运行截图

实验任务6
源代码
1 #include <stdio.h> 2 3 // 函数声明 4 int gcd(int a, int b, int c); 5 6 7 int main() { 8 int a, b, c; 9 int ans; 10 11 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 12 ans = gcd(a, b, c); // 函数调用 13 printf("最大公约数: %d\n\n", ans); 14 } 15 16 return 0; 17 } 18 19 20 // 函数定义 21 int gcd(int a, int b, int c){ 22 int i; 23 i = a; 24 if(b < a) 25 i = b; 26 if(c < a) 27 i = c; 28 for(i;i>=1;--i){ 29 if(a%i==0 && b%i==0 && c%i==0) 30 return i; 31 } 32 }
运行截图

实验任务7
源代码
1 #include <stdio.h> 2 #include <stdlib.h> 3 4 // 函数声明 5 void print_charman(int n); 6 7 8 int main() { 9 int n; 10 11 printf("Enter n: "); 12 scanf("%d", &n); 13 print_charman(n); // 函数调用 14 15 return 0; 16 } 17 18 // 函数print_charman定义 19 void print_charman(int n) 20 { 21 int i, j, k; 22 for (i = n; i >= 1; --i) 23 { 24 for (j = 1; j <= n - i; j++) 25 printf("\t"); 26 for (k = 1; k <= 2 * i - 1; ++k) 27 printf(" O \t"); 28 printf("\n"); 29 for (j = 1; j <= n - i; j++) 30 printf("\t"); 31 for (k = 1; k <= 2 * i - 1; ++k) 32 printf("<H>\t"); 33 printf("\n"); 34 for (j = 1; j <= n - i; j++) 35 printf("\t"); 36 for (k = 1; k <= 2 * i - 1; ++k) 37 printf("I I\t"); 38 printf("\n"); 39 } 40 }
运行截图

浙公网安备 33010602011771号