实验3
任务1:
#include <stdio.h> char score_to_grade(int score); // 函数声明 int main() { int score; char grade; while(scanf("%d", &score) != EOF) { grade = score_to_grade(score); // 函数调用 printf("分数: %d, 等级: %c\n\n", score, grade); } return 0; } // 函数定义 char score_to_grade(int score) { char ans; switch(score/10) { case 10: case 9: ans = 'A'; break; case 8: ans = 'B'; break; case 7: ans = 'C'; break; case 6: ans = 'D'; break; default: ans = 'E'; } return ans; }
问题1:函数的功能是对输入的成绩进行评级;形参为整型;返回值为字符型。
问题2:有问题。1.应使用单引号而不是双引号2.缺少break
任务2:
#include <stdio.h> int sum_digits(int n); // 函数声明 int main() { int n; int ans; while(printf("Enter n: "), scanf("%d", &n) != EOF) { ans = sum_digits(n); // 函数调用 printf("n = %d, ans = %d\n\n", n, ans); } return 0; } // 函数定义 int sum_digits(int n) { int ans = 0; while(n != 0) { ans += n % 10; n /= 10; } return ans; }
问题1:函数的功能是对n的每一位上的数字进行求和
问题2:能。第一种为迭代,第二种为递归
任务3:
#include <stdio.h> int power(int x, int n); // 函数声明 int main() { int x, n; int ans; while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { ans = power(x, n); // 函数调用 printf("n = %d, ans = %d\n\n", n, ans); } return 0; } // 函数定义 int power(int x, int n) { int t; if(n == 0) return 1; else if(n % 2) return x * power(x, n-1); else { t = power(x, n/2); return t*t; } }
问题1:计算x的n次方
问题2:是。以下为数学公式模型
任务4:
#include <stdio.h> #include <stdlib.h> int is_prime(int n); int main(){ int n,i=0; printf("100以内的孪生素数:\n"); for(n=2;n<=100;n++){ if(is_prime(n)&&is_prime(n+2)){ i++; printf("%d %d\n",n,n+2);}} printf("100以内的孪生素数有%d个\n",i); return 0; } int is_prime(int n){ int i; if(n<=1) return 0; for(i=2;i<=n/2;i++){ if(n%i==0) return 0; } if(i==n/2+1) return 1; }
任务5:
#include <stdio.h> void hanoi(int n,char start,char end,char help); int i; void main(){ int n; while(scanf("%d",&n)!=EOF){ hanoi(n,'A','C','B'); printf("一共移动了%d次\n",i); i=0; printf("\n"); } return 0; } void hanoi(int n,char start,char end,char help){ if(n==1){ i++; printf("%d:%c-->%c\n",n,start,end);} else{ hanoi(n-1,start,help,end); i++; printf("%d:%c-->%c\n",n,start,end); hanoi(n-1,help,end,start);} }
任务6:
迭代:
#include <stdio.h> int func(int n, int m); // 函数声明 int main() { int n, m; int ans; while(scanf("%d%d", &n, &m) != EOF) { ans = func(n, m); // 函数调用 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); } return 0; } // 函数定义(迭代) int func(int n, int m){ int i,k; double s=1,w=1; for(i=n;i>=(n-m+1);i--) s=s*i; for(k=m;k>=1;k--) w=w*k; return s/w; }
递归:
#include <stdio.h> int func(int n, int m); // 函数声明 int main() { int n, m; int ans; while(scanf("%d%d", &n, &m) != EOF) { ans = func(n, m); // 函数调用 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); } return 0; } // 函数定义(递归) int func(int n, int m){ int s; if(m>n) return 0; if(m==0||m==n) return 1; else{ s=func(n-1,m)+func(n-1,m-1); return s;} }
任务7:
#include <stdio.h> #include <stdlib.h> //函数声明 void print_charman(int n); int main() { int n; printf("Enter n: "); scanf("%d", &n); print_charman(n); return 0; } // 函数定义 void print_charman(int n){ int i,j=0,m=n*2-1; while(m!=-1) { for (i = 0; i < j; i++) { printf(" "); } for (i = 0; i < m; i++) { printf(" O "); } printf("\n"); for (i = 0; i < j; i++) { printf(" "); } for (i = 0; i < m; i++) { printf("<H> "); } printf("\n"); for (i = 0; i < j; i++) { printf(" "); } for (i = 0; i < m; i++) { printf("I I "); } printf("\n"); m-=2; j+=7; } printf("\n"); }