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

相关推荐
天天爱吃肉821844 分钟前
第十篇:电源设计的“能量矩阵”——无线充电与碳化硅LLC谐振
笔记·矩阵·汽车
bst@微胖子44 分钟前
Python高级语法之selenium
开发语言·python·selenium
Paddi9301 小时前
Codeforces Round 1004 (Div. 1) C. Bitwise Slides
c++·算法
王小义笔记1 小时前
Postman如何流畅使用DeepSeek
开发语言·测试工具·lua·postman·deepseek
Luis Li 的猫猫2 小时前
深度学习中的知识蒸馏
人工智能·经验分享·深度学习·学习·算法
查理零世2 小时前
【蓝桥杯集训·每日一题2025】 AcWing 6118. 蛋糕游戏 python
python·算法·蓝桥杯
敲代码的小王!2 小时前
MD5加密算法和BCrypt密码加密算法
java·算法·安全
带娃的IT创业者3 小时前
机器学习实战(6):支持向量机(SVM)——强大的非线性分类器
算法·机器学习·支持向量机
魔尔助理顾问3 小时前
一个简洁高效的Flask用户管理示例
后端·python·flask
java1234_小锋3 小时前
一周学会Flask3 Python Web开发-request请求对象与url传参
开发语言·python·flask·flask3