第三次实验

实验任务1、

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<windows.h>
#define N 80

void printText(int line,int co1,char text[]);  //函数声明
void printspaces(int n);  //函数声明
void printBlinkLines(int n);  //函数声明

int main()
{
    int line,co1,i;
    char text[N] = "hi,May~";
    srand(time(0));  //以当前系统时间作为随机种子
    
    for(i=1;i<=10;++i)
    {
        line=rand()%25;
        co1=rand()%80;
        printText(line,co1,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行第co1列打印一段文本
 void printText(int line,int co1,char text[])
 {
     printBlankLines(line-1);  //打印n-1行空行
    printSpaces(co1-1);  //打印n-1列空格
    printf("%s",text); 
  } 

 

 

 

程序实现的功能:在随机行随机列出现10个“hi May~"

 

实验任务2(1)

// 利用局部static变量的特性,计算阶乘

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

实验任务2(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

#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)
{
    if(n==1)
    return 1;
    else
    return fun(n-1)*2+1;
    
}

实验任务4

#include <stdio.h>
int h(int m);
void hanoi(unsigned n, char from, char temp, char to);  // 函数声明 
void moveplate(unsigned n, char from ,char to);  // 函数声明 

int main() 
{
    unsigned n;  // 盘子数目
    int s;
    while(scanf("%u", &n) != EOF)
     {
       hanoi(n, 'A', 'B', 'C');
      printf("一共移动盘子的次数:%ld",h(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 h(int m)
{
    int s;
    if(m==1)
        s=1;
    else
        s=2*h(m-1)+1;
    return s;
}

实验任务5

#include<stdio.h>
#include<stdlib.h>
int is_Prime(int n);
int main()
{ int n,p,q,pflag=0,qflag=0;
  for(n=4;n<=20;n+=2)
  {
      for(p=2;p<=n;p++)
      {q=n-p;
       pflag=is_Prime(p);
       qflag=is_Prime(q);
 
    if(pflag==1&&qflag==1)
    {
        printf("%d=%d+%d\n",n,p,q);
        break;
    }

    }
  }
system("pause");
}
int is_Prime(int n)
{    int i;
    for(i=2;i<n-1;i++)
    {    if(n%i==0)
        break;
    }

    if(i>=n-1)
        return 1;
    else
        return 0;

}

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

 

posted @ 2022-04-24 11:18  易千瓦  阅读(41)  评论(0)    收藏  举报