C语言水平测试题 过关斩将(3)辗转相除法,前n项求和,整数的正序分解,求最大公约数

我的个人主页:************☆光之梦☆的博客_CSDN博客-C语言基础语法(超详细)领域博主****************

欢迎各位 👍点赞 ⭐收藏 📝评论

我的专栏: C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客(这个专栏里的平均文章质量分是95噢,基本全都是高质量文章,本博主将会长期更新c语言的语法知识,初学c语言的朋友们,可以收藏订阅一下,收藏绝对不亏噢)

目录

一、前n项求和

【题型1】

【题型2】

二、求最大公约数

方案1------枚举

方案2------辗转相除法

三、正序分解整数


下列是:C语言水平测试题(3)

大家冲鸭!

一、✨前n项求和✨

输入一个数,求这个数的前n项和

🎇【题型1】 🎇

用户输入一个整数n,请求出这个数从1到n的倒数之和的值,并打印输出

具体要求如下图:

代码实现示例:

cpp 复制代码
#include <stdio.h>

int main()
{
	int n; // n用于存储用户输入的值
	int i; // i用于循环计数
	double sum = 0.0; // sum用于存储计算的和的结果
	
    // 用户输入
	printf("请输入您要计算的前n项和的n:");
	scanf("%d",&n);

    // 求前n项和
    // 从1循环递增到n。在每次循环中,1.0/i的值被加到sum中
	for (i = 1; i <= n; i++){
		sum += 1.0/i;
	}
	
    // 输出结果
	printf("f(%d)=%f\n",n,sum);
	return 0;
}

核心代码块:

🎇【题型2】 🎇

用户输入一个整数n,请计算出从1到n的交替和,并将结果输出

注:其中每一项的正负号会交替改变

代码实现示例:

cpp 复制代码
#include <stdio.h>

int main()
{
	int n; // n用于存储用户输入的值
	int i; // i用于循环计数
	double sum = 0.0; // sum用于存储计算的和的结果
	int sign = 1; // sign用于标记每一项的正负号,初始值为1 正
	
    // 用户输入
	printf("请输入您要计算的前n项和的n:");
	scanf("%d",&n);

    // 循环计算从1到n的交替和
	for (i = 1; i <= n; i++){
        // sign用于标记正负号,通过乘以sign实现每一项正负号的交替
	    sum += sign*1.0/i;
        // 在每次循环结束时,sign会取反,使下一次循环的正负号相反
        sign = -sign;
	}
	
    // 输出
	printf("f(%d)=%f\n",n,sum);
	return 0;
}

核心代码块:

cpp 复制代码
double sum = 0.0;
int sign = 1;

for (i = 1; i <= n; i++){
		sum += sign*1.0/i;
       sign = -sign;
	}

二、✨求最大公约数✨

需求:

输入两个数 a 和 b,输出它们的最大公约数

输入:1218

输出:6

🎇方案1------枚举🎇

坏处:效率不高

图例:

🎇 方案2------辗转相除法🎇

辗转相除法

  1. 如果 b 等于 0,计算结束,a 就是最大公约数;

  2. 否则,计算 a 除以 b 的余数(a % b),让 a 等于 b,而 b 等于那个余数;

  3. 回到第一步

a b 余数
12 18 12
18 12 6
12 6 0
6 0

代码实现示例:

cpp 复制代码
#include <stdio.h>
//辗转相除法 
int main()
{ 
	//计算a与b的最大公约数 
    // 定义两个变量a和b,用来存储输入的两个整数
	int a,b;

    // 定义一个变量t,用来存储余数
	int t;

	//scanf("%d %d",&a,&b);
	a = 12;b=18;

    // 当b不等于0时,将两个数的差值更新为较小的数与余数的差值
    // 直到余数为0,此时较小的数即为最大公约数
	while (b != 0) {
		t = a % b;
		a = b;
		b = t;
	}
	printf("最大公约数(gcd)=%d\n",a);// 6
	return 0;
}

三、✨正序分解整数✨

正序分解整数

输入一个非负整数,正序输出它的每一位数字输入:13425 输出:1 3 4 2 5

代码实现示例:

cpp 复制代码
#include <stdio.h>

int main()
{
	int x;
	//scanf("%d",&x);
	
	x = 13425;

	int mask = 1;
	int t = x;
	while (t > 9) {
		t /= 10;
		mask *= 10;
	}
	printf("x=%d,mask=%d\n",x,mask);
	do{
		int d = x / mask;
		printf("%d",d);
		if(mask > 9){
			printf(" ");
		}
		x %= mask;
		mask /= 10;
	}while (mask > 0);
	printf("\n");
	return 0;
}

各位学习C语言的初学者,如果有问题随时都可以来问我,我会随时为您解答!欢迎大家与我一起学习,互相进步。

我的C语言专栏: C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客
创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。

相关推荐
轻口味10 分钟前
命名空间与模块化概述
开发语言·前端·javascript
吉大一菜鸡13 分钟前
FPGA学习(基于小梅哥Xilinx FPGA)学习笔记
笔记·学习·fpga开发
晓纪同学1 小时前
QT-简单视觉框架代码
开发语言·qt
威桑1 小时前
Qt SizePolicy详解:minimum 与 minimumExpanding 的区别
开发语言·qt·扩张策略
飞飞-躺着更舒服1 小时前
【QT】实现电子飞行显示器(简易版)
开发语言·qt
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 16课题、并发编程
开发语言·青少年编程·并发编程·编程与数学·goweb
明月看潮生1 小时前
青少年编程与数学 02-004 Go语言Web编程 17课题、静态文件
开发语言·青少年编程·编程与数学·goweb
Java Fans1 小时前
C# 中串口读取问题及解决方案
开发语言·c#
盛派网络小助手1 小时前
微信 SDK 更新 Sample,NCF 文档和模板更新,更多更新日志,欢迎解锁
开发语言·人工智能·后端·架构·c#
∝请叫*我简单先生2 小时前
java如何使用poi-tl在word模板里渲染多张图片
java·后端·poi-tl