C语言基础入门案例(1)

news2024/11/14 1:42:59

目录

第一题:实现大衍数列的打印

第二题:生成所有由1、2、3、4组成的互不相同且无重复数字的三位数,并计算总数

第三题:整数加法计算器

第四题:实现一个范围累加和函数

第五题:编写一个函数计算整数的阶乘


第一题:实现大衍数列的打印

描述:

大衍数列是中国古代文献中记载的一种数列,主要用于解释中国传统文化中的太极衍生原理。该数列遵循特定的规律生成,其中偶数项是序号平方的一半,奇数项是序号平方减1后再除以2。

要求:

编写一个程序,实现大衍数列的生成,并打印出前100项。

输入:

输出:
打印出大衍数列的前100项,每个数字占一行。

示例:
输出应为:
0
2
4
8
12
18
...
(此处省略后续项,直至打印出前100项)

提示:

  1. 你可以使用循环结构来生成数列的每一项。
  2. 根据大衍数列的规律,偶数项和奇数项的计算方式不同,你需要在循环中判断当前序号的奇偶性,然后分别进行计算。
  3. 记得初始化变量,并在每次循环结束后将序号加1,直到打印出前100项为止。

代码实现:

#include <stdio.h>

int main()
{
    /*
    题目:中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。
    它的前几项是:0、2、4、8、12、18、24、32、40、50 …
    其规律是:对偶数项,是序号平方再除2,奇数项,是序号平方减1再除2。
    请据此编写代码实现打印大衍数列的前100项。
    程序分析:使用循环迭代变量 i,从1到100。在每次迭代中,如果 i 是偶数,
    则打印 i 的平方除以2;如果 i 是奇数,则打印 i 的平方减1再除以2。
    */

    for (int i = 1; i <= 100; i++) // 循环从1到100
    {
        if (i % 2 == 0) // 如果i是偶数
        {
            printf("偶数:%d", i * i / 2); // 打印i的平方除以2的结果,并标记为“偶数”
        }
        else // 如果i是奇数
        {
            printf("奇数:%d", (i * i - 1) / 2); // 打印i的平方减1后除以2的结果,并标记为“奇数”
        }
    }

    return 0;
}

运行结果:

第二题:生成所有由1、2、3、4组成的互不相同且无重复数字的三位数,并计算总数

描述:
给定四个数字1、2、3、4,我们需要生成所有可能的三位数,这些三位数需要满足以下条件:

  1. 每一位上的数字都不能重复。
  2. 三位数是一个完整的数字,不能拆分。

要求:
编写一个程序,生成所有满足条件的三位数,并计算它们的总数。每个生成的三位数应单独输出,并且总数应在程序最后输出。

输出:
输出所有满足条件的三位数,每个数字占一行。最后输出总数。

示例:
输出应为:
123
124
132
134
142
143
213
214
...
(此处省略后续项)
总数:24

提示:

  1. 你可以使用嵌套循环来遍历所有可能的组合。
  2. 在每个循环中,检查当前数字是否已经被使用过,如果是,则跳过该组合。
  3. 对于每个有效的组合,将其转换为整数并输出。
  4. 使用一个计数器来记录有效组合的总数,并在程序最后输出。

代码实现:

#include <stdio.h>

int main()
{
    /*
    题目:有 1、2、3、4 四个数字,能组成多少个互不相同且无重复数字的三位数?分别都是多少?
    程序分析:可填在百位、十位、个位的数字都是 1、2、3、4,
    组成所有的排列后再去掉不满足条件的排列。
    */
   // 记录总数
    int sum = 0;

    // 第一层循环,i从1遍历到4
    for (int i = 1; i < 5; i++)
    {
        // 第二层循环,j从1遍历到4
        for (int j = 1; j < 5; j++)
        {
            // 第三层循环,k从1遍历到4
            for (int k = 1; k < 5; k++)
            {
                // 判断i、j、k这三个数是否都不相同
                if (i != j && i != k && j != k)
                {
                    // 如果都不相同,则打印这三个数
                    printf("%d  %d  %d\n", i, j, k);
                    sum ++ ;
                }
            }
        }
    }

    printf("总数为:%d\n", sum);

    return 0;
}

运行结果:

第三题:整数加法计算器

描述:
编写一个程序,要求用户输入两个整数,然后计算并输出它们的和。输出的格式应为“xx + xx = xx”,其中“xx”代表用户输入的整数和它们的和。

要求:

  1. 程序应首先提示用户输入第一个整数。
  2. 读取用户的输入,并将其转换为整数类型。
  3. 程序应再次提示用户输入第二个整数。
  4. 同样读取用户的输入,并转换为整数类型。
  5. 计算两个整数的和。
  6. 按照“xx + xx = xx”的格式输出结果,其中“xx”为实际输入的整数和它们的和。

