实验三
任务一
#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.没有break
任务二
#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迭代思维,一个递推思维
#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; } }
w问题一:求x的n次方
问题二:是的
任务四
#include<stdio.h> int is_prime(int x); int main(){ int m,n,p,i;
i=0; for(m=2;m<=100;m++) { n=is_prime(m); p=is_prime(m+2); if(n==1 && p==1) { printf("%d %d",m,m+2); printf("\n"); i+=1; }} printf("孪生素数有%d对",i); } int is_prime(int x){ int i; for(i=2;i<x;i++) { if(x%i==0) return 0; } return 1; }

任务五
#include<stdio.h> void hanoi(unsigned int n,char from,char temp,char to); void moveplate(unsigned int n,char from,char to); int t=0; int main(){ unsigned int n;while(scanf("%u",&n)!=EOF) { hanoi(n,'A','B','C'); printf("移动了%d次",t); t=0; } } void hanoi(unsigned int n,char from,char temp,char to){ if(n==1) moveplate(n,from,to); else { hanoi(n-1,from,to,temp); moveplate(n,from,to); hanoi(n-1,temp,from,to); } } void moveplate(unsigned int n,char from,char to){ printf("%u:%c-->%c\n",n,from,to); t=t+1; }

任务六
#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; } // 函数定义 // 待补足。。。(分别用迭代和递归实xian) int func(int n,int m){ int i,j,t,u,r; u=1; r=1; if(m==0) { return 1;} else if(m>n) { return 0;} else { for(i=n-m+1;i<=n;i++) u=u*i; for(j=1;j<=m;j++) r=r*j; t=u/r; return t;} }
#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; } // 函数定义 // 待补足。。。(分别用迭代和递归实xian) int func(int n,int m){ if(m==0) return 1; if(m>n) return 0; return func(n-1,m)+func(n-1,m-1); }

任务七
#include <stdio.h> int gcd(int x,int y,int z); int main() { int a, b, c; int ans; while(scanf("%d%d%d", &a, &b, &c) != EOF) { ans = gcd(a, b, c); // 函数调用 printf("最大公约数: %d\n\n", ans); } return 0; } int gcd(int x,int y,int z){ int i; int min=x<y?x:y; min=min<z?min:z; for(i=min;i>=0;i--) if(x%i==0 && y%i==0 && z%i==0) break; return i; }

浙公网安备 33010602011771号