实验3

 

实验任务1

 

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

void printfText(int line,int col,char text[]);//函数声明
void printfSpaces(int n);//函数声明
void printfBlankLines(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;
        printfText(line,col,text);
        Sleep(1000);//暂停1000ms
        
    }
    
    return 0;
}

//打印n个空格
void printfSpaces(int n)
{
    int i;
    
    for(i=1;i<=n;++i)
    printf(" ");
}

//打印n行空白行
void printfBlankLines(int n)
{
    int i;
    
    for(i=1;i<=n;++i)
    printf("\n");
}

//在第line行第col列打印一段文本
void printfText(int line,int col,char text[])
{
    printfBlankLines(line-1);//打印n-1行空行
    printfSpaces(col-1);//打印n-1列空行
    printf("%s",text);
}

 

 

运行结果

 

程序的功能:以系统时间为种子,在屏幕上随机输出字符串“hi,May~”

                     行数0~24,列数0~79随机选取

 

实验任务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 != %11d\n",i,fac(i));
      
     return 0;
 }
 
//函数定义
long long fac(int n)
{
    static long long p=1;
    //printf("p = %11d\n",p);
    p = p * n;
    
    return p;
}

 

 

运行结果

 

//利用局部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 != %11d\n",i,fac(i));
      
     return 0;
 }
 
//函数定义
long long fac(int n)
{
    static long long p=1;
    printf("p = %11d\n",p);
    p = p * n;
    
    return p;
}

 

运行结果

 

 

 

(2)

//练习:局部static变量特性

#include<stdio.h>
int func(int, int);  //函数声明

int main()
{
    int k=4, m=1, p1, p2;
    
    p1=func(k, m);   //函数调用
    p1=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)
{
    long long i;
    if(n==0)
    i=0;
    
    else
    i=2*fun(n-1)+1;
    
    return i;
}

 

 

运行结果

 

 

 

实验任务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,i;
    while(scanf("%u",&n) != EOF)
    {
    hanoi(n,'A','B','C');
    i=pow(2,n)-1;
    printf("\n一共移动了:%d次\n",i);
    }
    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


#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int is_prime(int n);
int main()
{
    int n,p,q,flagp,flagq;              
    for(n=4;n<=20;n+=2)
    {
        p = 1;
        do
        {
            p++;
            q=n-p;
            flagp=is_prime(p);
            flagq=is_prime(q);
        } 
        while(flagq*flagp == 0);
        printf("%d =%d + %d\n", n, p, q);
    }
    return 0;
}
int is_prime(int n)
{
    int k;
    for(k=2;k<=sqrt(n);k++)
        if(n%k==0)
        {
            return 0;
        }
        return 1;
            
}

 

 

运行结果

 

 

 

实验任务6

#include<stdio.h>
long fun(long s);

int main()
{
    
    long s,t;
    
    printf("Enter a number:");
    while(scanf("%d",&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;
    b=0;
    c=1;
    while(s!=0)
    {
        a=s%10;
        if(a%2==0)
        {
            b=b;
        }
        if(a%2==1)
        {
            b=b+a*c;
            c=c*10;
        }
        
        s=s/10;
        
    }
    return b;
}

 

 

运行结果

 

 

实验总结:对循环的运用还不熟悉,对static 变量和函数定义还需继续学习与练习。

 

posted @ 2022-04-21 15:19  这很不二  阅读(19)  评论(2编辑  收藏  举报