示例:
假设用户输入的第一个整数是5,第二个整数是3,则程序的输出应为:
5 + 3 = 8

提示:

  1. 可以使用Python的input()函数来获取用户的输入,并通过int()函数将其转换为整数。
  2. 使用字符串格式化或拼接来构建输出格式。

代码实现:

#include <stdio.h>

int main()
{
    //  编写一个程序,要求用户输入两个整数,然后输出它们的和,输出格式为:xx + xx = xx

    // 0. 定义变量保存数字
    int num_1;
    int num_2;
    // 1. 用户输入第一个数
    printf("请输入第一个数:");
    scanf("%d", &num_1);
    // 2. 用户输入第二个数
    printf("请输入第二个数:");
    scanf("%d", &num_2);
    // 3. 计算两个数字的和
    int sum = num_1 + num_2;
    // 4. 打印
    printf("%d + %d = %d\n", num_1, num_2, sum);

    return 0;
}

运行结果:

第四题:实现一个范围累加和函数

描述:编写一个函数,接受2个int参数作为参数,计算第一个参数~第二个参数范围的累加和,并返回累加的结果。

要求:

  1. 编写scope函数,实现累加和的计算逻辑。
  2. main函数中调用scope函数,并打印出累加和的结果。
  3. 测试scope函数在不同输入参数下的正确性,包括start小于end、start大于end以及start等于end的情况。

示例:

调用scope(1, 6)时,计算1到6的累加和,结果为1+2+3+4+5+6=21。

调用scope(5, 1)时,计算5到1的累加和,由于5大于1,所以实际上是计算1到5的累加和,结果为15。

调用scope(4, 4)时,由于num1等于num2,直接返回两数之和,即4+4=8。

提示:

  1. scope函数中,根据start和end的大小关系,使用循环遍历范围内的整数并累加。
  2. 考虑到循环中使用的变量sum需要在循环之外进行初始化,并初始化为0,以避免未定义行为。
  3. main函数中,调用scope函数并打印结果时,可以使用printf函数进行输出。

 代码实现:

#include <stdio.h>
// 编写一个函数,接受2个int参数作为参数,计算第一个参数~第二个参数范围的累加和,并返回累加的结果
int scope(int start, int end)
{
    // 1. 定义一个变量接收结果
    int sum = 0;

    // 2. start 比 end 小
    if (start < end)
    {
        for (int i = start; i <= end; i++)
        {
            sum += i;
        }
    }
    // 3. end 比 start 大
    else if (start > end)
    {
        for (int i = end; i <= start; i++)
        {
            sum += i;
        }
    }
    else
    {
        // 4. 两数相等
        sum = start+ end;
    }

    return sum;
}

int main()
{
    // 调用
    printf("结果为:%d\n", scope(1, 6));
    printf("结果为:%d\n", scope(5, 1));
    printf("结果为:%d\n", scope(4, 4));
    return 0;
}

运行结果:

第五题:编写一个函数计算整数的阶乘

描述:
编写一个函数,该函数接受一个整数作为参数,并计算该整数的阶乘值。阶乘表示一个整数与所有小于它的正整数的乘积。例如,5的阶乘(记作5!)是5 * 4 * 3 * 2 * 1 = 120。

要求:

  1. 函数应接收一个整数作为参数。
  2. 函数应计算该整数的阶乘值。
  3. 如果输入的整数为负数或零,函数应返回错误信息或适当处理,因为负数和非零整数的阶乘在数学上没有定义。
  4. 函数应返回计算得到的阶乘值。

示例:
假设函数名为calculate_factorial,调用calculate_factorial(5)应返回120。
调用calculate_factorial(0)calculate_factorial(-3)应返回错误信息或适当处理,因为0和负数的阶乘没有定义。

提示:

方式一(循环):

  1. 可以使用循环结构来逐步计算阶乘值。从1开始,逐步乘以比当前数小的每个整数,直到达到输入的整数。
  2. 在计算阶乘时,要注意处理输入为0或负数的情况,以避免计算错误或无限循环。

方式二(递归):

  1. 递归函数的基本思想是将大问题分解为小问题,然后逐步解决小问题,直到达到基本情况(即递归终止条件)。
  2. 在计算阶乘的递归函数中,基本情况是当输入的整数为1时,返回1(因为1的阶乘是1)。
  3. 对于其他大于1的整数,递归函数可以调用自身来计算n-1的阶乘,然后将结果乘以n。
  4. 需要注意递归函数的调用栈深度,避免因为输入过大的整数而导致栈溢出。

代码实现:

