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博客
创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。

相关推荐
BFT白芙堂1 分钟前
Franka 机器人x Dexterity Gen引领遥操作精细任务新时代
人工智能·算法·机器学习·具身智能·franka机器人·科研机器人·机器人解决方案
Pitayafruit4 分钟前
【📕分布式锁通关指南 09】源码剖析redisson之公平锁的实现
redis·分布式·后端
Pitayafruit6 分钟前
【📕分布式锁通关指南 10】源码剖析redisson之MultiLock的实现
redis·分布式·后端
爱的叹息7 分钟前
Spring Boot 集成 MongoDB 时自动创建的核心 Bean 的详细说明及表格总结
spring boot·后端·mongodb
LuckyLay9 分钟前
LeetCode算法题(Go语言实现)_38
算法·leetcode·golang
安迪小宝11 分钟前
python基础语法13-装饰器
开发语言·前端·python
小八四爱吃甜食12 分钟前
【R语言绘图】圈图绘制代码
开发语言·r语言
残月只会敲键盘12 分钟前
C++ Lambda表达式简明指南:新手快速上手
开发语言·c++
放羊大亨27 分钟前
《认知觉醒》下篇·第六章第一节“清晰:一个观念,重构你的行动力” 总结
笔记
Chiyamin28 分钟前
图算法基础
数据结构·c++·算法