【c++ | 谭浩翔】第三章练习

本文解析了C++编程中的经典练习题目,包括求最大公约数和最小公倍数、统计字符类型数量、构造特定数字序列等。通过这些实例,读者可以加深对C++基本语法及算法的理解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

【c++ | 谭浩翔】第三章练习

【P81 第15题】
在这里插入图片描述

//【P81 第15题】

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	int m , n , o , p , temp; 

	//展示模块
	cout << "求最大公约数和最小公倍数" << '\n' << "请输入两个正整数m和n:";
	cin >> m >> n;

	//算法模块

	o = m;														//输入赋新值计算,以免之后输出混乱
	p = n;

	for (temp = 1; temp != 0;)									//求最大公约数(辗转相除法)
	{
		
		temp = o % p;

		if (temp != 0)
		{
			o = p;
			p = temp;
		}
		else
			break;

	}

	o = m * n / p;												//求最小公倍数(最小公倍数=两整数的乘积÷最大公约数)

	//结果模块
	cout << "它们的最大公约数为:" << p << endl;
	cout << "它们的最小公倍数为:" << o << endl;

	return 0;
}

【P81 第16题】
在这里插入图片描述

//【P81 第16题】 

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	int a = 0, b = 0, c = 0, d = 0;
	char x;

	//展示模块
	cout << "请输入一行字符:" << endl;

	//算法模块
	while ((x = getchar()) != '\n') //遍历算法
	{
		if (x >= 'a' && x <= 'z' || x >= 'A' && x <= 'Z')
			a++;
		else
			if (x == ' ')
				b++;
			else
				if (x >= '0' && x <= '9')
					c++;
				else
					d++;
	}

	//结果模块
	cout << "统计结果如下:" << '\n' << "英文字母字符的个数为:" << a << '\n' << "空格字符的个数为:" << b << '\n' << "数字字符的个数为:" << c << '\n' << "其他字符的个数为:" << d << endl;

	return 0;
}

【P81 第17题】
在这里插入图片描述

//【P81 第17题】 

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	long a = 0 , b = 0 ,c = 0 , n = 0 , i;

	//展示模块
	cout << "请输入a与n:" << endl;
	cin >> a >> n;

	//算法模块
	b = a;										//这里转新赋值作为之后结果c的个位数
	for (i = 1 ; i < n ; i++)   				//当n不为0时,进行累加的循环运算
	{
		
		if (n > 0)
		{ 
			a = a * 10;
			a = a + b;
		}
		c = c + a;
	}

	if (n == 0) 
		c = 0;									//当n为0时,c为0
	else 
		c = c + b;								//当n不为0时,c为累加后的数加上转新赋值的数b

	//结果模块
	cout << c << endl;

	return 0;
}

【P81 第18题】
在这里插入图片描述

//【P81 第18题】 

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	long long m = 1;              			  //这里定义m为超长整型以能真实表达结果
	int n = 1 , i;							  //这里定义i和n为整型以减少程序运行时所占用的内存

	//算法模块
	for (i = 1; i <= 20; i++,n++) 			  //通过20次for循环来计算20的阶乘
	{
		m = n * m;
	}

	//结果模块
	cout << m << endl;

	return 0;
}

【P81 第19题】
在这里插入图片描述

//【P81 第19题】 

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	int x , y , z , i;

	//展示&算法模块
	cout << "这是所有的水仙花素:" << endl;

	for (i = 100; i <= 999; i++)						 //“求水仙花数”算法在三位数中循环运行
	{
		x = i / 100;									//取三位数的百位数
		y = i / 10 - i / 100 * 10;						//取三位数的十位数
		z = i % (x * 10 + y);							//取三位数的个位数

		if(i == x * x * x  +  y * y * y  +  z * z * z)	//如果是水仙花素则输出
			cout << i << '\t';
	}

	return 0;
}

【P81 第20题】
在这里插入图片描述

//【P81 第20题】 

#include <iostream>
using namespace std;

int main()
{
	//定义模块
	int x , y , i;

	//算法&结果模块
	for (x = 1; x < 1000; x++)					//在1000以内循环寻找完数
	{
		y = 0;									//这里需要局部变量初始化

		for (i = 1; i < x; i++)					//计该数的因子数
		{ 
			if ((x % i) == 0)
				y += i;
		}

		if (y == x)								//判断完数
		{
			cout << x << ",its factors are ";

			for (i = 1; i < x; i++)				//输出该数所有因子
			{ 
				if (x % i == 0)  
					cout << i << " ";
			}

			cout << endl;
		}
	}

	return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Uyoin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值