1.实验1
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #include<windows.h> 5 #define N 80 6 7 void print_text(int line,int col,char text[]); 8 void print_spaces(int n); 9 void print_blank_lines(int n); 10 11 int main(){ 12 int line,col,i; 13 char text[N]="hi,November~"; 14 15 srand(time(0)); 16 17 for(i=1;i<=10;++i){ 18 line=rand()%25; 19 col=rand()%80; 20 print_text(line,col,text); 21 Sleep(1000); 22 } 23 return 0; 24 } 25 void print_spaces(int n){ 26 int i; 27 for(i=1;i<=n;++i) 28 printf(""); 29 } 30 void print_blank_lines(int n){ 31 int i; 32 for(i=1;i<=n;++i) 33 printf("\n"); 34 } 35 void print_text(int line,int col,char text[]){ 36 print_blank_lines(line-1); 37 print_spaces(col-1); 38 printf("%s",text); 39 }
功能:实现简单的字符动画
2.实验2
1 #include<stdio.h> 2 long long fac(int n); 3 4 int main(){ 5 int i,n; 6 7 printf("Enter n: "); 8 scanf("%d",&n); 9 for(i=1;i<=n;++i) 10 printf("%d!=%lld\n",i,fac(i)); 11 12 return 0; 13 } 14 long long fac(int n){ 15 static long long p =1; 16 printf("p=%lld\n",p); 17 18 p=p*n; 19 20 return p; 21 }
task2-2.c结果:8,17
1 #include<stdio.h> 2 int func(int,int); 3 4 int main(){ 5 int k=4,m=1,p1,p2; 6 p1=func(k,m); 7 p2=func(k,m); 8 printf("%d,%d\n",p1,p2); 9 10 return 0; 11 } 12 int func(int a,int b){ 13 static int m=0,i=2; 14 i+=m+1; 15 m=i+a+b; 16 17 return m ; 18 }
结果一致
static局部变量:在声明领域初始化一次,在下次进入该作用域时继续使用上次的值。
3.实验3
1 #include<stdio.h> 2 long long func(int n); 3 int main(){ 4 int n; 5 long long f; 6 7 while(scanf("%d",&n)!=EOF){ 8 f=func(n); 9 printf("n=%d,f=%lld\n",n,f); 10 } 11 12 return 0; 13 } 14 long long func(int n){ 15 long long int i,a,b; 16 a=0; 17 18 for(i=1;i<=n;++i){ 19 b=a*2+1; 20 a=b; 21 } 22 return b; 23 }
4.实验4
迭代:
1 #include<stdio.h> 2 int func(int n,int m); 3 int main(){ 4 int n,m; 5 6 while(scanf("%d%d",&n,&m)!=EOF) 7 printf("n=%d,m=%d,ans=%d\n",n,m,func(n,m)); 8 return 0; 9 } 10 int func(int n,int m){ 11 int i,j,up,down,ans; 12 up=1; 13 down=1; 14 for(i=1;i<=m;++i) 15 down=down*i; 16 for(j=n-m+1;j<=n;++j) 17 up=up*j; 18 ans=up/down; 19 return ans; 20 }
递归:
1 #include<stdio.h> 2 int func(int n,int m); 3 int main(){ 4 int n,m; 5 6 while(scanf("%d%d",&n,&m)!=EOF) 7 printf("n=%d,m=%d,ans=%d\n",n,m,func(n,m)); 8 return 0; 9 } 10 int func(int n,int m){ 11 int ans; 12 if(m==0||m==n) 13 ans=1; 14 else if(m>n) 15 ans=0; 16 else 17 ans=func(n-1,m)+func(n-1,m-1); 18 19 20 return ans; 21 }
5.实验5
1 void hanoi(unsigned int n,char from,char temp,char to); 2 void moveplate(unsigned int n,char from,char to); 3 int count; 4 int main(){ 5 unsigned int n; 6 while(scanf("%u",&n)!=EOF){ 7 count=0; 8 hanoi(n,'A','B','C'); 9 printf("一共移动了%d次",count); 10 } 11 12 return 0; 13 } 14 void hanoi(unsigned int n,char from,char temp,char to){ 15 if(n==1) 16 moveplate(n,from,to); 17 else{ 18 hanoi(n-1,from,to,temp); 19 moveplate(n,from,to); 20 hanoi(n-1,temp,from,to); 21 } 22 } 23 void moveplate(unsigned int n,char from,char to){ 24 printf("%u:%c-->%c\n",n,from,to); 25 count++; 26 27 }
6.实验6
1 #include <stdio.h> 2 #include <math.h> 3 long func(long s); 4 int main() { 5 6 long s, t; 7 8 printf("Enter a number: "); 9 while (scanf("%ld", &s) != EOF) { 10 t = func(s); 11 printf("new number is: %ld\n\n", t); 12 printf("Enter a number: "); 13 } 14 15 return 0; 16 } 17 long func(long s){ 18 int d,t=0,a=1; 19 while(s>0){ 20 d=s%10; 21 if(d%2!=0){ 22 t=a*d+t; 23 a=a*10; 24 } 25 s=s/10; 26 } 27 return t; 28 }
7.实验7
1 #include<stdio.h> 2 3 int main(){ 4 int x[10],i,j,a,b,c; 5 a=0; 6 7 while(1){ 8 a++; 9 b=1; 10 for(i=0;i<10;++i) 11 x[i]=0; 12 c=a*a; 13 while(c){ 14 j=c%10; 15 x[j]++; 16 if(x[j]>1){ 17 b=0; 18 break; 19 } 20 c=c/10; 21 } 22 if(b==0) 23 continue; 24 c=a*a*a; 25 while(c){ 26 j=c%10; 27 x[j]++; 28 if(x[j]>1){ 29 b=0; 30 break; 31 } 32 c=c/10;} 33 if(b==0) 34 continue; 35 for(i=0;i<10;++i){ 36 if(x[i]!=1){ 37 b=0; 38 break; 39 } 40 } 41 if(b){ 42 printf("%d %d %d\n",a,a*a,a*a*a); 43 break; 44 } 45 } 46 47 }