实验3 函数
1.task1
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<time.h> 4 #include<windows.h> 5 #define N 80 6 7 void printText(int line,int col,char text[]); 8 void printSpaces(int n); 9 void printBlankLines(int n); 10 11 int main() 12 { 13 int line,col,i; 14 char text[N]="hi,May~"; 15 16 srand(time(0)); 17 18 for(i=1;i<=10;++i) 19 { 20 line=rand()%25; 21 col=rand()%80; 22 printText(line,col,text); 23 Sleep(1000); 24 } 25 26 return 0; 27 } 28 29 void printSpaces(int n) 30 { 31 int i; 32 33 for(i=1;i<=n;++i) 34 printf(" "); 35 } 36 37 void printBlankLines(int n) 38 { 39 int i; 40 41 for(i=1;i<=n;++i) 42 printf("\n"); 43 } 44 45 void printText(int line,int col,char text[]) 46 { 47 printBlankLines(line-1); 48 printSpaces(col-1); 49 printf("%s",text); 50 51 }
循环一下步骤10次:1.打印0~24个空行 2.打印0~79个空格 3.打印“hi,May~”
2.task2_1
1 #include<stdio.h> 2 3 long long fac(int n); 4 5 int main() 6 { 7 int i,n; 8 9 printf("Enter n:"); 10 scanf("%d",&n); 11 12 for(i=1;i<=n;++i) 13 printf("%d!=%lld\n",i,fac(i)); 14 15 return 0; 16 } 17 18 long long fac(int n) 19 { 20 static long long p=1; 21 //printf("p =%lld\n",p); 22 p=p*n; 23 24 return p; 25 }

3.task2_2
1 #include<stdio.h> 2 3 int func(int a,int b); 4 5 int main() 6 { 7 int k=4,m=1,p1,p2; 8 9 p1=func(k,m); 10 p2=func(k,m); 11 printf("%d,%d\n",p1,p2); 12 13 return 0; 14 } 15 16 int func(int a,int b) 17 { 18 static int m=0,i=2; 19 20 i+=m+1; 21 m=i+a+b; 22 23 return m; 24 }

局部static变量仅在声明后调用的函数中使用,且变量保留的值可用于下一次调用。
4.task3
1 #include<stdio.h> 2 3 long long fun(int n); 4 5 int main() 6 { 7 int n;long long f; 8 9 while(scanf("%d",&n)!=EOF) 10 { 11 f=fun(n); 12 printf("n = %d,f = %lld\n\n",n,f); 13 } 14 15 return 0; 16 } 17 18 long long fun(int n) 19 { 20 static long long m; 21 if(n>=1&&n<=32) 22 { 23 m=2*fun(n-1)+1; 24 } 25 else if(n==0) m=0; 26 27 return m; 28 }

5.task4
1 #include<stdio.h> 2 3 void hanoi(unsigned int n,char from,char temp,char to); 4 void moveplate(unsigned int n,char from,char to); 5 int i; 6 7 int main() 8 { 9 unsigned int n; 10 while(scanf("%u",&n)!=EOF) 11 { 12 i=0; 13 hanoi(n,'A','B','C'); 14 printf("\n一共移动了%d次\n",i); 15 printf("\n\n"); 16 17 } 18 19 return 0; 20 } 21 22 void hanoi(unsigned int n,char from,char temp,char to) 23 { 24 if(n==1) 25 { 26 moveplate(n,from,to); 27 } 28 else 29 { 30 hanoi(n-1,from,to,temp); 31 moveplate(n,from,to); 32 hanoi(n-1,temp,from,to); 33 } 34 35 } 36 37 void moveplate(unsigned int n,char from,char to) 38 { 39 printf("第%u个盘子:%c-->%c\n",n,from,to); 40 i++; 41 }

6.task5
1 #include<stdio.h> 2 #define N 20 3 4 void is_prime(int n); 5 6 int main() 7 { 8 int j; 9 for(j=4;j<=N;j++) 10 { 11 if(j%2==0) 12 { 13 is_prime(j); 14 } 15 } 16 return 0; 17 } 18 19 void is_prime(int n) 20 { 21 int i,k,num1,num2; 22 for(num1=2;num1<n;num1++) 23 { 24 k=0; 25 for(i=2;i<num1;i++) 26 { 27 if(num1%i==0) k++; 28 } 29 30 if(k==0) 31 { 32 num2=n-num1; 33 } 34 35 k=0; 36 for(i=2;i<num2;i++) 37 { 38 if(num2%i==0) k++; 39 } 40 41 if(k==0&&num2>1&&num1<=num2) 42 { 43 printf("%d = %d + %d\n",n,num1,num2); 44 break; 45 } 46 } 47 }

7.task6
1 #include<stdio.h> 2 3 long fun(long s); 4 5 int main() 6 { 7 long s,t; 8 printf("Enter a number:"); 9 while(scanf("%ld",&s)!=EOF) 10 { 11 t=fun(s); 12 printf("new number is:%ld\n\n",t); 13 printf("Enter a number:"); 14 } 15 return 0; 16 } 17 18 long fun(long s) 19 { 20 int n,k=1;long m,p=0; 21 m=s; 22 while(m!=0) 23 { 24 n=m%10; 25 if(n%2!=0) 26 { 27 p+=k*n; 28 k*=10; 29 } 30 m/=10; 31 } 32 s=p; 33 34 return s; 35 }

浙公网安备 33010602011771号