实验三
task1
#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);//暂停1000ms } return 0; } //打印n行空格 void print_spaces(int n){ int i; for(i = 1;i <= n; ++i ) printf(" "); } //打印n行空白行 void print_blank_lines(int n){ int i; for(i = 1;i<= n; ++i ) printf("\n"); } //在第line行第col列打印一段文本 void print_text(int line, int col, char text[]){ print_blank_lines(line - 1);//打印(line - 1)行空行 print_spaces(col - 1);//打印(col - 1)行空格 printf("%s", text);//z在第line行,col列输出text中字符串 }
作用:在屏幕上间隔1s生成10个“hi,April~”
task2
//利用局部static变量的特性,计算阶乘 #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;//用static会变 printf("p = %lld\n", p); p = p*n; return p; }
//练习:局部static变量特性 #include <stdio.h> int func(int,int);//函数声明 int main(){ int k = 4, m = 1, p1, p2; p1 = func(k,m);//函数调用 p2 = func(k,m);//函数调用 printf("%d, %d\n", p1, p2); return 0; } //函数定义 int func(int a, int b){ static int m = 0, i = 2; i += m + 1; m = i + a + b; return m; }
task3
#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 f; if(n == 0) f = 0; else f = 2*func(n-1) + 1; return f; }
task4
//递归算组合数 #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 func(int n, int m){ int ans; if(n == m || m == 0) ans = 1; else if(n < m) ans = 0; else ans = func((n - 1),(m)) + func((n - 1),(m-1)); return ans; }
task5
#include <stdio.h> #include <math.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; int i,y1; ans=1; i=1; if(y>0) { while(i<=y) { ans=ans*x; i++; } } else if(y<0) { y1=-y; while(i<=y1) { ans=ans/x; i++; } } else ans=1; return ans; }
//计算x的y次方 mypow #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; system("pause"); } 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; }
task6
#include<stdio.h> #include<stdlib.h> #include<math.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; int i; while(scanf("%u",&n)!=EOF){ hanoi(n,'A','B','C'); i=pow(2,n)-1; printf("\n一共移动了:%d次\n",i); } 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); }
task 7
#include <stdio.h> #include <math.h> int is_prime(int n); int main() { int i,j,k; for(i=2;i<=10;i++) { for(j=2;j<=i;j++) { if(is_prime(2*i-j) == 1 && is_prime(j) == 1) { printf("%d = %d + %d\n",2*i,j,2*i-j); break; } } } return 0; } int is_prime(int n) { int i; for(i=2;i<=sqrt(n);i++) { if(n%i == 0) { return 0; } } return 1; }
task8
#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 i,j=0; while(s!=0) { i=s%10; s=s/10; if(i%2==1) { j=j*10+i; } } while(j!=0) { i=j%10; j=j/10; s =s*10+i; } return s; }