实验3
实验任务1
1 #include<stdio.h> 2 char score_to_grade(int score); 3 4 int main() 5 { 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 return 0; 14 } 15 16 char score_to_grade(int score){ 17 char ans; 18 switch (score/10){ 19 case 10: 20 case 9: ans='A';break; 21 case 8: ans='B';break; 22 case 7: ans='C';break; 23 case 6: ans='D';break; 24 default: ans='E'; 25 } 26 return ans; 27 }
截图

问题1:函数的功能是将百分制分数转换为等级制成绩;形参类型:int score;返回值类型:char;
问题2:修改后"A"不是char类型变量会导致编译错误且不加break所有成绩都会被判定为E;
实验任务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 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 }
截图

问题1:函数功能:计算一个整数的各位数字之和;
问题2:两种算法均能实现。第一种运用了迭代的运算方式,第二种运用了递归的运算方式,递归直接运用公式更简洁明了。
实验任务3
1 #include<stdio.h> 2 int power(int x, int n); 3 4 int main(){ 5 int x,n; 6 int ans; 7 8 while(printf("Enter x and n:"),scanf("%d%d",&x,&n)!= EOF){ 9 ans=power(x,n); 10 printf("n=%d,ans=%d\n\n",n,ans); 11 } 12 return 0; 13 } 14 15 int power(int x,int n){ 16 int t; 17 18 if(n==0) 19 return 1; 20 else if(n%2) 21 return x*power(x,n-1); 22 else{ 23 t=power(x,n/2); 24 25 } 26 }
截图

问题1:函数功能:计算整数x的n次幂;
问题2:是递归函数。

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

实验任务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 int 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 < 0 || m > n) return 0; 18 if (m == 0 || m == n) return 1; 19 20 if (m > n - m) { 21 m = n - m; 22 } 23 24 int ans = 1; 25 for (int i = 1; i <= m; i++) { 26 ans = ans * (n - m + i) / i; 27 } 28 29 return ans; 30 }
截图

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 (m < 0 || m > n) return 0; 15 if (m == 0 || m == n) return 1; 16 if (m == 1) return n; 17 18 return func(n - 1, m - 1) + func(n - 1, m); 19 }
截图

实验任务6
1 #include<stdio.h> 2 int gcd(int a,int b,int c); 3 4 int main(){ 5 int a,b,c; 6 int ans; 7 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 15 int gcd(int a,int b,int c){ 16 int min=a; 17 if(b<min) min=b; 18 if(c<min) min=c; 19 20 for(int i=min;i>=1;i--){ 21 if(a%i==0&&b%i==0&&c%i==0){ 22 return i; 23 } 24 } 25 return 1; 26 }
截图

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


浙公网安备 33010602011771号