《C语言学习:编程例题》8

写在前面:本笔记为个人学习各平台C语言系列课程所作,仅供交流学习,不得作他用。

1. 求最大公约数

(1)枚举法:确定较大数与较小数,然后用循环一个个试即可。

cpp 复制代码
int num1 = 0;
int num2 = 0;
int num = 0;
printf("请输入你的正整数:");
scanf("%d %d",&num1,&num2);
for (int i = 1;i<=num1;i++) {
	if (num1 % i == 0) {
		if (num2 % i == 0) {
			num = i;
		}
	}
}
printf("输出最大公约数为:%d", num);

(2)辗转相除法:

cpp 复制代码
int num1 = 0;
int num2 = 0;
int num = 0;
printf("请输入你的正整数:");
scanf("%d %d",&num1,&num2);
while (num2 > 0) {
	num = num1 % num2;
	num1 = num2;
	num2 = num;
}
printf("输出最大公约数为:%d", num1);

2. 求给定条件的整数集

cpp 复制代码
int num1 = 0;
printf("请输入你的正整数:");
scanf("%d",&num1);
for (int i = num1;i <= num1 + 3;i++) {
	for (int j = num1;j <= num1 + 3;j++) {
		if (j==i) { continue; }
		for (int x = num1;x <= num1 + 3;x++) {
			if (x==i || x==j) {continue;}
			else {printf("%d ",i*100+j*10+x);}
		}
	}
	printf("\n");
}

注意:多个条件只要有一个成立即成立时(或运算),用||连接。

注意:多个条件所有成立才成立时(和运算),用&&连接。

3. 水仙花数

cpp 复制代码
int num = 0;
int result1 = 0;
int result2 = 0;
int sing = 0;  //数字的最后一位
int a = 0;  //用于将pow结果转换为int类型
int b = 0;  //用于替代外层循环i在内层循环里的使用
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = pow(10, num - 1);i < pow(10, num);i++) {
	result1 = i;
	b = i;
	for (int j = 1;j <= num;j++) {
		sing = b % 10;
		b = b / 10;
		a = pow(sing, num);
		result2 = result2 + a;
	}
	if (result1 == result2) { printf("%d\n",result1); }
	result2 = 0;
}

注意:最好不要将外层循环的循环变量直接在内层循环改变!

4. 输出九九乘法表

cpp 复制代码
int num = 0;
int result = 0;
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = 1;i <= num;i++) {
	for (int j = 1;j < i;j++) {
		result = i * j;
		if (result / 10 == 0) {printf("%d*%d=%d   ", j, i, result);}
		else {printf("%d*%d=%d  ", j, i, result);}
	}
	result = i * i;
	if (result / 10 == 0) {printf("%d*%d=%d\n",i,i,result);}
	else {printf("%d*%d=%d\n", i, i, result);}
}

5. 统计素数

cpp 复制代码
int num1 = 0;
int num2 = 0;
int count = 0;
int sum = 0;
int flag = 1;
printf("输入你的正整数区间:");
scanf("%d %d",&num1,&num2);
for (int i = num1;i <= num2;i++) {
	for (int j = 2;j < i;j++) {
		if (i % j == 0) {flag = 0;break;}
	}
	if (flag == 1) {count++;sum = sum + i;}
	flag = 1;
}
if (num1 == 1) { count--;sum--; }//剔除num1=1的情况。
printf("%d %d",count,sum);

注意:如果区间开端是1,需要剔除。

6. 猜数游戏

思考:第n次猜对了,则输出good guess。第n次如果猜错了,输出game over。

cpp 复制代码
int num = 0;int val = 0;int num1 = 0;int count = 1;int flag = 0;
printf("输入要猜的数和次数:");
scanf("%d %d",&num,&val);	
printf("开始你的猜测吧!\n");
scanf("%d",&num1);
while (count < val) {
	if (num1 > 0) {
		if (num1 > num) { count++;printf("大了\n");scanf("%d", &num1); }
		if (num1 < num) { count++;printf("小了\n");scanf("%d", &num1); }
		if (num1 == num) { flag = 1;break; }
	}
	else { break; }
}
if (flag == 1) {
	if (count == 1) { printf("一次就中,Bingo!"); }
	else if (count <= 3) { printf("三次以内,幸运!"); }
	else { printf("猜对了。"); }
}
else { printf("游戏结束。"); }

7. 求序列前N项和

cpp 复制代码
int num = 0;double son = 2;double mon = 1;int val = 0;double sum = 0;
printf("输入你的正整数:");
scanf("%d",&num);
for (int i = 1;i <= num;i++) {
	sum = sum + son / mon;
	val = son;
	son = son + mon;
	mon = val;
}
printf("%.2f",sum);

注意:保留两位小数的写法是%.2f。

注意:分子和分母用的是double类型。因为计算机内存关系,Int类型数字大到一定程度时,会变为负数。

8. 约分最简分式

cpp 复制代码
int son = 0;int mon = 0;int max = 0;int min = 0;int num = 0;
printf("输入你的分数:");
scanf("%d/%d",&son,&mon);
if (son < mon) { max = mon;min = son; }
if (son > mon) { max = son;min = mon; }
if (son == mon) { max = mon;min = son; }
while (max > 0) {
	num = min % max;
	min = max;
	max = num;
}
printf("最简分式:%d/%d",son/min,mon/min);

思考:利用了辗转相除法求最大公约数。

相关推荐
懂点Tech6 小时前
ctfshow misc28:GIF 高度修改解题与脚本实现
开发语言·windows·python
微尘hjx6 小时前
【ByteTrack 04】多轨迹算法ByteTrack改进点
算法·yolo·目标检测·目标跟踪·bytetrack·ultralytics·车跟踪
云和数据.ChenGuang6 小时前
Python 重写(Override)深度解析:从 MRO 到 super() 的完整机制
java·开发语言·人工智能·python·langchain·1024程序员节
小向是个Der7 小时前
嵌入式进阶——MCU上电后的动作
c语言·单片机·mcu·学习·链接脚本
美狐美颜SDK开放平台7 小时前
视频美颜SDK试用DEMO阶段应该测试什么?直播APP接入实操指南
开发语言·人工智能·深度学习·音视频·美颜sdk·直播美颜sdk·第三方美颜sdk
dtq04247 小时前
C++小案例 - 日志实战
开发语言·c++
星夜离尘567 小时前
MATLAB ADC 码流触顶诊断:命中数、缺口分段与削顶不可辨识性
开发语言·matlab
码匠许师傅8 小时前
【C++三方组件】Qt 概览:桌面 C++ 的事实标准与许可证三轨
开发语言·c++·qt
码匠许师傅9 小时前
【C++三方组件】POCO:跨平台系统编程全家桶
开发语言·c++