方式一(循环):

#include <stdio.h>
// 编写一个函数,接受一个整数作为参数,计算并返回它的阶乘值
int calculate_factorial(int num)
{
    // 校验;
    if (num <= 0)
    {
        return 0;
    }

    // 定义变量保存结果 初始化为 1
    int result = 1;
    for (int i = num; i >= 1; i--)
    {
        result *= i;
    }
    return result;
}
int main()
{
    int result = calculate_factorial(5);

    // int result = calculate_factorial(0);   // 失败示例代码

    if (result == 0)
    {
        printf("%s\n", "0和负数的阶乘没有定义");
    }
    else
    {
        printf("%d\n", result);
    }
    return 0;
}

方式二(递归):

int calculate_factorial(int num)
{
    // 校验;
    if (num <= 0)
    {
        return 0;
    }

    /*
    5阶乘值:5*4*3*2*1
      n阶乘值:n*(n-1)*(n-2)……2*1
       */
    if (num == 1)
    {
        return 1;
    }
    // num * stage(num - 1)
    return num * calculate_factorial(num - 1);
}
int main()
{
    int result = calculate_factorial(5);

    // int result = calculate_factorial(-3);
    if (result == 0)
    {
        printf("%s\n", "0和负数的阶乘没有定义");
    }
    else
    {
        printf("%d\n", result);
    }
    return 0;
}

 运行结果:

成功:

失败:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1596486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Webscoket简单demo介绍

前言 WebSocket 是从 HTML5 开始⽀持的⼀种⽹⻚端和服务端保持⻓连接的 消息推送机制. 理解消息推送: 传统的 web 程序, 都是属于 “⼀问⼀答” 的形式. 客⼾端给服务器发送了⼀个 HTTP 请求, 服务器给客 ⼾端返回⼀个 HTTP 响应.这种情况下, 服务器是属于被动的⼀⽅. 如果客⼾…

分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测

分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测 目录 分类预测 | Matlab实现OOA-BP鱼鹰算法优化BP神经网络数据分类预测分类效果基本介绍程序设计参考资料 分类效果 基本介绍 1.Matlab实现OOA-BP鱼鹰算法优化BP神经网络多特征分类预测&#xff08;完整源码和数…

Win7开机进不了系统一直再自动修复,只能选禁用驱动签名才能进系统 其它模式都不行

环境&#xff1a; Win7专业版 问题描述&#xff1a; Win7开机进不了系统一直再修复&#xff0c;只能选禁用驱动签名才能进系统 其它模式都不行 解决方案&#xff1a; 1.开机按F8&#xff0c;选择禁用驱动签名进系统 2.查看系统日志文件定位错误原因 3.我这是DsArk64.sys导…

JS-32-jQuery01-jQuery的引入

一、初识jQuery jQuery是JavaScript世界中使用最广泛的一个库。鉴于它如此流行&#xff0c;又如此好用&#xff0c;所以每一个入门JavaScript的前端工程师都应该了解和学习它。 jQuery是一个优秀的JS函数库。 &#xff08;对BOM和DOM的封装&#xff09; jQuery这么流行&#x…

Flink设计运行原理 | 大数据技术

⭐简单说两句⭐ ✨ 正在努力的小新~ &#x1f496; 超级爱分享&#xff0c;分享各种有趣干货&#xff01; &#x1f469;‍&#x1f4bb; 提供&#xff1a;模拟面试 | 简历诊断 | 独家简历模板 &#x1f308; 感谢关注&#xff0c;关注了你就是我的超级粉丝啦&#xff01; &…

计算机毕业设计springboot小区物业报修管理系统m8x57

该物业报修管理系统实施的目的在于帮助物业管理企业升级员工管理、住户管理、报修问题管理等内部管理平台&#xff0c;整合物业管理企业物力和人力&#xff0c;全面服务于维修人员管理的内部管理需求,并重视需求驱动、管理创新、与业主交流等外部需求,通过物业管理企业各项资源…

ArrayList部分底层源码分析

JDK版本为1.8.0_271&#xff0c;以插入和删除元素为例&#xff0c;部分源码如下&#xff1a; // 部分属性 transient Object[] elementData; // 底层数组 private int size; // 记录元素个数 private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA {}; // 空Obje…

异地组网怎么安装?

异地组网安装是指在不同地域的多个设备之间建立网络连接&#xff0c;以便实现数据传输和协同工作的过程。在如今的数字化时代&#xff0c;异地组网安装已经成为了许多企业和组织所必需的一项技术。 天联的使用场景 在异地组网安装中&#xff0c;天联是一种常用的工具。它具有以…

得物 Zookeeper SLA 也可以 99.99% | 得物技术

