第三次实验
1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <time.h> 4 #include <windows.h> 5 #define N 80 6 void printText(int line, int col, char text[]); // 函数声明 7 void printSpaces(int n); // 函数声明 8 void printBlankLines(int n); // 函数声明 9 int main() 10 { 11 int line, col, i; 12 char text[N] = "hi, May~"; 13 srand(time(0)); // 以当前系统时间作为随机种子 14 for(i=1; i<=10; ++i) 15 { 16 line = rand()%25; 17 col = rand()%80; 18 printText(line, col, text); 19 Sleep(1000); // 暂停1000ms 20 } 21 22 return 0; 23 } 24 25 // 打印n个空格 26 void printSpaces(int n) 27 { 28 int i; 29 for(i=1; i<=n; ++i) 30 printf(" "); 31 } 32 33 // 打印n行空白行 34 void printBlankLines(int n) 35 { 36 int i; 37 for(i=1; i<=n; ++i) 38 printf("\n"); 39 } 40 41 // 在第line行第col列打印一段文本 42 void printText(int line, int col, char text[]) 43 { 44 printBlankLines(line-1); 45 printSpaces(col-1); // 打印n-1列空格 46 printf("%s", text); 47 }

功能:在随机位置间隔时间打印十个“hi,May~”字符
1 // 利用局部static变量的特性,计算阶乘 2 #include <stdio.h> 3 long long fac(int n); // 函数声明 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! = %lld\n", i, fac(i)); 11 return 0; 12 } 13 14 // 函数定义 15 long long fac(int n) 16 { 17 static long long p = 1; 18 printf("p = %lld\n",p); 19 p = p * n; 20 return p; 21 }

1 // 练习:局部static变量特性 2 #include <stdio.h> 3 int func(int, int); // 函数声明 4 int main() 5 { 6 int k = 4, m = 1, p1, p2; 7 p1 = func(k, m); // 函数调用 8 p2 = func(k, m); // 函数调用 9 printf("%d,%d\n", p1, p2); 10 return 0; 11 } 12 13 // 函数定义 14 int func(int a, int b) 15 { 16 static int m = 0, i = 2; 17 i += m + 1; 18 m = i + a + b; 19 return m; 20 }

局部static变量的特性:静态局部变量在程序执行到该对象的声明处时被首次初始化,以后的函数调用不再进行初始化
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 long long fun(int n) 17 { 18 long long f; 19 if(n==0) 20 f = 0; 21 else 22 f = (2*fun(n-1))+1; 23 return f; 24 25 }

1 #include <stdio.h> 2 #include <math.h> 3 void hanoi(int n,char a,char b,char c); 4 int main() 5 { 6 int num=0,t; 7 while(scanf("%d",&num)!=EOF) 8 { 9 hanoi(num,'A','B','C'); 10 t = pow(2,num)-1; 11 printf("\n一共移动了%d次\n\n",t); 12 } 13 14 return 0; 15 } 16 17 void hanoi(int n,char a,char b,char c) //定义函数 18 { 19 if(n==1) //如果只有一个,那么只需要从a杆移至c杆; 20 { 21 printf("第1个盘子:%c-->%c\n",a,c); 22 } 23 else //如果有多个 24 { 25 hanoi(n-1,a,c,b); 26 printf("第%d个盘子: %c-->%c\n",n,a,c); 27 hanoi(n-1,b,a,c) ; 28 } 29 30 }

1 #include <stdio.h> 2 #include <math.h> 3 #define N 20 4 int is_prime(int n); 5 int main() 6 { 7 for (int n = 4; n <= N; n+=2) 8 for (int a = 2; a <= n/2 ; a++) 9 if (is_prime(a) && is_prime(n - a)) 10 printf("%d=%d+%d\n", n, a, n - a); 11 } 12 int is_prime(int n) 13 { 14 if (n == 1) 15 return 0; 16 for (int i = 2; i <= sqrt(n); i ++) 17 if (n % i == 0) 18 return 0; 19 return 1; 20 }

1 #include <stdio.h> 2 #include <math.h> 3 long fun(long s); 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 number: "); 13 } 14 15 return 0; 16 } 17 18 long fun(long s) 19 { 20 int sum=0,i,j; 21 22 for(j=0;s!=0;s=s/10) 23 { 24 i = s%10; 25 26 if(i==1||i==3||i==5||i==7||i==9) 27 { 28 sum = i*pow(10,j) + sum; 29 j = j+1; 30 } 31 } 32 return sum; 33 }


浙公网安备 33010602011771号