第三次实验

1. 实验任务1
#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); 
    }
    return 0;
}


 void printSpaces(int n)
{
int i; 
for(i=1; i<=n; ++i)
printf(" ");
}
    
    
void printBlankLines(int n)
 { int i; 
 for(i=1; i<=n; ++i) 
 printf("\n");
}
   void printText(int line, int col, char text[]) 
{ 
   printBlankLines(line-1);
   printSpaces(col-1); 
    printf("%s", text);
 }

该程序的作用是在0~24行,0~79列的范围中随机输出10个“hi May~”

2. 实验任务2
task2_1.
#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("%d! = %lld\n", i, fac(i));
   return 0;
   }
   
   
long long fac(int n) 
{
    static long long p = 1;
    p = p * n;
    return p;
}

插入一行源代码后

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

task2_2.
#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变量是在编译时赋初值,只赋值一次,在程序运行时已经具有值,以后每次调用函数时不在赋值,保留上次函数调用时的值。
3. 实验任务3
#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
    result=2*fun(n-1)+1;
    return result;
}

4. 实验任务4
#include<stdio.h> 
#include<math.h>
void hanoi( unsigned int n, char from, char temp, char to) ; 
void moveplate( unsigned int n, char from, char to) ; 
int main()
{
unsigned int n,sum;
while (scanf( "%u", & n) != EOF) 
{
 sum=pow(2,n)-1;
 hanoi(n, 'A', 'B', 'C');
 printf("\n一共移动了%d次\n\n",sum);
}
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);
}

5. 实验任务5
#include <stdio.h>
#include <math.h>
int prime(int n);
int main()
{
    int i,j;
    for(i=4;i<=20;i+=2)
{
    for(int j=2; j<=i/2; j++)    
    {
        if(prime(j) && prime(i-j))
    {
        printf("%d = %d + %d\n",i,j,i-j);
        break;
    }
        
    }
}
    return 0;
}
int prime(int n)    
{
    if(n==2)
        return 1;
        
    for(int i=2; i<=sqrt(n); i++)    
    {
         if(n%i==0)
             return 0;
    }
    return 1;
}

6. 实验任务6
#include <stdio.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 a,b=0;
    while(s!=0)
    {
      a=s%10;
      if(a%2!=0)
      {
          b=10*b;
          b=b+a;
      }
          s=s/10;
      }
       while (b!=0)
      {
        s=10*s;
        s=s+b%10;
        b=b/10;
      }
    return s;
    }

 

posted @ 2022-04-19 21:32  允楠  阅读(18)  评论(2)    收藏  举报