实验三
task.1
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 printfBlankLines(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 for(i=1;i<=n;i++) 33 printf(" "); 34 35 } 36 37 void printBlankLines(int n) 38 { 39 int i; 40 for(i=1;i<=n;i++) 41 printf("\n"); 42 } 43 44 void printText(int line,int col,char text[]) 45 { 46 printBlankLines(line-1); 47 printSpaces(col-1); 48 printf("%s",text); 49 }

实验目的
以时间为随机数,控制每个“hi,May~"字段的输出,使其空格和换行数不一样,从而位置不固定,从而输出十个字段。
task.2
1 #include<stdio.h> 2 long long fac(int n); 3 4 int main() 5 { 6 int i,n; 7 printf("Enter n "); 8 scanf("%d",&n); 9 for(i=1;i<=n;i++) 10 printf("%d!=%11d\n",i,fac(i)); 11 return 0; 12 } 13 14 long long fac(int n) 15 { 16 static long long p=1; 17 18 p=p*n; 19 return p; 20 }

增加一行代码后

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

task2中局部变量的特性:每次运算完都会保留上一次的数据而且在下一次运算中继续上一次的值带入。
task3
1 #include<stdio.h> 2 long long fun(int n); 3 int main() 4 { 5 int n; 6 long long f; 7 while(scanf("%d",&n)!=EOF) 8 { 9 f=fun(n); 10 printf("n=%d,f=%lld\n",n,f); 11 } 12 13 return 0; 14 15 } 16 17 long long fun(int n) 18 { 19 int f; 20 if(n==0) 21 f=0; 22 else 23 f=(fun(n-1)+1)*2-1; 24 return f; 25 }

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

task.5
1 #include<stdio.h> 2 int is_prime(int); 3 int main() 4 { 5 int n; 6 for(n=2;n<=20;n++) 7 { 8 if(n%2==0) 9 { 10 int i; 11 for(i=1;i<=n;i++) 12 { 13 if(is_prime(i)&&is_prime(n-i)) 14 { 15 printf("%d=%d+%d\n",n,i,n-i); 16 break; 17 } 18 } 19 } 20 } 21 } 22 23 is_prime(int n) 24 { 25 int i; 26 for(i=2;i<=n;i++) 27 { 28 if(n%i==0) 29 break; 30 } 31 if(i==e444n) 32 return 1; 33 else 34 return 0; 35 }

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

实验总结
1.task4注意全局变量的使用,和在反复输入条件下,i=0的存放位置;
2.小细节的处理不能头晕,区分好"="和"=="
浙公网安备 33010602011771号