实验3
task1
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 }

函数score_to_grade作用:计算不同分数所对应的等级
形参类型:整型 返回值类型:字符型
改变后问题:分数>=90时输出“ABCDE”;80<=分数<90时输出“BCDE”:70<=分数<80输出“CDE”;60<=分数<70输出“DE”;分数<60输出“E”
task2
1 #include <stdio.h> 2 3 int sum_digits(int n); 4 5 int main() 6 { 7 int n; 8 int ans; 9 10 while(printf("Enter n:"),scanf("%d",&n)!=EOF){ 11 ans=sum_digits(n); 12 printf("n=%d,ans=%d\n\n",n,ans); 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 return ans; 25 }

函数功能:求各个位上数字的和
改变后的代码可以实现同样的输出
区别:改前为迭代,改后为递归
task3
1 #include <stdio.h> 2 3 int power(int x, int n); 4 5 int main() 6 { 7 int n, x; 8 int ans=0; 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", x, ans); 13 } 14 return ans; 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 }

power的功能:求一个数的n次方
此函数是递归函数,函数递归模式的数学公式为:

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

task5
方式1:迭代
1 #include <stdio.h> 2 int func(int n, int m); 3 int main() { 4 int n, m; 5 int ans; 6 while (scanf("%d%d", &n, &m) != EOF) { 7 ans = func(n, m); 8 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 9 } 10 return 0; 11 } 12 13 int func(int n, int m) { 14 int i=1,j = 1; 15 int k; 16 for (k=0; k < m;++k) { 17 i *= (n-k); 18 } 19 for (k=1; k<=m;++k) { 20 j *= k; 21 } 22 return i/j; 23 }

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

task6
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 int gcd(int a, int b, int c) { 15 int min = a; 16 int i; 17 if (b < min) 18 min = b; 19 if (c < min) 20 min = c; 21 i = min; 22 for (i; i >= 1; --i) { 23 if (a % i == 0 && b % i == 0 && c % i == 0) 24 return i; 25 } 26 return 1; 27 }

task7
1 #define _CRT_SECURE_NO_WARNINGS 2 #include <stdio.h> 3 #include <stdlib.h> 4 5 void print_charman(int n); 6 7 int main() { 8 int n; 9 10 printf("Enter n: "); 11 scanf("%d", &n); 12 print_charman(n); 13 14 return 0; 15 } 16 void print_charman(int n) { 17 int m = n*2 - 1; 18 int i ,j ,s; 19 20 for (i=1; i <= n; ++i) { 21 22 for (s=0; s < i; ++s) { 23 printf(" "); 24 } 25 for (j=1; j <= m; ++j) { 26 printf(" O "); 27 } 28 printf("\n"); 29 for (s=0; s < i; ++s) { 30 printf(" "); 31 } 32 for (j=1; j <= m; ++j) { 33 printf("<H> "); 34 } 35 printf("\n"); 36 for (s=0; s < i; ++s) { 37 printf(" "); 38 } 39 for (j=1; j <= m; ++j) { 40 printf("I I "); 41 } 42 m -= 2; 43 printf("\n"); 44 } 45 }



浙公网安备 33010602011771号