【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

目录
相关文章
|
18小时前
|
存储 算法 C语言
【C语言程序设计——函数】素数判定(头歌实践教学平台习题)【合集】
本内容介绍了编写一个判断素数的子函数的任务,涵盖循环控制与跳转语句、算术运算符(%)、以及素数的概念。任务要求在主函数中输入整数并输出是否为素数的信息。相关知识包括 `for` 和 `while` 循环、`break` 和 `continue` 语句、取余运算符 `%` 的使用及素数定义、分布规律和应用场景。编程要求根据提示补充代码,测试说明提供了输入输出示例,最后给出通关代码和测试结果。 任务核心:编写判断素数的子函数并在主函数中调用,涉及循环结构和条件判断。
32 23
|
18小时前
|
C语言
【C语言程序设计——循环程序设计】枚举法换硬币(头歌实践教学平台习题)【合集】
本文档介绍了编程任务的详细内容,旨在运用枚举法求解硬币等额 - 循环控制语句(`for`、`while`)及跳转语句(`break`、`continue`)的使用。 - 循环嵌套语句的基本概念和应用,如双重`for`循环、`while`嵌套等。 3. **编程要求**:根据提示在指定区域内补充代码。 4. **测试说明**:平台将对编写的代码进行测试,并给出预期输出结果。 5. **通关代码**:提供完整的代码示例,帮助理解并完成任务。 6. **测试结果**:展示代码运行后的实际输出,验证正确性。 文档结构清晰,逐步引导读者掌握循环结构与嵌套的应用,最终实现硬币兑换的程序设计。
31 19
|
15小时前
|
存储 编译器 C语言
【C语言程序设计——选择结构程序设计】求一元二次方程的根(头歌实践教学平台习题)【合集】
本任务要求根据求根公式计算并输出一元二次方程的两个实根,精确到小数点后两位。若方程无实根,则输出提示信息。主要内容包括: - **任务描述**:使用求根公式计算一元二次方程的实根。 - **相关知识**:掌握 `sqrt()` 函数的基本使用方法,判断方程是否有实根。 - **编程要求**:根据输入的系数,计算并输出方程的根或提示无实根。 - **测试说明**:提供两组测试数据及预期输出,确保代码正确性。 - **通关代码**:包含完整的 C 语言代码示例,实现上述功能。 通过本任务,你将学会如何处理一元二次方程的求解问题,并熟悉 `sqrt()` 函数的使用。
14 5
|
15小时前
|
C语言
【C语言程序设计——入门】基本数据类型与表达式(头歌实践教学平台习题)【合集】
这份文档详细介绍了编程任务的多个关卡,涵盖C语言的基础知识和应用。主要内容包括: 1. **目录**:列出所有关卡,如`print函数操作`、`转义字符使用`、`数的向上取整`等。 2. **各关卡的任务描述**:明确每关的具体编程任务,例如使用`printf`函数输出特定字符串、实现向上取整功能等。 3. **相关知识**:提供完成任务所需的背景知识,如格式化输出、算术运算符、关系运算符等。 4. **编程要求**:给出具体的代码编写提示。 5. **测试说明**:包含预期输入输出,帮助验证程序正确性。 6. 文档通过逐步引导学习者掌握C语言的基本语法和常用函数,适合初学者练习编程技能。
13 1
|
14小时前
|
C语言
【C语言程序设计——循环程序设计】统计海军鸣放礼炮声数量(头歌实践教学平台习题)【合集】
有A、B、C三艘军舰同时开始鸣放礼炮各21响。已知A舰每隔5秒1次,B舰每隔6秒放1次,C舰每隔7秒放1次。编程计算观众总共听到几次礼炮声。根据提示,在右侧编辑器Begin--End之间的区域内补充必要的代码。开始你的任务吧,祝你成功!
28 13
|
16小时前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】判断一个数是不是5和7的倍数(头歌实践教学平台习题)【合集】
本任务要求输入一个正整数,判断其是否同时是5和7的倍数,若是输出&quot;Yes&quot;,否则输出&quot;No&quot;。内容涵盖选择结构的基本概念、主要语句类型(if、if-else、switch)及条件判断逻辑,帮助理解编程中的分支执行与条件表达式。测试用例包括正数、负数及非倍数情况,确保代码逻辑严谨。通关代码示例如下: ```cpp #include &quot;stdio.h&quot; int main(){ int a; scanf(&quot;%d&quot;, &a); if (a &lt;= 0){ printf(&quo
13 0
|
15小时前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】按从小到大排序三个数(头歌实践教学平台习题)【合集】
本任务要求从键盘输入三个数,并按从小到大的顺序排序后输出。主要内容包括: - **任务描述**:实现三个数的排序并输出。 - **编程要求**:根据提示在编辑器中补充代码。 - **相关知识**: - 选择结构(if、if-else、switch) - 主要语句类型(条件语句) - 比较操作与交换操作 - **测试说明**:提供两组测试数据及预期输出。 - **通关代码**:完整代码示例。 - **测试结果**:展示测试通过的结果。 通过本任务,你将掌握基本的选择结构和排序算法的应用。祝你成功!
13 4
|
14小时前
|
存储 C语言
【C语言程序设计——循环程序设计】利用数列的累加和求 sinx(头歌实践教学平台习题)【合集】
项的累加和,一般会使用循环结构,在每次循环中计算出当前项的值(可能基于通项公式或者递推关系),然后累加到一个用于存储累加和的变量中。在C语言中推导数列中的某一项,通常需要依据数列给定的通项公式或者前后项之间的递推关系来实现。例如,对于一个简单的等差数列,其通项公式为。的级数,其每一项之间存在特定的递推关系(后项的分子是其前项的分子乘上。,计算sinx的值,直到最后一项的绝对值小于。为项数),就可以通过代码来计算出指定项的值。对于更复杂的数列,像题目中涉及的用于近似计算。开始你的任务吧,祝你成功!
19 6
|
14小时前
|
Serverless C语言
【C语言程序设计——循环程序设计】利用循环求数值 x 的平方根(头歌实践教学平台习题)【合集】
根据提示在右侧编辑器Begin--End之间的区域内补充必要的代码,求解出数值x的平方根;运用迭代公式,编写一个循环程序,求解出数值x的平方根。注意:不能直接用平方根公式/函数求解本题!开始你的任务吧,祝你成功!​ 相关知识 求平方根的迭代公式 绝对值函数fabs() 循环语句 一、求平方根的迭代公式 1.原理 在C语言中,求一个数的平方根可以使用牛顿迭代法。对于方程(为要求平方根的数),设是的第n次近似值,牛顿迭代公式为。 其基本思想是从一个初始近似值开始,通过不断迭代这个公式,使得越来越接近。
26 18
|
15小时前
|
存储 算法 安全
【C语言程序设计——选择结构程序设计】求阶跃函数的值(头歌实践教学平台习题)【合集】
本任务要求输入x的值,计算并输出特定阶跃函数的结果。主要内容包括: 1. **选择结构基本概念**:介绍if、if-else、switch语句。 2. **主要语句类型**:详细解释if、if-else、switch语句的使用方法。 3. **跃迁函数中变量的取值范围**:说明如何根据条件判断变量范围。 4. **计算阶跃函数的值**:通过示例展示如何根据给定条件计算函数值。 编程要求:在右侧编辑器Begin-End之间补充代码,实现阶跃函数的计算和输出。测试说明提供了多个输入及其预期输出,确保代码正确性。最后提供通关代码和测试结果,帮助理解整个过程。
12 0

热门文章

最新文章

下一篇
开通oss服务