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

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

相关推荐
Java面试题总结4 小时前
Python 入门(四)- Openpyxl 操作 Excel 教程
开发语言·python·excel
澈2074 小时前
排序算法入门:冒泡、选择、插入排序详解
数据结构·算法·排序算法
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 152. 乘积最大子数组 | C++ 动态规划 (绝妙 swap 翻转技巧)
c++·leetcode·动态规划
smj2302_796826524 小时前
解决leetcode第3901题好子序列查询
python·算法·leetcode
gCode Teacher 格码致知4 小时前
Javascript提高:Math.round 详解-由Deepseek产生
开发语言·javascript
_深海凉_4 小时前
LeetCode热题100-每日温度
算法·leetcode·职场和发展
HockerF4 小时前
cpu原理到c/c++指针
c语言·c++
迷你可可小生4 小时前
面经学习(二)
学习·算法
John.Lewis4 小时前
C++加餐课-二叉树:进阶算法
数据结构·c++·算法