第三次实验

任务1

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

void print_text(int line,int col,char text []);//函数声明
void print_spaces(int n);//函数声明
void print_blank_lines(int n);//函数声明

int main()
{
	int line,col,i;
	char text[N] = "hi,November~" ;
	srand(time(0));//以当前系统时间作为随机种子

	for(i=1;i<=10;++i)
	{
		line = rand()%25;
		col = rand()%80;
		print_text(line,col,text);
		Sleep(1000);//暂停1000ms 
	} 
	return 0;
} 

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

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

//在第line行第col列打印一段文本
void print_text(int line,int col,char text[]){
	print_blank_lines(line-1);//打印line-1行空格 
	print_spaces(col-1);//打印col-1列空格 
	printf("%s",text);//在第line行、col列输出text中字符串 
}

作用:在频幕上随机打印hi,November~

 

任务2

//利用局部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

//练习:局部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特性:使用static时,调用完函数后,函数用用static修饰的变量内存不会释放,即变量的值一值存储,不会消失,下一次可以直接再变量已有的值的基础上进行运算

任务3

#include<stdio.h>
long long func(int n);//函数声明 
int main()
{	
	int n;
	long long f;
	while(scanf("%d",&n)!=EOF)
	{
		f = func(n);//函数的调用 
		printf("n=%d,f = %lld\n",n,f-1); 
	}
	return 0;
} 

long long func(int n)
{
	long long m;
	if(n==0)
		m=1;
	else 
		m = 2*func(n-1);
	return m;
}

  

任务4.1

#include<stdio.h>
int func(int n,int m);

int main()
{
	int n,m;
	while(scanf("%d%d",&n,&m)!=EOF)
	{
		printf("n = %d,m = %d,ans = %d\n",n,m,func(n,m));
	}
	
		return 0;
}

//迭代 
int func(int n,int m)
{
int a=1,b=1,c=1;
		int k;
	int i;
	for(i=1;i<=n;i++)
		a*=i;
		
	for(i=1;i<=m;i++)
		b*=i;
		
	for(i=1;i<=n-m;i++)
		c*=i;

	int sum;
	
	sum = a/(b*c);
	
	return sum;			
}

  

任务4.2

#include<stdio.h>
int func(int n,int m);

int main()
{
	int n,m;
	
	while(scanf("%d%d",&n,&m)!=EOF)
		printf("n = %d,m = %d,ans = %d\n",n,m,func(n,m));
		
		return 0;
}
//递归
int func(int n,int m) 
{	
	if(n<m)
	return 0;

	else if(n==m||m==0)
	return 1;
	
	else
		return func(n-1,m) + func(n-1,m-1);
		
}

  

任务5

#include<stdio.h>
void hanoi(unsigned int n,char from,char temp,char to); 
void moveplate(unsigned int n,char from,char to); 
int a;
int main()
{
	unsigned int n;
	while(scanf("%u",&n)!=EOF)
	{
		a=0;
		hanoi(n,'A','B','C');
		printf("一共移动了%d次\n",a);
	}

	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);
	a+=1;
}

  

任务6

#include <stdio.h>
#include <math.h>
long func(long s); // 函数声明
int main()
{
	long s, t;
	printf("Enter a number: ");
	while (scanf("%ld", &s) != EOF)
	{
		t = func(s); // 函数调用
		printf("new number is: %ld\n\n", t);
		printf("Enter a number: ");
	}
	return 0;
}

long func(long s)
{
	int m=0;
	int k;
	k = s;
	while(k!=0)
	{
		if((k%10)%2==1)
		{
			m = m*10+k%10;
			k/=10;
		}
		else
		{
			k/=10;
		} 	
	}
	
	int n;
	while(m!=0)
	{
		n = n*10+m%10;
		m/=10;
	}
	return n;
		
}

  

任务7

#include<stdio.h>
int main(){

    int n;
    int x;
    int y;
    int arr1[10];
    int arr2[6];
    int i,j,k;
    int t;

    for(n=45;n<100;++n){
        x=n*n;
        y=n*n*n;
        for(i=0;i<4;++i)
		{
            arr1[i]=x%10;
            x/=10;
        } 
        for(j=0;j<6;++j)
		{
            arr2[j]=y%10;
            y/=10;
        }

       
        for(i=4;i<10;++i)
            arr1[i]=arr2[i-4];

       
        for(j=0;j<9;++j)
		{
            for(i=0;i<9-j;++i)
			{
                if(arr1[i]>arr1[i+1])
				{
                    t=arr1[i];
                    arr1[i]=arr1[i+1];
                    arr1[i+1]=t;
                }
            }
        }

        k=0;
        for(i=0;i<10;i++){
            if(arr1[i]!=i) break;
            k++;
        }

        if(k==10)
            printf("%d\n",n);

    }

    return 0;
}

  

 

posted @ 2023-11-04 17:20  胡彦超  阅读(24)  评论(0)    收藏  举报