C 语言代码诗韵:数字功能的雅集华章
函数基本操作练习
主要内容:
本任务主要练习函数的申请、定义、调用等,主要包含以下功能:
1)编写函数,输入一个整数,求各个数字之和;
2)编写函数,计算1!+2!+3!+……+n!;
3)编写函数,输出m-n范围内含有数字7,但不能被7整除的所有数据;
4)编写函数,求两个整数的最大公约数和最小公倍数;
5)编写函数,设N是一个四位数,它的9倍恰好是其反序数(例如:1234的反序数是4321),求N值;
6)编写函数,判断整数是否为回文数;
7)编写函数,判断整数是否为素数;
8)编写函数,猜一个100以内的随机整数,直到猜对为止;
9)编写函数,求1-1/3+1/5-1/7+…的值,n是自己输入;
10)编写函数,根据输入的n,求an的值,其中an的计算公式是:a1=1,an=
其它要求:以上十个功能需要定义各自的功能函数;有菜单进行良好地引导操作;main函数尽量精简。程序书写规范,合理设计程序的结构,提高代码的复用性,减少冗余。
一、程序整体架构剖析
整个程序仿若一座精心构建的大厦,被合理地划分为几个关键区域:
- 菜单区:作为程序与用户交互的门户,它清晰地展示了所有可供选择的功能选项,如同餐厅的菜单一般,让用户一目了然地知晓自己能够进行何种操作。这一区域为用户提供了便捷的指引,使用户能够轻松地决定程序的执行路径。
- 主函数区:主函数恰似大厦的枢纽,承担着统筹全局的重任。它简洁而高效,主要负责接收用户在菜单中输入的选择,并依据选择精准地调用相应的功能函数。其自身代码量精简,却能有效地协调各个功能模块之间的衔接与流转。
- 函数区:这里是程序的核心功能车间,各个功能函数如同技艺精湛的工匠,分别专注于特定的任务处理。每个函数都具备独立的功能和明确的职责,从计算整数各位数字之和到判断素数,从生成特定范围内的数字序列到求解复杂的数学关系,它们各司其职,共同构建起程序丰富多样的功能体系。
- 引用区:通过引入必要的头文件,如
<stdio.h>
用于输入输出操作,<stdlib.h>
和<time.h>
为特定功能(如随机数生成)提供支持,为整个程序的运行奠定了坚实的基础,如同大厦的根基,确保各个功能模块能够顺利地施展其能力。
二、各功能函数思路解析
(一)求整数各位数字之和 - sumDigits
函数
- 首先初始化一个变量
sum
为 0,用于累加各位数字。 - 利用
while
循环,只要输入的整数num
大于 0,就执行以下操作:- 取出
num
的个位数字,通过num % 10
实现。 - 将取出的个位数字累加到
sum
中。 - 然后将
num
缩小 10 倍,即num /= 10
,以便处理下一位数字。
- 取出
- 循环结束后,
sum
中存储的就是整数num
的各位数字之和,最后将其返回。
(二)计算阶乘和 - factorialSum
函数
- 初始化总和变量
sum
为 0,以及单个阶乘变量factorial
为 1。 - 通过
for
循环从 1 到输入的n
进行迭代:- 在每次循环中,先计算当前数
i
的阶乘,即factorial *= i
。 - 然后将计算得到的阶乘值累加到总和
sum
中。
- 在每次循环中,先计算当前数
- 循环结束后,
sum
中即为 1! + 2! + 3! + …… +n
! 的结果,将其返回。
(三)输出特定范围内含数字 7 且不能被 7 整除的数据 - printNumbersWith7
函数
- 外层
for
循环遍历从m
到n
的所有整数。- 对于每个整数
i
,先将其赋值给临时变量temp
,并初始化一个标志变量has7
为 0,表示尚未发现数字 7。 - 内层
while
循环用于检查temp
中的每一位数字:- 当
temp
大于 0 时,取其个位数字判断是否为 7,如果是则将has7
设为 1 并跳出内层循环。 - 然后将
temp
缩小 10 倍,继续检查下一位数字。
- 当
- 当内层循环结束后,如果
has7
为 1 且i
不能被 7 整除,则将i
输出。
- 对于每个整数
- 所有符合条件的数字输出完毕后,换行结束输出。
(四)求最大公约数 - gcd
函数
- 采用辗转相除法,通过
while
循环,只要b
不等于 0:- 先将
b
的值暂存到temp
变量中。 - 然后计算
a
除以b
的余数,将余数赋值给b
。 - 再将之前暂存的
b
的值(即temp
)赋值给a
。
- 先将
- 当
b
为 0 时,a
中存储的就是a
和b
的最大公约数,将其返回。
(五)求最小公倍数 - lcm
函数
直接利用已求得的最大公约数gcd
,通过公式(a * b) / gcd(a, b)
计算并返回a
和b
的最小公倍数。
(六)寻找特定四位数 N 值 - findNValue
函数
- 通过
for
循环遍历从 1000 到 9999 的所有四位数。- 对于每个四位数
i
,先保存其原始值到original
变量,初始化反序数reversed
为 0,并将i
赋值给临时变量temp
。 - 利用
while
循环生成i
的反序数:每次取temp
的个位数字,将其累加到reversed
中,并将reversed
乘以 10 以便下一位数字的累加,然后将temp
缩小 10 倍。 - 当
while
循环结束后,判断original
的 9 倍是否等于reversed
,如果是则返回original
。
- 对于每个四位数
- 如果整个循环结束都未找到符合条件的数,则返回 -1。
(七)判断回文数 - isPalindrome
函数
- 保存输入的整数
num
到original
变量,初始化反序数reversed
为 0。 - 通过
while
循环,每次取num
的个位数字累加到reversed
中,并将num
缩小 10 倍。 - 循环结束后,比较
original
和reversed
是否相等,如果相等则返回 1,表示是回文数,否则返回 0。
(八)判断素数 - isPrime
函数
- 首先判断输入的
num
是否小于等于 1,如果是则直接返回 0,因为小于等于 1 的数不是素数。 - 然后通过
for
循环从 2 到num
的平方根进行迭代:- 如果
num
能被i
整除,则说明num
不是素数,直接返回 0。
- 如果
- 如果整个循环结束都未找到能整除
num
的数,则返回 1,表示num
是素数。
(九)猜数字游戏 - guessNumber
函数
- 首先使用
srand(time(NULL))
以当前时间作为随机数种子,然后生成一个 100 以内的随机整数num
。 - 通过
do - while
循环,让用户不断输入猜测的整数guess
:- 如果
guess
大于num
,则提示 “猜大了”。 - 如果
guess
小于num
,则提示 “猜小了”。 - 如果
guess
等于num
,则提示 “猜对了” 并结束循环。
- 如果
(十)求特定数列和 - seriesSum
函数
- 初始化总和变量
sum
为 0,符号变量sign
为 1。 - 通过
for
循环从 1 开始,每次递增 2 到输入的n
:- 在每次循环中,将
sign
乘以1.0 / i
的结果累加到sum
中。 - 然后改变
sign
的符号,即sign *= -1
。
- 在每次循环中,将
- 循环结束后,
sum
中存储的就是 1 - 1/3 + 1/5 - 1/7 + …… 的值,将其返回。
(十一)求an
的值 - Sum10
函数
- 初始化变量
a
为 1.0。 - 通过
while
循环,只要n
大于 1:- 根据公式
a = a / (1 + a)
更新a
的值。 - 并将
n
减 1。
- 根据公式
- 循环结束后,返回
a
的值。
三、实现代码
#include <stdio.h>
#include <stdlib.h>
#include <time.h>// 函数声明
int sumDigits(int num);
double factorialSum(int n);
void printNumbersWith7(int m, int n);
int gcd(int a, int b);
int lcm(int a, int b);
int findNValue();
int isPalindrome(int num);
int isPrime(int num);
void guessNumber();
double seriesSum(int n);
float Sum10(int n);// 主函数
int main() {int choice;int m, n;int num1, num2;int nValue;int num;int nForSeries;int nForSum10;do {// 显示菜单printf("**********************\n");printf("1. 输入一个整数,求各个数字之和\n");printf("2. 计算1!+2!+3!+……+n!\n");printf("3. 输出m-n范围内含有数字7,但不能被7整除的所有数据\n");printf("4. 求两个整数的最大公约数和最小公倍数\n");printf("5. 设N是一个四位数,它的9倍恰好是其反序数,求N值\n");printf("6. 判断整数是否为回文数\n");printf("7. 判断整数是否为素数\n");printf("8. 猜一个100以内的随机整数,直到猜对为止\n");printf("9. 求1-1/3+1/5-1/7+…的值,n是自己输入\n");printf("10.根据输入的n,求an的值\n\n");printf("0. 退出\n");printf("**********************\n");printf("请选择:");scanf("%d", &choice);switch (choice) {case 1:printf("请输入一个整数:");scanf("%d", &num);printf("该整数各个数字之和为:%d\n", sumDigits(num));break;case 2:printf("请输入n的值:");scanf("%d", &n);printf("1!+2!+3!+……+n! 的值为:%.0f\n", factorialSum(n));break;case 3:printf("请输入m和n的值(m < n):");scanf("%d %d", &m, &n);printNumbersWith7(m, n);break;case 4:printf("请输入两个整数:");scanf("%d %d", &num1, &num2);printf("最大公约数为:%d\n", gcd(num1, num2));printf("最小公倍数为:%d\n", lcm(num1, num2));break;case 5:nValue = findNValue();if (nValue != -1) {printf("满足条件的N值为:%d\n", nValue);}else {printf("未找到满足条件的N值\n");}break;case 6:printf("请输入一个整数:");scanf("%d", &num);if (isPalindrome(num)) {printf("%d是回文数\n", num);}else {printf("%d不是回文数\n", num);}break;case 7:printf("请输入一个整数:");scanf("%d", &num);if (isPrime(num)) {printf("%d是素数\n", num);}else {printf("%d不是素数\n", num);}break;case 8:guessNumber();break;case 9:printf("请输入n的值:");scanf("%d", &nForSeries);printf("1-1/3+1/5-1/7+…的值(n = %d)为:%.6f\n", nForSeries, seriesSum(nForSeries));break;case 10:printf("请输入n的值:");scanf("%d", &nForSum10);float result = Sum10(nForSum10);printf("根据输入的n,Sum10的值为:%.6f\n", result);break;case 0:printf("谢谢使用\n");break;default:printf("输入错误,请重新输入\n");}} while (choice != 0);return 0;
}// 函数定义// 求一个整数各个数字之和
int sumDigits(int num) {int sum = 0;while (num > 0) {sum += num % 10;num /= 10;}return sum;
}// 计算1!+2!+3!+……+n!
double factorialSum(int n) {double sum = 0;double factorial = 1;for (int i = 1; i <= n; i++) {factorial *= i;sum += factorial;}return sum;
}// 输出m-n范围内含有数字7,但不能被7整除的所有数据
void printNumbersWith7(int m, int n) {for (int i = m; i <= n; i++) {int temp = i;int has7 = 0;while (temp > 0) {if (temp % 10 == 7) {has7 = 1;break;}temp /= 10;}if (has7 && i % 7 != 0) {printf("%d ", i);}}printf("\n");
}// 求两个整数的最大公约数
int gcd(int a, int b) {while (b != 0) {int temp = b;b = a % b;a = temp;}return a;
}// 求两个整数的最小公倍数
int lcm(int a, int b) {return (a * b) / gcd(a, b);
}// 设N是一个四位数,它的9倍恰好是其反序数,求N值
int findNValue() {for (int i = 1000; i <= 9999; i++) {int original = i;int reversed = 0;int temp = i;while (temp > 0) {reversed = reversed * 10 + temp % 10;temp /= 10;}if (original * 9 == reversed) {return original;}}return -1;
}// 判断整数是否为回文数
int isPalindrome(int num) {int original = num;int reversed = 0;while (num > 0) {reversed = reversed * 10 + num % 10;num /= 10;}return original == reversed;
}// 判断整数是否为素数
int isPrime(int num) {if (num <= 1) {return 0;}for (int i = 2; i * i <= num; i++) {if (num % i == 0) {return 0;}}return 1;
}// 猜一个100以内的随机整数,直到猜对为止
void guessNumber() {int num, guess;srand(time(NULL));num = rand() % 100;do {printf("请猜一个100以内的整数:");scanf("%d", &guess);if (guess > num) {printf("猜大了\n");}else if (guess < num) {printf("猜小了\n");}else {printf("猜对了\n");}} while (guess != num);
}// 求1-1/3+1/5-1/7+…的值,n是自己输入
double seriesSum(int n) {double sum = 0;int sign = 1;for (int i = 1; i <= n; i += 2) {sum += sign * (1.0 / i);sign *= -1;}return sum;
}// 根据输入的n,求an的值\n
float Sum10(int n)
{double a = 1.0;while (n > 1){a = a / (1 + a);n = n - 1;}return a;
}
相关文章:

C 语言代码诗韵:数字功能的雅集华章
函数基本操作练习 主要内容: 本任务主要练习函数的申请、定义、调用等,主要包含以下功能: 1)编写函数,输入一个整数,求各个数字之和; 2)编写函数,计算1!2&…...

