【C语言程序设计——函数】亲密数判定(头歌实践教学平台习题)【合集】

简介: 本文介绍了通过编程实现打印3000以内的全部亲密数的任务。主要内容包括:1. **任务描述**:实现函数打印3000以内的全部亲密数。2. **相关知识**: - 循环控制和跳转语句(for、while循环,break、continue语句)的使用。 - 亲密数的概念及历史背景。 - 判断亲密数的方法:计算数A的因子和存于B,再计算B的因子和存于sum,最后比较sum与A是否相等。3. **编程要求**:根据提示在指定区域内补充代码。4. **测试说明**:平台对代码进行测试,预期输出如220和284是一组亲密数。5. **通关代码**:提供了完整的C语言代码实现

目录😋

任务描述

相关知识

一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)

2. 循环控制语句(while 循环)

3. 跳转语句(break 语句)

4. 跳转语句(continue 语句)

二、亲密数的概念

1. 定义

2. 举例说明

3. 历史背景(延伸内容)

三、判断亲密数的方法

1. 计算数 A 的各因子,并求其和存于 B

2. 计算 B 的各因子,并求其和存于 sum

3. 比较 sum 和 A 是否相等

编程要求

测试说明

通关代码

测试结果


任务描述

本关任务:通过函数实现打印3000以内的全部亲密数。


相关知识

为了完成本关任务,你需要掌握:

  1. 循环控制 / 跳转语句的使用
  2. 亲密数的概念
  3. 判断亲密数的方法

一、循环控制 / 跳转语句的使用

1. 循环控制语句(for 循环)

  • 基本原理for循环是一种常用的循环结构,它允许您指定一个初始化表达式、一个循环条件和一个更新表达式。语法格式为for(初始化表达式; 循环条件; 更新表达式)。初始化表达式在循环开始时执行一次,用于初始化循环变量。循环条件在每次循环迭代开始时进行检查,如果为真,则执行循环体中的代码。更新表达式在每次循环体执行完后执行,用于更新循环变量。
  • 示例代码
