实验三

实验任务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, April~";
    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);
}

实验结论

回答问题

1:每隔一秒在输出窗口的随机位置生成一个“hi, April~”,共生成十个

实验任务2

task2.1实验代码

#include <stdio.h>
long long fac(int n);

int main()
{
	int i,n;
	printf("Enyer 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;
}

task2.1实验结论

task2.2实验代码

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 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);
	}
	
	return 0;
}
long long func(int n)
{	
	if(n==1)
	return 1;
	if(n==2)
	return 3;
	
	return 2*func(n-1)+1;
}

实验结论

回答问题

实验任务4

实验代码

#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 == 0 || n == m || m == 0)
		return 1;
	else if (n < m)
		return 0;
	else
		return func(n - 1, m) + func(n - 1, m - 1);
	
}

实验结论

实验任务5

task5.1实验代码

#include <stdio.h>
double mypow(int x, int y);

int main() {
	int x, y;
	double ans;

	while(scanf("%d%d", &x, &y) != EOF) {
		ans = mypow(x, y);
		printf("%d的%d次方: %g\n\n", x, y, ans);
	}
	return 0;
}
double mypow(int x, int y) {
    double result = 1.0;
    int i;
    if(y >= 0) {
        for(i = 0; i < y; i++) {
            result *= (double)x;
        }
    } 
	else {
        for(i = 0; i < -y; i++) {
            result /= (double)x;
        }
    }
    return result;
}

实验结论

task5.2实验代码

#include <stdio.h>
double mypow(int x, int y);

int main() {
	int x, y;
	double ans;

	while(scanf("%d%d", &x, &y) != EOF) {
		ans = mypow(x, y);
		printf("%d的%d次方: %g\n\n", x, y, ans);
	}
	return 0;
}

double mypow(int x, int y){
	if(y>=0){
		if(y==0)
			return 1;
		return mypow(x,y-1) * x;
	}	
	if(y<0){
		double z = 1.0/x;
		return mypow(x,y+1) * z;
		
	}
}

实验结论

实验任务6

实验代码

#include <stdio.h>
#include <stdlib.h>

void hanoi(unsigned int n, char from, char temp, char to);
void moveplate(unsigned int n, char from, char to);
int total=0; 
int main() {
	unsigned int n;
	
	while (scanf("%u", &n) != EOF){
	
	hanoi(n, 'A', 'B', 'C');
	printf("一共移动了%d次",total);
	total = 0;
	}
	system("pause");
	
	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);
	total++;
}

实验结论

实验任务7

实验代码

#include <stdio.h>
int is_prime(int n);

int main() {
    int num = 4; 
    while (num <= 20) {
        printf("%d = ", num);
        int num1 = 2; 
        int num2 = num - num1; 
        while (num1 <= num2) {
            if (is_prime(num1) && is_prime(num2)) {
                printf("%d + %d", num1, num2);
                break;
            }
            num1++;
            num2--;
        }
        num += 2;
        printf("\n");
    }
    return 0;
}

int is_prime(int n) {
    if (n <= 1) {
        return 0;
    }
    for (int i = 2; i * i <= n; i++) {
        if (n % i == 0) {
            return 0;
        }
    }
    return 1;
}

实验结论

实验任务8

实验代码

#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) {
    long newone= 0;
    long weishu = 1;
    while (s > 0) {
        int oldone = s % 10;  
        if (oldone % 2 != 0) {
            newone += oldone * weishu;  
            weishu *= 10; 
        }
        s /= 10; 
    }
    return newone;
}

实验结论