实验3 函数
TASK 1
在80个输出0~25以内的行数和0~80以内的空格,再在随机输出的行数与空格后面输出“hi, MAY”
#include<stdio.h> #include<stdlib.h> #include<time.h> #include<windows.h> #define N 80 void printText(int line,int col,char text[]); void printSpaces(int n); void printBlankLines(int n); int main() { int line,col,i; char text[N]="hi,May~"; srand(time(0)); for(i=1;i<=10;++i) { line=rand()%25; col=rand()%80; printText(line,col,text); Sleep(1000); } return 0; } void printSpaces(int n) { int i; for(i=1;i<=n;++i) printf(""); } void printBlankLines(int n) { int i; for(i=1;i<=n;++i) printf("\n"); } void printText(int line,int col,char text[]) { printBlankLines(line-1); printSpaces(col-1); printf("%s",text); }
TASK 2
局部 static 变量 :除非下一次赋值,那么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; printf("p=%11d\n",p); p=p*n; return p; }
#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; }
task 3
#include<stdio.h> long long fun(int n); int main() { int n; long long f; while(scanf("%d",&n)!=EOF) { f=fun(n); printf("n = %d,f = %lld\n",n,f); } return 0; } long long fun(int n) { long long f; if(n==0) f=1; else if(n==1) f=1; else f=2*fun(n-1)+1; return f; }
TASK 4
//task 4// #include<stdio.h> #include<math.h> void hanoi(unsigned int n,char from,char temp,char to); void moveplate(unsigned int n,char from,char to); unsigned int count(unsigned int n); int main() { unsigned int m; while(scanf("%u",&m)!=EOF) { hanoi(m,'A','B','C'); printf("\n一共移动了%u次.\n",count(m)); } return 0; } void hanoi(unsigned int n,char from,char temp,char to) { int i; 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); } unsigned int count(unsigned int n) { if(n>=2) return 2*count(n-1)+1; else return 1; }
TASK 5
//task 5// #include<stdio.h> #include<math.h> #define N 20 int is_prime(int n); int main() { int i; int num; for(num=4;num<=N;num+=2) { for(i=2;i<=num/2;i++) { if(is_prime(i)&&is_prime(num-i)) printf("%d = %d + %d\n",num,i,num-i); } } return 0; } int is_prime(int n) { int i; if(n==1)return 1; for(i=2;i<=sqrt(n);i++) { if(n%i==0)return 0; } return 1; }
TASK 6
#include<stdio.h> #include<math.h> long fun(long s); int main() { long s,t; printf("Enter a number:"); while(scanf("%ld",&s)!=EOF) { t=fun(s); printf("new number is:%ld\n\n",t); printf("Enter a number:"); } return 0; } long fun(long s) { long n= 1; int t=0, d; while (s > 0) { d = s % 10; if (d % 2 != 0) { t = d * n + t; n*= 10; } s /= 10; } return t; }