实验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; }
//函数score_to_grade 用来 划分不同分数等级 形参类型是整数int,分数数值,返回值类型是char,字母类型
//首先引用字母应该使用单引号‘’;其次,每个case后应该加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; }
//算一个数字的每一位数加起来求和
//能实现,第二种方法是 递归算法,将多位数不断减少位数,同时ans加上个位数,直到变为个位数;第一种是迭代 逐个相加每位数
任务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; } }
//函数power用来计算 x的n次方
//是递归, 递归模式模式是: return x * power(x, n-1);n为偶数是,x的n次方==x的二分之n次方的平方,一直循环直到n=2
任务4
#include<stdio.h> #include<math.h> int is_prime(int n); int main(){ int i,count=0; for(i=2;i<=100;i++){ if(is_prime(i) && is_prime(i+2)) { printf("100以内的孪生素数:%d,%d\n",i,i+2); count++;} } printf("100以内的孪生素数共有%d个",count); return 0; } int is_prime(int n){ int i; for(i=2;i<=(n/2);i++) { if(n%i==0) return 0; } return 1; }
任务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 count=0; int main(){ unsigned int n; while(scanf("%d",&n)!=EOF){ //多组输入 hanoi(n,'A','B','C'); printf("一共移动了%d次\n",count); count=0;} 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
递归
#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 || n==m) return 1; else if (n<m) return 0; else { int a=1, b=1, c=1; int i, j, k; for(i=1;i<=n;i++){ a=i*a; } for(j=1;j<=m;j++){ b=j*b; } for(k=1;k<=n-m;k++){ c=k*c; } return (a/b/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 || n==m) return 1; else if (n<m) return 0; else { return func(n-1,m)+func(n-1,m-1); } }
任务7
void print_charman(int n);// 函数声明 // 待补足 // xxx int main() { int n; printf("Enter n: "); scanf("%d", &n); print_charman(n); // 函数调用 return 0; } void print_charman(int n){ int x,y=0,q,a,b,c; q=n*2-1; while(q!=-1) { for(x=0;x<y;x++){ printf(" ");} for(a=0;a<q;a++){ printf(" O ");} printf("\n"); for(x=0;x<y;x++){ printf(" ");} for(b=0;b<q;b++){ printf("<H> ");} printf("\n"); for(x=0;x<y;x++){ printf(" ");} for(c=0;c<q;c++){ printf("I I ");} printf("\n"); y+=6; q=q-2; } }