实验三

发布时间 2023-10-30 19:50:06作者: 蓝澄海

任务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); 
}
return 0;
}
void print_spaces(int n) {
int i;
for(i = 1; i <= n; ++i)
printf(" ");
}
void print_blank_lines(int n) {
int i;
for(i = 1; i <= n; ++i)
printf("\n");
}
void print_text(int line, int col, char text[]) {
print_blank_lines(line-1); 
print_spaces(col-1); 
printf("%s", text); 
}

  

 这个程序实现了在控制台窗口上随机位置打印文本 "hi, November~",并在每次打印后暂停1秒。

 

任务2

#include<stdio.h>;
long long fac(int n);
int main()
{
	int i, n;
	printf("Entre n:");
	scanf_s("%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;
}

  

 

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

  

 任务3:

#include <stdio.h>
long long func(int n) {
	static int i, m = 1, s;
	for (i = 1; i <= n; ++i)
	{
		m = m * 2;
	}
	s = m - 1;
	m = 1;
	return s;
}


int main() {
	int n;
	long long f;
	while (scanf_s("%d", &n) != EOF) {
		f = func(n); // 函数调用
		printf("n = %d, f = %lld\n", n, f);
	}
	return 0;
} 

  

 任务4:

迭代法:

#include <stdio.h>
int func(int n, int m)
{
	static int i,s=1,k=1,t=1,ans;
	for (i = 1; i <= n; ++i) {
		s = s * i;
	}
	for (i = 1; i <= m; ++i) {
		k = k * i;
	}
	for (i = 1; i <= (n - m); ++i) {
		t = t * i;
	}
	ans = s / (k * t);
	s = 1, k = 1, t = 1;
	return ans;
}
int main() {
	int n, m;
	while (scanf_s("%d %d", &n, &m) != EOF)
		printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m));
	return 0;
}

  

 递归法:

#include <stdio.h>
int func(int n, int m) {
	int sum;
	if (n < m) {
		return 0;
	}
	else if (m == 0) {
		return 1;
	}
	else if (n == 1 && m == 1) {
		sum=1;
	}
	else if (m == 1) {
		sum = n;
	}
	else {
		sum = func(n - 1, m) + func(n - 1, m - 1);
	}
	
}
int main() {
	int n, m;
	while (scanf_s("%d%d", &n, &m) != EOF)
		printf("n = %d, m = %d, ans = %d\n", n, m, func(n, m));
	return 0;
}

  

 任务5:

#include <stdio.h>
#include <math.h>

void move(char a, char b)
{
    printf("%c --> %c\n", a, b);
}

void hanoi(int n, char A, char B, char C)
{
    if (n == 1)
    {
        move(A, C);
    }
    else
    {
        hanoi(n - 1, A, C, B);    
        move(A, C);             
        hanoi(n - 1, B, A, C);   
    }
}

int main()
{
    int N;
    while (scanf_s("%d", &N) != EOF)
    {
        int tol;
        tol = pow(2, N) - 1;

        hanoi(N, 'A', 'B', 'C');
        printf("\n");
        printf("一共移动了%d次\n", tol);
        printf("\n");
    }

    return 0;


}

  

 任务6

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

int main() {
    long s, t;
     printf("Enter a number: ");
    while (scanf_s("%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 i = 1;
    int ans = 0;

    while (s > 0) {
        if ((s % 10) % 2 != 0) {
            ans = ans + (s % 10) * i;
            i *= 10;
            s /= 10;
        }
        else
            s /= 10;
    }

    return ans;
}