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

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

相关推荐
searchforAI4 分钟前
我的Obsidian知识库,现在可以自动剪藏笔记到本地了
人工智能·笔记·学习·音视频·ai工具·obsidian·视频总结
优雅格子衫9 分钟前
uniapp 拍照相册选取后超级好用的裁剪组件,增加水印完全自定义
开发语言·前端·javascript·uni-app·vue
xcyxiner10 分钟前
ubuntu下 cmake初始化脚本 以及 qt依赖
c++·qt
周末也要写八哥10 分钟前
Visual C++6.0下载安装流程及PDF学习手册资源
c++·学习·pdf
Matrix_1120 分钟前
第13篇:非线性位移场——漩涡、鱼眼、水波纹与球面化
图像处理·算法
Vallelonga21 分钟前
Rust 中 unsafe 关键字的语义
开发语言·rust
金牌归来发现妻女流落街头22 分钟前
【LeetCode 第207题】
算法·leetcode·拓扑·领接表
AI砖家26 分钟前
前端 JavaScript 异步处理全方案详解:从回调到 Observable
开发语言·前端·javascript
社交怪人27 分钟前
【A×B】信息学奥赛一本通C语言解法(题号1036)
c语言
熬夜敲代码的猫28 分钟前
AVL树(C++详解版)
数据结构·c++·算法