一、实验结论

task1

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

void printText(int line, int col, char text[]);
void printSpaces(int n);
void printBlankLines(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;
		printText(line, col, text);
		Sleep(1000);
	}

	return 0;
}

void printSpaces(int n)
{
	int i;

	for (i = 1; i <= n; ++i)
		printf(" ");
}

void printBlankLines(int n)
{
	int i;

	for (i = 1; i <= n; ++i)
		printf("\n");
}

void printText(int line, int col, char text[])
{
	printBlankLines(line - 1);
	printSpaces(col - 1);
	printf("%s", text);
}

程序实现的功能:

在屏幕上打印出十个随机位置的"hi, May~"

task2

task2-1

#include <stdio.h>

long long fac(int n);

int main()
{
	int i, n;

	printf("Enter n: ");
	scanf_s("%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;
}

增加printf("p = %lld\n", p)后打印出p值的运行截图
image

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

image

局部static变量的特性:

在函数调用后其值依然保留,并可影响下次调用过程(即具有继承性)

task3

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

int main()
{
	int n;
	long long f;

	while (scanf_s("%d", &n) != EOF)
	{
		f = fun(n);
		printf("n=%d,f=%lld\n", n, f);
	}

	return 0;
}

long long fun(int n)
{
	if (n == 0)
		return 0;

	else if (n == 1)
		return 1;

	else
		return 2*fun(n - 1)+1;
}

image

task4

#include<stdio.h>
int i=0;
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;
	while (scanf_s("%u", &n) != EOF)
	{
		hanoi(n, 'A', 'B', 'C');
		printf("\n一共移动了%d次\n\n", i);
		i = 0;
	}

	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);
	i++;
}

image

task5

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

#define N 20

int is_prime(int x);

int main()
{
	for (int n=4; n <= N; n+=2)
	{
		for (int i = 2; i <= n / 2; i++)
		{
			if (is_prime(i) && is_prime(n - i))
			{
				printf("%d = %d + %d\n", n, i, n - i);
				break;
			}
		}
	}

	return 0;
}

int is_prime(int x)
{
	int is_prime = 1;

	if (x == 1 || x % 2 == 0 && x != 2)
		is_prime = 0;
	else
	{
		for (int i = 3; i <= sqrt(x); i += 2)
		{
			if (x % i == 0)
			{
				is_prime = 0;
				break;
			}
		}
	}

	return is_prime;
}

image

task6

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

int main()
{
	long s, t;

	printf("Enter a number:");

	while (scanf_s("%ld", &s) != EOF)
	{
		t = fun(s);
		printf("new number is:%ld\n\n", t);
		printf("Enter a number:");
	}

	return 0;
}

long fun(long s)
{
	long n= 1;
	int t=0, d;

	while (s > 0)
	{
		d = s % 10;

		if (d % 2 != 0)
		{
			t = d * n + t;
			n*= 10;
		}
		s /= 10;
	}

	return t;
}

image

二、实验总结

1.本次作业中为了探究算法的底层逻辑,通过定义函数的方式,而非使用库函数来完成任务;
2.加深了对局部变量和全局变量的理解,所处位置不同,变量所起到的作用也将改变;
3.对于同一问题,存在多种解决方法,我目前能够给出的解,并非最优,所以需要长久、深度地学习。

编者注:获得了加粗字体的技能点,个人认为这样会更方便阅读,请在评论区给出你的建议。

Posted on 2022-04-21 12:17  llllllimit  阅读(21)  评论(3编辑  收藏  举报