实验三
1 #include <stdio.h> 2 char score_to_grade(int score); // 函数声明 3 int main() { 4 int score; 5 char grade; 6 while(scanf("%d", &score) != EOF) { 7 grade = score_to_grade(score); // 函数调用 8 printf("分数: %d, 等级: %c\n\n", score, grade); 9 } 10 return 0; 11 } 12 // 函数定义 13 char score_to_grade(int score) { 14 char ans; 15 switch(score/10) { 16 case 10: 17 case 9: ans = 'A'; break; 18 case 8: ans = 'B'; break; 19 case 7: ans = 'C'; break; 20 case 6: ans = 'D'; break; 21 default: ans = 'E'; 22 }
问题一:将分数转化为等第,形参为int整形,返回值为char字符型
问题二:没有break,所有生成结果会被最后的E取代
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 14 return 0; 15 } 16 17 // 函数定义 18 int sum_digits(int n) { 19 int ans = 0; 20 21 while(n != 0) { 22 ans += n % 10; 23 n /= 10; 24 } 25 26 return ans; 27 }
问题一:将输入的n的各个位数上的数字相加
问题二:可以,原来是迭代,现在是递归
1 #include <stdio.h> 2 3 int power(int x, int n); // 函数声明 4 5 int main() { 6 int x, n; 7 int ans; 8 9 while(printf("Enter x and n: "), scanf("%d%d", &x, &n) != EOF) { 10 ans = power(x, n); // 函数调用 11 printf("n = %d, ans = %d\n\n", n, ans); 12 } 13 14 return 0; 15 } 16 17 // 函数定义 18 int power(int x, int n) { 19 int t; 20 21 if(n == 0) 22 return 1; 23 else if(n % 2) 24 return x * power(x, n-1); 25 else { 26 t = power(x, n/2); 27 return t*t; 28 } 29 }
问题一:计算x的n次
问题二:是
四
#include <stdio.h> #include<stdlib.h> int is_prime(int n); int main(){ int n; int i; int sum=0; printf("100以内的孪生素数:\n"); scanf("%d",&n); for(i=2;i<=n-2;++i) if(is_prime(i) && is_prime(i+2)){ sum+=1; printf("%d %d\n",i , i+2); } printf("100以内的孪生素数共有%d个",sum); system("pause"); return 0; } int is_prime(int n){ int i; if(n<2){ return 0; } if(n==2){ return 1; } for(i=2;i*i<=n;++i) if(n%i==0){ return 0; } return 1; }
五
#include<stdio.h> #include<stdlib.h> void hanoi(int n,char from,char temp,char to); void moveplate(int n,char from,char to); int t; int main() { int n; while(scanf("%u",&n)!=EOF){ t=0; hanoi(n,'A','B','C'); printf("移动了%d次\n",t);} system("pause"); return 0; } void hanoi(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(int n,char from,char to) { printf("%u:%c-->%c\n",n,from,to); t++; }
六
迭代
1 #include <stdio.h> 2 #include <stdlib.h> 3 int func(int n, int m); // 函数声明 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while(scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); // 函数调用 11 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 12 } 13 system("pause"); 14 return 0; 15 } 16 17 // 函数定义 18 // 待补足。。。(分别用迭代和递归实现) 19 int func(int n, int m){ 20 if(m>n) 21 return 0; 22 if(m==0 || m==n) 23 return 1; 24 int i; 25 int j=1; 26 int k=1; 27 28 for(i=1;i<=m;++i){ 29 j=j*(n-(m-i)); 30 k=k*i; 31 } 32 return j/k; 33 }
递归·
1 #include <stdio.h> 2 #include <stdlib.h> 3 int func(int n, int m); // 函数声明 4 5 int main() { 6 int n, m; 7 int ans; 8 9 while(scanf("%d%d", &n, &m) != EOF) { 10 ans = func(n, m); // 函数调用 11 printf("n = %d, m = %d, ans = %d\n\n", n, m, ans); 12 } 13 system("pause"); 14 return 0; 15 } 16 17 // 函数定义 18 // 待补足。。。(分别用迭代和递归实现) 19 int func(int n, int m){ 20 if(m>n) 21 return 0; 22 if(m==0 || m==n) 23 return 1; 24 return func(n-1,m)+func(n-1,m-1); 25 }
七
1 #include <stdio.h> 2 3 // 函数声明 4 // 待补足.... 5 int gcd(int a,int b,int c); 6 7 int main() { 8 int a, b, c; 9 int ans; 10 11 while(scanf("%d%d%d", &a, &b, &c) != EOF) { 12 ans = gcd(a, b, c); // 函数调用 13 printf("最大公约数: %d\n\n", ans); 14 } 15 16 return 0; 17 } 18 19 20 // 函数定义 21 // 待补足... 22 int gcd(int a,int b,int c){ 23 int min=a; 24 int i; 25 if(b<min){ 26 min=b; 27 } 28 if(c<min){ 29 min=c; 30 } 31 for(i=min;i>=1;i--){ 32 if(a%i==0 && b%i==0 && c%i==0){ 33 return i; 34 } 35 } 36 return 1; 37 }