实验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:函数的功能是根据输入的分数将分数转换为对应的等级。形参score的类型是int,返回值的类型是char,表示对应等级。
问题2:else的位置和逻辑有问题,中间没有及时break,输出的结果可能被最后一跳输出的E覆盖
任务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:sum_digits功能是计算一个正整数的各个位数之和
问题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:power函数功能是计算一个数的乘方。
问题2:是递归函数。

任务4:
#include <stdio.h> int main(){ int n,x; n=2; x=0; while(n<=98){ if(is_prime(n)&&is_prime(n+2)){ printf("%d %d\n",n,n+2); x++; } n++; } printf("100以内的孪生素数共有%d个",x); return 0; } int is_prime(int n){ int i; if(n==1){ return 0; } if(n==2 || n==3){ return 1; } if(n%2==0) return 0; if(n%3==0) return 0; for(i=5;i*i<=n;i=i+6){ if(n%i==0||n%(i+2)==0){ return 0; } return 1; } }

任务5:
#include<stdio.h> #include<stdlib.h> int count=0; void hanoi(unsigned int n,char from,char temp,char to); void moveplate(unsigned int n,char from,char to); int main() { unsigned int n; while(scanf("%u",&n)!=EOF) {count=0; hanoi(n,'A','B','C'); printf("\n一共移动了%d次.\n",count);} system("pause"); return 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); count++; }

任务6:
task1.c:
#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 a,b,i; a=1; b=1; for(i=n;i>=n-m+1;i--){ a=a*i; } for(i=m;i>=1;i--){ b=b*i; } return a/b; }
task2.c:
#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){ if(m==0||m==n){ return 1; } if(m<0||m>n){ return 0; } return func(n-1,m-1)+func(n-1,m); }

任务7:
#include <stdio.h> 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 a,int b,int c){ int i,min; min=a<b?(a<c?a:c):(b<c?b:c); for(i=min;i>=1;i--) { if(a%1==0&&b%i==0&&c%i==0){ return i; } } return 1; }

浙公网安备 33010602011771号