实验三

task1

#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); // 暂停1000ms     }     return 0; } // 打印n个空格 void printSpaces(int n) {     int i;     for (i = 1; i <= n; ++i)         printf( ); } // 打印n行空白行 void printBlankLines(int n) {     int i;     for (i = 1; i <= n; ++i)         printf(\n); } // 在第line行第col列打印一段文本 void printText(int line, int col, char text[]) {     printBlankLines(line - 1); // 打印n-1行空行     printSpaces(col - 1); // 打印n-1列空格     printf(%s, text); }

功能:实现在第line行第col列输出hi,May~,一共输出十次。

task2-1

#define _CRT_SECURE_NO_WARNINGS #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(%di!=%lld\n, i, fac(i));      return 0; }  long long fac(int n) {     static long long p = 1;      p = p * n;     return p; }

task2-2

#define _CRT_SECURE_NO_WARNINGS #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; }

运行结果与我预期的相同。

局部static的特性:在一次程序运行中,变量的值随着每次计算发生改变,不变回初始值。

task3

#define _CRT_SECURE_NO_WARNINGS #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 result;     if (n == 0)         result = 0;     else if (n >= 1 || n <= 32)         result = 2 * fun(n - 1) + 1;       return result;  }

task 4

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> void hanoi(unsigned int n, char from, char temp, char to); void moveplate(unsigned int n, char from, char to);  int cs; int main() {          unsigned int n;      while (scanf(%u, &n) != EOF)     {         getchar();         hanoi(n, 'A', 'B', 'C');         printf(次数时:%d, cs); cs = 0;         printf(\n\n);     }     return 0; }  void hanoi(unsigned int n, char from, char temp, char to) {     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); cs++; }

task5

#define _CRT_SECURE_NO_WARNINGS #include<stdio.h> int is_prime(int n);  int is_prime(int n) {     int i;     if (n == 1)         return 0;     if (n > 1)     {         for (i = 2; i < n; i++)             if (n % i == 0)                 return 0;          if (i = n - 1)             return 1;     } }  int main() {     int n,i;     for (n = 4; n <= 20; n++)     {         if (n % 2 == 0)         {             for (i = 2; i < n - 1; i++)                 if (is_prime(i) && is_prime(n - i))                 {                     printf(%d=%d+%d\n, n, i, n - i); break;                 }         }     }     return 0; }

task6

 

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> #define N 80 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) {     int t = 0,h=0,m;     long ys;     while (s > 0)     {         ys = s % 10;         if (ys % 2 != 0)             t = t * 10 + ys;         s = s / 10;     }     while (t > 0)     {         m = t % 10;         h = h * 10+m;         t = t / 10;       }     return h; }

收获:1.static的用法

2.全局变量的使用

3.task6,使用数组反而更麻烦。