《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);

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

相关推荐
tumu_C12 分钟前
用std::function减缓C++模板代码膨胀和编译压力的一个场景
开发语言·c++
Komorebi_999922 分钟前
大模型学习day5
学习·大模型
BT-BOX25 分钟前
Matlab 2025B下载安装教程
开发语言·matlab
逍遥德1 小时前
AI时代,计算机专业大学生学习指南
java·javascript·人工智能·学习·ai编程
网络与设备以及操作系统学习使用者1 小时前
直连路由优先级最高
运维·网络·学习·华为·智能路由器
Hical611 小时前
C++17 实战心得:那些真正改变我写代码方式的特性
c++
programhelp_1 小时前
Pinterest OA 题库大公开|Programhelp 独家整理(最新高频)
java·开发语言
他是龙5511 小时前
71:Python安全 & 反序列化 & PYC反编译 & 格式化字符串安全
开发语言·python·安全
YXXY3132 小时前
模拟算法的介绍
算法
Hical612 小时前
实测:C++20 协程 vs Go Gin vs Rust Actix,谁的 Web 性能更强?
c++