task001
#include <stdio.h> #include <stdlib.h> #include <time.h> #include <windows.h> #define N 80 void print_text(int line, int col, char text[] ); void print_spaces(int n); void print_blank_lines(int n); int main(){ int line, col, i; char text[N] = "hi, April~"; srand(time(0)); for(i = 1; i <=10; ++i){ line = rand() % 25; col = rand() % 80; print_text(line, col, text); Sleep(1000); } return 0; } void print_spaces(int n){ int i; for(i = 1; i<=n; ++i) printf(" "); } void print_blank_lines(int n){ int i; for(i = 1; i <= n; ++i) printf("\n"); } void print_text(int line, int col, char text[]){ print_blank_lines(line-1); print_spaces(col-1); printf("%s", text); }

task002
#include <stdio.h> long long fac(int n); int main(){ int i, n; printf("Enter n: "); scanf("%d", &n); for(i = 1; i <= n; ++i) printf("%d! = %lld\n", i, fac(i)); return 0; } long long fac(int n){ static long long p = 1; p = p * n; return p; }

talk:理论上结果中会出现p=n值的输出。
task002plus
#include <stdio.h> long long fac(int n); int main(){ int i, n; printf("Enter n: "); scanf("%d", &n); for(i = 1; i <= n; ++i) printf("%d! = %lld\n", i, fac(i)); return 0; } long long fac(int n){ static long long p = 1; printf("p = %lld\n", p); p = p * n; return p; }

task003
(不使用标准函数pow())
#include <stdio.h> long long func(int n); int main(){ int n; long long f; while (scanf("%d", &n) != EOF){ f = func(n); printf("n = %d, f = %lld\n", n, f); } return 0; } long long func(int n){ int i; long long func; func = 1; for(i = 1;i <n ; ++i) func = 2 * func + 1; return func;}

(好像绕了弯子,不使用pow()的时候直接用循环得出答案即可)
task003改良版
#include <stdio.h> long long func(int n); int main(){ int n; long long f; while (scanf("%d", &n) != EOF){ f = func(n); printf("n = %d, f = %lld\n", n, f); } return 0; } long long func(int n){ int i; long long func,m; m = 1; for(i = 1;i <= n ; ++i){ m = 2*m; } func = m - 1; return func; }

task003plus
#include <stdio.h> long long func(int n); int main(){ int n; long long f; while (scanf("%d", &n) != EOF){ f = func(n); printf("n = %d, f = %lld\n", n, f); } return 0; } long long func(int n){ long long m; if(n==0) m=1; else m=2*(func(n-1)+1); m = m - 1; return m; }

task004
#include <stdio.h> int func(int n,int m); int main(){ int n, m; while(scanf("%d%d", &n, &m) != EOF) printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m)); return 0; } int factorial(int n); int func(int n,int m){ int C; if(n==m||m==0) C=1; else if(m>n) C=0; else if(n>m&&m>0) C=( factorial(n) ) / (factorial(m) * factorial(n-m) ); return C; } int factorial(int n){ int result=1; for(int i=1;i<=n;i++) result*=i; return result; }

task005.1
#include <stdio.h> double mypow(int x, int y); int main(){ int x, y; double ans; while(scanf("%d%d", &x, &y)!=EOF){ ans = mypow(x, y); printf("%d的%d次方:%g\n\n", x, y, ans); } return 0; } double mypow(int x, int y){ int i; double ans = 1.0; if(y>=0){ for(i=1;i<=y;i++) ans=ans * x; } else{ for(i=0;i>y;i--) //要注意到 y 为负值是for结构循环条件的变化 ans=ans / x; } return ans; }

task005.2
#include <stdio.h> double mypow(int x, int y); int main(){ int x, y; double ans; while(scanf("%d%d", &x, &y)!=EOF){ ans = mypow(x, y); printf("%d的%d次方:%g\n\n", x, y, ans); } return 0; } double mypow(int x, int y){ double ans; if(y == 0){ ans = 1;} else if(y > 0){ ans = x * mypow(x,y-1);} else if(y < 0){ ans = 1 / mypow(x,-y);} return ans; }

task006
#include <stdio.h> #include <stdlib.h> #include <math.h> void hanoi(unsigned int n,char from,char term,char to); void moveplate(unsigned int n,char from,char to); int main(){ unsigned int n; int m; while(scanf("%u",&n)!=EOF){ m = pow(2,n)-1; hanoi(n,'A','B','C'); printf("一共移动了%d次.\n",m); //n=1,m=1;n=2,m=3;n=3,m=7;n=4,m=15;n=5,m=31; } 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); }

task007
#include <stdio.h> #include <math.h> #include <stdlib.h> int is_prime(int n); int main() { int n,p,sum,flag_1,flag_2; while(scanf("%d%d",&n,&p)!=EOF){ flag_1=is_prime(n); flag_2=is_prime(p); sum=flag_1+flag_2; switch(sum) { case 2: sum=n+p; printf("%d=%d+%d\n",sum,n,p); break; case 1: break; case 0: break; } } return 0; } int is_prime(int n){ int i,j; for(i=2;i<n;i++) if(n%i==0) break; if(i==n) j=1; else j=0; return j; }

task008
#include <stdio.h> #include <math.h> long func(long s); int main(){ long s, t; printf("Enter a number:"); while(scanf("%ld",&s)!=EOF){ t = func(s); printf("new number is:%ld\n\n",t); printf("Enter a number:"); } return 0; } long func(long s){ long ans=0; long x,i=1; while(s!=0) { x=s%10,s=s/10; if(x%2!=0) { ans=ans+x*i; i=i*10; } } return ans; }