ps案例制作
宣传海报 暖色调海报商品展示图...

【C++】列表初始化、声明、范围for、array容器
列表初始化、声明、范围for、array容器 一、统一的列表初始化1.1 使用{ }初始化1.2 initializer_list容器 二、声明2.1 auto关键字2.2 decltype关键字2.3 nullptr关键字 三、范围for四、array容器和forward_list容器 一、统一的列表初始化 1.1 使用{ }初始化 在C98中…...

C++智能指针详解
一、智能指针简介 智能指针是一个类似于指针的类,将指针交给这个类对象进行管理,我们就可以像使用指针一样使用这个类,并且它会自动释放资源。 智能指针运用了 RAII 的思想(资源获得即初始化)。RAII 是指,用对象的生命周期来管理资…...

基础库正则表达式
我们已经可以用requests 库来获取网页的源代码,得到 HTML 代码。但我们真正想要的数据是包含在 HTML代码之中的,要怎样才能从 HTML,代码中获取想要的信息呢?正则表达式就是其中一个有效的方法。 本篇博客我们将了解一下正则表达式的相关用法。正则表达…...

【spring专题】spring如何解析配置类和扫描包路径
文章目录 目标重要的组件加载配置类启动解析组件定位配置类解析配置类 扫描过程总结 目标 这是我们使用注解方式启动spring容器的核心代码 AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(MyConfig.class); User user (Us…...

MyBatis框架的入门
目录 MyBatis第一章:框架的概述1. MyBatis框架的概述 第二章:MyBatis的入门程序1. 创建数据库和表结构2. MyBatis的入门步骤 MyBatis 第一章:框架的概述 1. MyBatis框架的概述 MyBatis是一个优秀的基于Java的持久层框架,内部对…...

代码随想录D22-23 回溯算法01-02 Python
理论回顾 回溯法也可以叫做回溯搜索法,它是一种搜索的方式。回溯是递归的副产品,只要有递归就会有回溯。 回溯的本质是穷举,穷举所有可能,然后选出我们想要的答案,如果想让回溯法高效一些,可以加一些剪枝…...

【网络云计算】2024第50周-每日【2024/12/13】小测-理论-写10个Bash Shell脚本-解析
文章目录 1. 计算1到100的和2. 列出当前目录下所有文件和文件夹3. 检查文件是否存在4. 备份文件到指定目录(简单示例)5. 打印系统当前日期和时间6. 统计文件中的行数7. 批量重命名文件(将.txt后缀改为.bak)8. 查找进程并杀死&…...

MATLAB转换C语言--问题(一)FFT 和 IFFT 的缩放因子
1. MATLAB 中的 FFT 和 IFFT 在 MATLAB 中,fft 和 ifft 函数具有以下缩放行为: fft:执行快速傅里叶变换(FFT),不进行缩放。ifft:执行逆快速傅里叶变换(IFFT),…...

轻松上手:使用 Vercel 部署 HTML 页面教程
😀 在学习前端的过程中,部署项目往往是一个令人头疼的问题。然而,Vercel 为我们提供了一个便捷且免费的解决方案。 Vercel 是一个强大的云平台,专门用于前端项目的部署和托管。它不仅支持多种前端框架和静态网站生成器࿰…...

如何运用 HTM?
一、HTM 概述 HTM(Hierarchical Temporal Memory,分层时序记忆)是一种基于神经科学原理构建的计算模型,旨在模拟大脑的学习和记忆机制,以处理复杂的时间序列数据和模式识别任务。它具有独特的架构和算法,能…...

12.16【net】【study】
路由表是路由器或者其他互联网网络设备上存储的一张表,它记录了到达特定网络目的地的路径。路由表中的每一行(即一个路由条目)包含了目的地网络地址、子网掩码、下一跳地址、出接口等信息。 Destinations(目的地)和 R…...

2023和2024历年美赛数学建模赛题,算法模型分析!
文末获取历年优秀论文解析,可交流解答 2023年题目分析 MCM(Mathematical Contest in Modeling) 问题 A:遭受旱灾的植物群落 概述:要求建立预测模型,模拟植物群落在干旱和降水充裕条件下随时间的变化。类…...

Node.js内置模块
1.内置模块 Node.js的中文网参考手册:https://nodejs.cn//api 帮助文档 API文档:查看对应的模块,左边是模块,右边是模块的成员 源码:https://github.com/nodejs/node/tree/main/lib 查看 例如: http.js 创建web服务器的模块 -->进入源码中,搜索…...

测评|携程集团25年社招在线测评北森题库、真题分析、考试攻略
携程集团社招入职测评北森题库主要考察以下几个方面: 1. **言语理解**:这部分主要测试应聘者运用语言文字进行思考和交流、迅速准确地理解和把握文段要旨的能力。 2. **资料分析**:包括文字题和图表题,考察应聘者快速找出关键信息…...

快速启动Go-Admin(Gin + Vue3 + Element UI)脚手架管理系统
Go-Admin 是一个基于 Gin Vue Element UI & Arco Design & Ant Design 的前后端分离权限管理系统脚手架。它包含了多租户支持、基础用户管理功能、JWT 鉴权、代码生成器、RBAC 资源控制、表单构建、定时任务等功能。该项目的主要编程语言是 Go 和 JavaScript。 ps&a…...

数据分流:优化数据处理流程的关键策略
引言 在大数据时代,企业面临着数据量的激增和数据类型的多样化。为了有效地管理和分析这些数据,数据分流成为了一个重要的策略。数据分流指的是将数据按照特定的规则和流程分配到不同的处理路径,以优化数据处理效率和准确性。本文将探讨数据…...

RabbitMQ如何构建集群?
大家好,我是锋哥。今天分享关于【RabbitMQ如何构建集群?】面试题。希望对大家有帮助; RabbitMQ如何构建集群? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 在RabbitMQ中,集群(Cluster&#x…...

RNN LSTM Seq2Seq Attention
非端到端: data -》 cleaning -》 feature Engining (70%-80%工作 设计特征)-》 分类器 -》预测 端到端 End-to-End: data -》 cleaning -》Deep learning(表示学习,从数据中学习特征) -》…...

硬件设计-ADC和低本底噪声为何至关重要
简介 在工程领域,精度是核心要素。无论是对先进电子设备执行质量和性能检测,还是对复杂系统进行调试,测量精度的高低都直接关系到项目的成功与否。这时,示波器中的垂直精度概念就显得尤为重要,它衡量的是电压与实际被…...

个性化域名配置
1 申请免费SSL证书 访问 https://certbot.eff.org ,可申请 通配符证书,每次申请可以使用3个月,到期可以免费续期。 2 配置nginx server index.conf 配置如下: server {listen 80;server_name biwow.com www.biwow.com;return …...

uniapp中打包应用后,组件在微信小程序和其他平台实现不同的样式
今天,我们来介绍一下,uniapp中如何实现打包应用后,组件在微信小程序和其他平台不同的样式,在这里,我们使用背景颜色进行演示,使用 UniApp 提供的 uni.getSystemInfoSync() 方法来获取系统信息,包…...

MRI脑肿瘤检测数据集,使用500张原始图片标注,支持yolo,coco,voc格式
MRI脑肿瘤检测数据集,使用500张原始图片标注,支持yolo,coco,voc格式 数据集下载: https://download.csdn.net/download/pbymw8iwm/90125474 https://download.csdn.net/download/pbymw8iwm/90125473 https://downl…...

JumpServer开源堡垒机搭建及使用
目录 一,产品介绍 二,功能介绍 三,系统架构 3.1 应用架构 3.2 组件说明 3.3 逻辑架构 3.3 逻辑架构 四,linux单机部署及方式选择 4.1 操作系统要求(JumpServer-v3系列版本) 4.1.1 数据库 4.1.3创建数据库参考 4.2 在线安装 4.2.1 环境访问 4.3 基于docker容…...

Java 编程旅程(二)
在前一篇博客中,我们介绍了 Java 编程的基础知识和入门步骤。现在,我们将继续深入探讨 Java 的一些高级特性,以帮助你进一步提升编程技能。通过这篇博客,你将学习到更复杂的概念和技术,比如面向对象编程(OO…...

一、springcloud 入门——笔记
1. 学习之前要知道的 springcloud 应用的技术 2. springboot 和 springcloud 的版本选型 官网介绍:https://spring.io/projects/spring-cloud/#overview 生成新的Spring Cloud项目 最简单的入门方法是访问start.spring.io,选择您的Spring Boot版本和要使…...

思考:VSCode 的宏观工作原理 快速入门 VSCodium (****)
23个常用的VSCode快捷键(动图演示)> https://www.php.cn/faq/441696.html VSCodium AppImage 版 使用记录 https://blog.csdn.net/ken2232/article/details/143591323 **** 初步比较:VSCode > pk < VSCodium << 在下…...

C++ day8——模版
笔记脑图 作业 template <class T> class mylist{ public:// 这是一个链表的节点struct Link{T val;Link* next; } 增 :insert(T val) 在链表中创建新节点,节点上保存的数据为 val删:remove(T val) 移除链表中数据为 val 的节点改…...

【CSS in Depth 2 精译_080】 13.1:CSS 渐变效果(中)——不同色彩空间的颜色插值算法在 CSS 渐变中的应用
当前内容所在位置(可进入专栏查看其他译好的章节内容) 第四部分 视觉增强技术 ✔️【第 13 章 渐变、阴影与混合模式】 ✔️ 13.1 渐变 ✔️ 13.1.1 使用多个颜色节点(上)13.1.2 颜色插值方法(中) ✔️13.1…...