一、背景 ZooKeeper&#xff08;ZK&#xff09;是一个诞生于2007年的分布式应用程序协调服务。尽管出于一些特殊的历史原因&#xff0c;许多业务场景仍然不得不依赖它。比如&#xff0c;Kafka、任务调度等。特别是在 Flink 混合部署 ETCD 解耦 时&#xff0c;业务方曾要求绝对…

网络与系统攻防技术实验及实验报告

1.实验内容 正确使用msf编码器&#xff0c;veil-evasion&#xff0c;自己利用shellcode编程等免杀工具或技巧 正确使用msf编码器&#xff0c;使用msfvenom生成如jar之类的其他文件veil&#xff0c;加壳工具使用C shellcode编程 通过组合应用各种技术实现恶意代码免杀 如果成功…

多目标跟踪 | 基于anchor-free目标检测+ReID的实时一阶多类多目标跟踪算法实现

项目应用场景 面向多目标检测跟踪场景&#xff0c;项目采用 anchor-free 目标检测ReID 的实时一阶段多类多目标跟踪算法实现&#xff0c;效果嘎嘎好。 项目效果 项目细节 > 具体参见项目 README.md (1) 类别支持 1~10 object classes are what we need non-interest-…

智能热流体仿真软件AICFD 2024R1新版本功能介绍

AICFD是由天洑软件自主研发的一款通用的智能热流体仿真软件。软件引入AI技术&#xff0c;具备智能问答、智能加速、智能预测等特色功能&#xff0c;解决用户在传统CFD软件中遇到的“网格划分繁、求解设置难、仿真计算慢”等痛点&#xff0c;使设计师和工程师可以专注于业务本身…

AI大模型语言开源大语言模型完整列表

开源大语言模型完整列表 Large Language Model (LLM) 即大规模语言模型&#xff0c;是一种基于深度学习的自然语言处理模型&#xff0c;它能够学习到自然语言的语法和语义&#xff0c;从而可以生成人类可读的文本。 所谓"语言模型"&#xff0c;就是只用来处理语言文…

WP免费主题下载

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html 免费WP主题 蓝色简洁实用的wordpress免费主题模板&#xff0c;免费主题资源分享给大家。 https://www.wpniu.com/…

如何查找overlayfs对应的POD如何根据pod找到containerd id

如何查找overlayfs对应的POD mount |grep overlayfs | grep 1738 ctr -n k8s.io c list | grep 11ac4083419be11174746b68d018a0a402d9ae43c6b52125810fe1ec7db63bc6 查找目录并统计大小 find / -name "jfsCache" -exec du -sh {} | sort -rh如何根据pod找到c…

配置IP地址并验证连通性

1.实验环境 主机 A和主机 B通过一根网线相连&#xff0c;如图6.13所示。 图6.13 实验案例一示意图 2.需求描述 为两台主机配置!P地址&#xff0c;验证P地址是否生效&#xff1b;验证同一网段的两台主机可以互通&#xff0c;不同网段的主机不能直接互通。 3.推荐步骤 为两台…

笔记软件功能多样的是哪款?做笔记的软件哪个好用

在快节奏的现代生活中&#xff0c;笔记软件已成为我们提高工作效率、记录生活点滴的重要工具。想象一下&#xff0c;在繁忙的工作中&#xff0c;你能够快速记录下关键信息&#xff0c;或在灵感迸发时及时捕捉&#xff0c;这是多么方便高效。 一款功能多样的笔记软件&#xff0…

JAVA-贪吃蛇(源代码)

游戏界面: 图片素材: 背景图片 蛇身 食物 蛇头 标题 源代码: 运行界面 package com.snake.game;public class snakeApp {public static void main(String[] args) {//添加界面new snakeJFrame();} }游戏界面类JFrame package com.snake.game;import javax.swing.*; import …

WEB前端-用户注册倒计时

<body><textarea name"" id"" cols"30" rows"10">用户注册协议欢迎注册成为京东用户&#xff01;在您注册过程中&#xff0c;您需要完成我们的注册流程并通过点击同意的形式在线签署以下协议&#xff0c;请您务必仔细阅读…

腾讯EdgeOne产品测评体验——多重攻击实战验证安全壁垒:DDoS攻击|CC压测|Web漏洞扫描|SQL注入

腾讯EdgeOne产品测评体验——实战验证安全壁垒&#xff1a;DDoS攻击|CC压测|Web漏洞扫描|SQL注入 写在最前面一、产品概述1.1 什么是边缘安全加速平台 EO&#xff1f;1.2 EdgeOne产品功能 二、准备工作2.1 选择&#xff1a;NS&#xff08;Name Server&#xff09;接入模式或 CN…