#include <stdio.h>
int main() {
    // 打印1到10的数字
    for (int i = 1; i <= 10; i++) {
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
  • image.gif

2. 循环控制语句(while 循环)

  • 基本原理while循环在循环开始时检查循环条件。只要条件为真,就会执行循环体中的代码。语法格式为while(循环条件)。循环条件是一个表达式,它返回一个布尔值(真或假)。在循环体中,通常需要包含一些能够改变循环条件的语句,否则可能会导致无限循环。
  • 示例代码
#include <stdio.h>
int main() {
    int i = 1;
    while (i <= 10) {
        printf("%d ", i);
        i++;
    }
    printf("\n");
    return 0;
}
  • image.gif

3. 跳转语句(break 语句)

  • 基本原理break语句用于立即跳出当前循环(forwhiledo - while)或switch语句。当程序执行到break语句时,循环或switch语句会立即终止,程序控制流将跳转到循环或switch语句后的下一条语句。
  • 示例代码(在循环中使用 break)
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            break;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
  • image.gif

4. 跳转语句(continue 语句)

  • 基本原理continue语句用于跳过当前循环迭代的剩余部分,直接开始下一次循环迭代。当程序执行到continue语句时,循环体中continue语句之后的代码将不会被执行,而是直接跳转到循环的更新表达式(对于for循环)或循环条件检查(对于whiledo - while循环)。
  • 示例代码(在循环中使用 continue)
#include <stdio.h>
int main() {
    for (int i = 1; i <= 10; i++) {
        if (i == 5) {
            continue;
        }
        printf("%d ", i);
    }
    printf("\n");
    return 0;
}
  • image.gif

二、亲密数的概念

1. 定义

亲密数是针对两个不同的自然数而言的一种特殊关系描述。具体来说,对于自然数 A 和 B,假如整数 A 的所有因子(这里的因子包含 1,但不包含 A 本身)相加所得的和恰好等于 B;同时,整数 B 的所有因子(同样包含 1,不包含 B 本身)相加的和又等于 A,那么我们就把这两个整数 A 和 B 称作亲密数。

2. 举例说明

我们以数字 220 和 284 为例来直观理解亲密数的定义:

  • 对于 220 来说,它的因子有 1、2、4、5、10、11、20、22、44、55、110 这些数(找因子的方法就是看哪些自然数能够整除 220),把这些因子相加起来:1 + 2 + 4 + 5 + 10 + 11 + 20 + 22 + 44 + 55 + 110 = 284 。
  • 再看 284 ,它的因子有 1、2、4、71、142 ,把这些因子相加可得:1 + 2 + 4 + 71 + 142 = 220 。

这两个数正好满足上述亲密数定义中 A 的因子和等于 B ,B 的因子和等于 A 的这种相互关系,所以 220 和 284 就是一对亲密数。

3. 历史背景(延伸内容)

亲密数的概念可以追溯到古代数学。古希腊数学家毕达哥拉斯及其学派对于数的性质有着深入的研究,他们对数之间的各种关系很感兴趣,亲密数就是其中一种有趣的关系发现。这种数的关系在当时的数学研究以及哲学思考中都有一定的意义,因为古希腊人认为数具有神秘的性质,像亲密数这样的关系可能被用于解释自然现象或者哲学理念等诸多方面。 image.gif 编辑

三、判断亲密数的方法

判断两个数是否为亲密数,通常可以按照以下步骤来进行:

1. 计算数 A 的各因子,并求其和存于 B

  • 找出自然数 A 的所有因子(除了 A 本身以外)。比如我们要判断两个数是否是亲密数,先确定其中一个数为 A,然后从 1 开始依次判断每个小于 A 的自然数能否整除 A,如果能整除,那么这个自然数就是 A 的因子。把所有找到的因子相加,得到的和记为 B 。
  • 例如,还是以 220 作为 A 来举例,我们通过依次判断发现 1 能整除 220,2 也能整除 220,4 同样能整除 220…… 一直到找到所有符合条件的因子 1、2、4、5、10、11、20、22、44、55、110 ,将它们相加得到 284 存于 B 。

2. 计算 B 的各因子,并求其和存于 sum

  • 把上一步得到的 B 当作新的数,再按照找因子的方法,找出 B 的所有因子(除 B 本身以外)。同样从 1 开始,依次判断每个小于 B 的自然数能否整除 B ,能整除的就是 B 的因子。然后把这些因子全部相加,得到的和记为 sum 。
  • 例如,对于前面得到的 B = 284 ,我们找出它的因子 1、2、4、71、142 ,将它们相加:1 + 2 + 4 + 71 + 142 = 220 ,这里得到的和 220 就存为 sum 。

3. 比较 sum 和 A 是否相等

  • 最后,把得到的 sum 和最初的那个自然数 A 进行比较,如果 sum 与 A 相等,那就说明这两个数 A 和 B 是亲密数;如果 sum 与 A 不相等,那就表明它们不是亲密数。
  • 例如,像前面例子中,最初的 A 是 220 ,最后计算得到的 sum 也是 220 ,二者相等,所以可以确定 220 和 284 是亲密数。

编程要求

根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码。


测试说明

平台会对你编写的代码进行测试:

预期输出:

220和284是一组亲密数
image.gif

预期输出:

1184和1210是一组亲密数
image.gif

预期输出:

2620和2924是一组亲密数
image.gif

开始你的任务吧,祝你成功!


通关代码

#include <stdio.h>
#define N 3000
int sum_of_factors(int num) {
  int sum = 0;
  for (int i = 1; i < num; i++) {
    if (num % i == 0) {
      sum += i;
    }
  }
  return sum;
}
int is(int i) {
  int j, n, sum1, sum2;
  //请在此添加代码
  /*********Begin*********/
  sum1 = sum_of_factors(i);
  sum2 = sum_of_factors(sum1);
  /********* End *********/
  if (sum2 == i && i < sum1)
    return sum1;
  else
    return 0;
}
int main() {
  int i, j;
  //请在此添加代码
  /*********Begin*********/
  for (i = 1; i <= N; i++) {
    j = is(i);
    if (j > 0) {
      /********* End *********/
      printf("%d和%d是一组亲密数\n", i, j);
    }
  }
}

image.gif


测试结果

image.gif

image.gif

目录
打赏
0
24
24
0
114
分享
相关文章
【C语言程序设计——函数】分数数列求和2(头歌实践教学平台习题)【合集】
函数首部:按照 C 语言语法,函数的定义首部表明这是一个自定义函数,函数名为fun,它接收一个整型参数n,用于指定要求阶乘的那个数,并且函数的返回值类型为float(在实际中如果阶乘结果数值较大,用float可能会有精度损失,也可以考虑使用double等更合适的数据类型,这里以float为例)。例如:// 函数体代码将放在这里函数体内部变量定义:在函数体中,首先需要定义一些变量来辅助完成阶乘的计算。比如需要定义一个变量(通常为float或double类型,这里假设用float。
24 3
|
13天前
|
【C语言程序设计——函数】分数数列求和1(头歌实践教学平台习题)【合集】
if 语句是最基础的形式,当条件为真时执行其内部的语句块;switch 语句则适用于针对一个表达式的多个固定值进行判断,根据表达式的值与各个 case 后的常量值匹配情况,执行相应 case 分支下的语句,直到遇到 break 语句跳出 switch 结构,若没有匹配值则执行 default 分支(可选)。例如,在判断一个数是否大于 10 的场景中,条件表达式为 “num> 10”,这里的 “num” 是程序中的变量,通过比较其值与 10 的大小关系来确定条件的真假。常量的值必须是唯一的,且在同一个。
12 2
C 语言函数完全指南:创建、调用、参数传递、返回值解析
函数是一段代码块,只有在被调用时才会运行。 您可以将数据(称为参数)传递给函数。 函数用于执行某些操作,它们对于重用代码很重要:定义一次代码,并多次使用。
237 3
C语言函数返回值详解
本文详细解析了C语言中函数返回值的概念与应用。从函数的基本定义入手,深入探讨了不同类型返回值的作用及意义,并提供了实用的编程示例,帮助读者更好地理解和使用函数返回值。通过本文,你将掌握如何有效利用返回值优化代码结构与功能实现。
C语言的函数返回值和指针
C|函数返回值(区分各类值)和指针(区分各类存储空间)的细节
C语言---函数---知识点总结(三)------函数的返回值类型
C语言---函数---知识点总结(三)------函数的返回值类型
C语言中向函数传递值和从函数返回值的技术解析
C语言中向函数传递值和从函数返回值的技术解析
90 0
|
8月前
|
在C语言中函数的返回值及其应用示例
在C语言中函数的返回值及其应用示例
129 2
|
8月前
|
C语言函数的返回值
C语言函数的返回值
96 0
C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是
C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是
1069 0
C语言: 定义一个函数int isprime(int n),用来判别一个正整数n是否为素数,若为素数函数返回值为1,否则为0。在主函数中输入一个整数x,调用函数isprime(x)来判断这个整数x是

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等