实验3
1
#include<stdio.h> char score_to_grade(int score); int main() { int score; char grade; while (scanf_s("%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)ans的类型和赋值不匹配;没有break会继续执行case;defualt中是'E',前面是"A"。
2
#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)计算输入数中各数字的和。
(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_s("%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> int is_prime(int n); int main() { int n=1; int count=0; printf("100以内的孪生素数:\n"); while (n <= 100) { if (is_prime(n)==1 and is_prime(n+2)==1) { printf("%d %d\n\n", n, n + 2); count += 1; } n += 1; } printf("100以内的孪生素数共有%d个.", count); return 0; } int is_prime(int n) { int i; for (i = 2; i < n; i++) { if (n % i == 0) break; } if (i==n) return 1; else return 0; }

5
#include<stdio.h> #include<stdlib.h> 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,i; int count = 0; int j=1; while (scanf_s("%u", &n) != EOF) { hanoi(n, 'A', 'B', 'C'); for (i = 0; i < n; ++i) { j *= 2; } count = j - 1; printf(" \n"); printf("一共移动了%d次.", count); count = 0; } 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); }

6(方法1、方法2)
#include <stdio.h> int func(int n, int m); int main() { int n, m; int ans; while (scanf_s("%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 up=n, down=m; int c=0; if (m == 0 || m == n) return 1; while ((m > 1)and (n > m - 1)) { --n, --m; up *= n; down *= m; } if(down>0) c = up / down; return c; }
#include <stdio.h> int func(int n, int m); int main() { int n, m; int ans; while (scanf_s("%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 c1, c2; int c=0; int up1 = n - 1 ,down1 = m; int up2 = n - 1, down2 = m-1; if (n < m) return 0; if (m == n or m == 0) return 1; if (m == 1) return n; else return func(n - 1, m) + func(n - 1, m - 1); while ( (n > m - 1) and (m > 1)) { --n, --m; up1 *= n,up2 *=n; down1 *= m,down2*=m; } c1 = up1 / down1; c2 = up2 / down2; c = c1 + c2; return c; }

7
#include <stdio.h> int gcd(int a, int b, int c); int main() { int a, b, c; int ans; while (scanf_s("%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) { while (a != b) { if (a > b) a = a - b; else b = b - a; } while (c != b) { if (c > b) c = c - b; else b = b - c; } while (a != c) { if (a > c) a = a - c; else c = c - a; } return a; }


浙公网安备 33010602011771号