第六章.模块化程序设计

第六章.模块化程序设计

1.计算面积:输入r1、r2,求出圆形垫片的面积。

float p = 3.14;

float js(float r1, float r2) {
	float A = p * r1 * r1, a = p * r2 * r2;
	return A - a;
}

int main() {
	float r1 = 0, r2 = 0;
	printf("输入外半径r1,内半径r2:\n");
	scanf("%f %f", &r1, &r2);
	printf("其面积为:%.2f", js(r1, r2));
	return 0;
}

在这里插入图片描述

2.找到10000以内的所有完数,其中判断完数的功能用函数实现。

一个数恰好等于它的真因子之和,则称该数为“完全数”。
第一个完全数是6,第二个完全数是28,第三个完全数是496,后面的完全数还有8128、33550336等等。

//计算真因子
int A(int i) {
	int count = 0;
	for (int j = 1; j < i; j++) {
		if (i % j == 0)
			count += j;
	}
	return count;
}
//判断
void B(int i,int m) {
	if (i == m)
		printf("%d ", i);
}

int main() {
	int count = 0, m = 0;
	printf("完数有:");
	for (int i = 3; i <= 10000; i++) {
		m = A(i);
		B(i,m);
	}
	return 0;
}

在这里插入图片描述

3.输入两个正整数m和n,求其最大公约数和最小公倍数。

//最大公约数
void A(int n,int m) {
	int count = 1;
	for (int i = 1; i <= sqrt(m * n); i++) {
		if (n % i == 0 && m % i == 0) {
			count = i;
		}
	}
	printf("%d", count);
}

//最小公倍数
void B(int n,int m) {
	int count = 1;
	for (int i = sqrt(m * n);; i++) {
		if (i % n == 0 && i % m == 0) {
			count = i;
			break;
		}
	}
	printf("%d", count);
}

int main() {
	int m = 0, n = 0;
	printf("输入两个正整数:");
	scanf("%d %d", &m, &n);
	printf("其最大公约数:");
	A(n,m);
	printf("其最小公倍数:");
	B(n,m);
	return 0;
}

在这里插入图片描述

4.一个5位数,判断它是不是回文数。例如,12321是回文数。

//判断回文数
int A() {
	int n = 0;
	scanf("%d", &n);
	if ((n / 10000 == n % 10))
		if((n % 10000) / 1000 == (n % 100) / 10)
			return 1;
	else
		return -1;
}

int main() {
	int count = 0;
	
	printf("输入一个五位数:");
	count = A();

	if (count == 1)
		printf("是回文数");
	else
		printf("不是回文数");

	return 0;
}

在这里插入图片描述

5.从键盘输入任意一个正整数,输出该数的逆序数。

int A(int n) {
	//递归
	while (n >= 10) {
		A(n % 10);
		n = n / 10;
	}
	printf("%d", n);
	return 0;

	//循环
	//int b=0, c=0;
	//while (a) {
	//	b = a % 10;
	//	a = a / 10;
	//	c = c * 10 + b;
	//}
	//printf("逆序后的数: %d", c);
	//return 0;
}

int main() {
	int n = 0;
	printf("输入一个正整数:");
	scanf("%d", &n);
	A(n);
	return 0;
}

在这里插入图片描述

6.分析下面程序的运行结果。

(1)

void varfunc() {
	int var = 0;
	static int static_var = 0;
	printf("\40:var equal %d\n", var);//每次调用会被重新置为0,输出恒为0
	printf("\40:static var equal %d\n", static_var);
	//static只在第一次赋值,往后其他赋值失效,即只赋值一次
	//用static定义,每次调用不会重新赋值,且每次函数调用完仍然存在,第n次调用输出n-1.
	printf("\n");
	var++;
	static_var++;
}
int main() {
	int i;
	for (i = 0; i < 3; i++) {
		varfunc();
	}
	return 0;
}

在这里插入图片描述

(2)

int main() {
	int i, num;
	num = 2;
	for (i = 0; i < 3; i++) {
		printf("\40:the num equal %d\n", num);
		num++;
		{
			//允许在不同的作用域使用相同的变量名
			//内层作用域的变量在使用是会屏蔽外层作用域的同名变量
			//static类型
			static int num = 1;
			printf("\40:the internal block num equal %d\n", num);
			num++;
		}
	}
	return 0;
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值