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


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

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

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

    目录

    一、前n项求和

    【题型1】 

    【题型2】 

    二、求最大公约数

    方案1——枚举

    方案2——辗转相除法

    三、正序分解整数


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

    大家冲鸭!

    一、✨前n项求和✨

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

     

    🎇【题型1】 🎇

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

    具体要求如下图: 

     代码实现示例:

    1. #include
    2. int main()
    3. {
    4. int n; // n用于存储用户输入的值
    5. int i; // i用于循环计数
    6. double sum = 0.0; // sum用于存储计算的和的结果
    7. // 用户输入
    8. printf("请输入您要计算的前n项和的n:");
    9. scanf("%d",&n);
    10. // 求前n项和
    11. // 从1循环递增到n。在每次循环中,1.0/i的值被加到sum中
    12. for (i = 1; i <= n; i++){
    13. sum += 1.0/i;
    14. }
    15. // 输出结果
    16. printf("f(%d)=%f\n",n,sum);
    17. return 0;
    18. }

     核心代码块:

    🎇【题型2】 🎇

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

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

     代码实现示例:

    1. #include
    2. int main()
    3. {
    4. int n; // n用于存储用户输入的值
    5. int i; // i用于循环计数
    6. double sum = 0.0; // sum用于存储计算的和的结果
    7. int sign = 1; // sign用于标记每一项的正负号,初始值为1 正
    8. // 用户输入
    9. printf("请输入您要计算的前n项和的n:");
    10. scanf("%d",&n);
    11. // 循环计算从1到n的交替和
    12. for (i = 1; i <= n; i++){
    13. // sign用于标记正负号,通过乘以sign实现每一项正负号的交替
    14. sum += sign*1.0/i;
    15. // 在每次循环结束时,sign会取反,使下一次循环的正负号相反
    16. sign = -sign;
    17. }
    18. // 输出
    19. printf("f(%d)=%f\n",n,sum);
    20. return 0;
    21. }

    核心代码块:

    1. double sum = 0.0;
    2. int sign = 1;
    3. for (i = 1; i <= n; i++){
    4. sum += sign*1.0/i;
    5. sign = -sign;
    6. }

    二、✨求最大公约数✨

    需求:

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

    输入:1218

    输出:6

     

    🎇方案1——枚举🎇        

    坏处:效率不高

    图例:

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

    辗转相除法

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

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

    3. 回到第一步

    ab余数
    121812
    18126
    1260
    60

    代码实现示例:

    1. #include
    2. //辗转相除法
    3. int main()
    4. {
    5. //计算a与b的最大公约数
    6. // 定义两个变量a和b,用来存储输入的两个整数
    7. int a,b;
    8. // 定义一个变量t,用来存储余数
    9. int t;
    10. //scanf("%d %d",&a,&b);
    11. a = 12;b=18;
    12. // 当b不等于0时,将两个数的差值更新为较小的数与余数的差值
    13. // 直到余数为0,此时较小的数即为最大公约数
    14. while (b != 0) {
    15. t = a % b;
    16. a = b;
    17. b = t;
    18. }
    19. printf("最大公约数(gcd)=%d\n",a);// 6
    20. return 0;
    21. }

    三、✨正序分解整数✨

    正序分解整数

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

    代码实现示例:

    1. #include
    2. int main()
    3. {
    4. int x;
    5. //scanf("%d",&x);
    6. x = 13425;
    7. int mask = 1;
    8. int t = x;
    9. while (t > 9) {
    10. t /= 10;
    11. mask *= 10;
    12. }
    13. printf("x=%d,mask=%d\n",x,mask);
    14. do{
    15. int d = x / mask;
    16. printf("%d",d);
    17. if(mask > 9){
    18. printf(" ");
    19. }
    20. x %= mask;
    21. mask /= 10;
    22. }while (mask > 0);
    23. printf("\n");
    24. return 0;
    25. }

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

    我的C语言专栏:C语言基础语法(超详细)_☆光之梦☆的博客-CSDN博客

    创作不易,👍 +⭐ +📝(一键三连) 是对博主最大的鼓励与支持哦。

  • 相关阅读:
    垃圾邮件(短信)分类算法实现 机器学习 深度学习 计算机竞赛
    Linux 文本处理三剑客:grep、sed 和 awk
    《设计模式的运用》使用策略模式+工厂模式优化代码中的if else
    Linux远程控制
    【专题复习】树状数组
    Canvas绘制矢量图问题,怎么去掉不是完整的矩形
    OSPF的LSA详解
    人工智能框架实战精讲:Keras项目-英文语料的文本分类实战与调参优化
    第23集丨人生的智慧:练就一颗从容自在的心
    全局优化的蝴蝶优化算法-附代码
  • 原文地址:https://blog.csdn.net/qq_72707720/article/details/133800612