实验3

//task1//
#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); }

 

 功能:在0~24行,0~79中随机打印10个hi, May~,并且重复此操作10次。

task2

// 练习:局部static变量特性  #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

#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)  {     int j=0;     long long sum=1;     for(j=0; j<n; j++)     {         sum=sum*2;     }     sum=sum-1;          return sum;  }

 

 task4

#include <stdio.h> void hanoi(unsigned n, char from, char temp, char to);  // 函数声明  void moveplate(unsigned n, char from ,char to);  // 函数声明  int sum(int n);  int main()  {     unsigned n;  // 盘子数目     while (scanf(%u, &n) != EOF)     {         hanoi(n, 'A', 'B', 'C');         printf(一共移动盘子的次数:%ld\n,sum(n));     }                0; }  // 函数定义 // 功能描述:把n个盘子,从from →to, 借助temp void hanoi(unsigned 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);      } }  // 函数定义 // 功能描述:把第n个盘子,从from →to void moveplate(unsigned n, char from, char to) {     printf(第%u个盘子: %c --> %c\n, n, from, to); }  // 函数定义 // 功能描述:记录移动次数  int sum(int n) {     int m;     if(n==1)       m=1;     else       m=2*sum(n-1)+1;     return m;      }

 

 task5

#include<stdio.h> #include<stdlib.h> #include<math.h> #define N 20 int is_prime(int x);  int main() {     int i, j, m, n;     int fm, fn, fi;     for(i=4; i<=N; i+=2)     {         for(m=2; m<=i; m++)         {             n=i-m;             fm=is_prime(m);             fn=is_prime(n);             if(fm==1&&fn==1)               {                   printf(%d =%d + %d\n, i, m, n);                   break;               }         }     } }  int is_prime(int a) {     int b, k, Flag=1;     k=sqrt(a);     if(a==2)        return Flag=1;     else        for(b=2;b<=k;b++)       {         if((a%b)==0)            {Flag=0;           break;}                }      return Flag;  }

 

 

 task6

 

#include <stdio.h>  #include<math.h> 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 i, j=0, k=0;     do     {         i=s%10;         s=s/10;         if(i%2!=0)           {              k+=i*pow(10,j);              j++;           }             }     while(s>0);          return k; }