编写C语言程序解决多个数学问题及修正斐波那契数列递归函数

 

目录

请按下列要求编写程序:(三个函数均在一个C语言源程序)

有一个四位整数,它的9倍恰好是其反序数(反序数例:1234与4321互为反序数)。

有3个非零十进制数字,用它们可以组合出6个不同的三位数,这些三位数的和是2886。如果将这3个数字按从大到小和从小到大的顺序依次排列成两个三位数,它们的差是396。

目的是找到一个三位数组合,这个组合满足两个条件:

用一组整数验证命题:“任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数字与个位数字交换得到n2;求n1与n2差的绝对值得到n3;将n3的百位数字与个位数字交换得到n4;求n3与n4的和得到n5,n5一定是1089。若n1、n3是一位数或两位数,则在高位补0使其成为三位数。”

(改错题)给定函数fun的功能是:用递归算法计算斐波那契数列中第n项的值。从第1项起,斐波那契数列为:1、1、2、3、5、8、13、21、……。

输入测试数据:6

程序运行结果:8

问题解释与修正


请按下列要求编写程序:(三个函数均在一个C语言源程序)

【要求】

1)编写函数int add(int a,int b),其功能是求出a和b的和并返回。

2)编写函数int sub(int a,int b),其功能是求出a和b的差并返回。

3)编写主函数,输入x,y,然后分别调用add函数、sub函数求出x和y的和、差并输出。

输入测试数据:40 30

程序运行结果:40+30=70

               40-30=10这行代码引入了标准输入输出库,使得程序可以使用printfscanf等函数。

#include <stdio.h>
int add(int a, int b) {return a + b;
}
int sub(int a, int b) {return a - b;
}
int main() {int x, y;printf("请输入两个整数 x 和 y:");scanf("%d %d", &x, &y);int sum = add(x, y);printf("x 和 y 的和为:%d\n", sum);int difference = sub(x, y);printf("x 和 y 的差为:%d\n", difference);return 0;
}

加法函数

int add(int a, int b) {
return a + b;
}

这是一个名为add的函数,它接收两个整数参数ab,并返回它们的和。

减法函数

int sub(int a, int b) {
return a - b;
}

这是一个名为sub的函数,它接收两个整数参数ab,并返回它们的差(即a减去b)。

主函数

int main() {
...
return 0;
}

主函数是C程序的入口点。当程序运行时,它首先执行main函数中的代码。

变量声明

int x, y;

在主函数中,我们声明了两个整数变量xy,用于存储用户输入的两个整数。

接收用户输入

printf("请输入两个整数 x 和 y:");
scanf("%d %d", &x, &y);

使用printf函数,我们向用户显示一个提示消息,告诉他们应该输入两个整数。然后,使用scanf函数,我们读取用户输入的两个整数,并将它们存储在变量xy中。

计算和与差

int sum = add(x, y);
printf("x 和 y 的和为:%d\n", sum);
int difference = sub(x, y);
printf("x 和 y 的差为:%d\n", difference);

首先,我们调用add函数来计算xy的和,并将结果存储在变量sum中。然后,我们使用printf函数将结果打印到屏幕上。

接着,我们调用sub函数来计算xy的差,并将结果存储在变量difference中。然后,我们再次使用printf函数将结果打印到屏幕上。


主函数最后返回0,表示程序成功执行。在C语言中,main函数返回0通常表示程序正常结束,而非零值表示发生了某种错误。

允许用户输入两个整数,并计算这两个整数的和与差,然后将结果打印到屏幕上。

 第二个

有一个四位整数,它的9倍恰好是其反序数(反序数例:12344321互为反序数)。

【要求】

1)编写函数首部为int findint n)的子函数,其功能是判断整数n9倍是否为n的反序数,若是则函数返回这个反序数,否则返回0(用if语句)。

2)编写主函数,穷举(用循环)所有的四位数并调用函数find,找出满足上述条件的四位数,将找到的数及其反序数输出。

程序运行结果:1089-->  9801

#include <stdio.h>
int find(int n){int reverse = 0;int original = n;while (n != 0) {reverse = reverse * 10 + n % 10;n /= 10;}if (9 * original == reverse) {return reverse;} else{return 0;}
}int main() 
{printf("其中满足条件的四位数及其反序数为:\n");int i;for (i = 1000; i <= 9999; i++) {int result = find(i);if (result != 0) {printf("%d 和 %d\n", i, result);}}return 0;
}

用于找出所有满足以下条件的四位数:其数字的反序数(即将数字翻转后得到的数)是原数的9倍。

逐步解释这个程序:

find 函数

int find(int n)
{
int reverse = 0;
int original = n;
// ...
}

此函数接受一个整数n作为参数,并试图找出其反序数。

  • 使用reverse来保存反序数的值。
  • 使用original来保存原始数(因为n在循环中会被修改)。

while循环中,程序通过取n的个位数(n % 10)并将其添加到reverse的末尾(通过乘以10并加上新的个位数)来反转数字。然后,它更新n以移除其最后一位。

reverse = reverse * 10 + n % 10; // 每次循环,将n的最后一位加到reverse的末尾

最后,函数检查反序数是否是原始数的9倍。如果是,则返回反序数;否则,返回0。

main 函数

int main()
{
// ...
for (i = 1000; i <= 9999; i++) {
int result = find(i);
if (result != 0) {
printf("%d 和 %d\n", i, result);
}
}
// ...
}

main函数中,程序遍历从1000到9999的所有整数(即所有的四位数)。对于每个数,它调用find函数来检查是否满足条件。如果find函数返回非零值(即找到了一个满足条件的反序数),则打印该数和其反序数。

总结:该程序会打印出所有满足条件的四位数及其反序数,其中反序数是原数的9倍。例如,数字1089满足这个条件,因为它的反序数是9801,而98011089的9倍。

3个非零十进制数字,用它们可以组合出6个不同的三位数,这些三位数的和是2886。如果将这3个数字按从大到小和从小到大的顺序依次排列成两个三位数,它们的差是396

【要求】

1) 试编写函数首部为void func(int a[])的子函数,找出这三个数字,并存放在数组a中;

2) 在主函数中调用函数func,并将结果数组中每个元素的值输出

程序运行结果:2  5  6

#include <stdio.h>
main()
{int func(int a[3]);int i,a[3];func(a);for(i=0;i<3;i++)printf("%d ",a[i]);
}
int func(int a[3])
{int x,y,z;for (x=1;x<=9;x++)for(y=x+1;y<=9;y++)for(z=y+1;z<=9;z++)if((x+y+z)*222==2886&&((z*100+y*10+x)-(x*100+y*10+z)==396)){a[0]=x;  a[1]=y;  a[2]=z;}
}

目的是找到一个三位数组合,这个组合满足两个条件:

  1. 这三个数字(设为x, y, z)的和乘以222等于2886。
  2. 这三个数字组成的一个三位数(zxy)与另一个三位数(xyz)的差是396。

 修改后的代码:

#include <stdio.h>
#include <math.h>
#define N 10

这里引入了stdio.h用于输入输出,但实际上math.h并没有在程序中用到。#define N 10定义了一个宏,表示数组的大小。

函数fun

int fun(int a[], int b[], int n) {
...
}

这个函数接受三个参数:一个整数数组a,一个整数数组b用于存储满足条件的元素的索引,以及一个整数n表示数组a的大小。

  • 它遍历数组a中的每个元素。
  • 对于每个元素,如果它大于999,则跳过它(因为大于999的数字在反转和相减后不可能得到1089)。
  • 如果元素小于或等于999,它首先反转该数字,然后计算原始数字与反转数字之间的差的绝对值,再反转这个差,最后将差的绝对值与反转的差相加。
  • 如果这个和等于1089,那么该元素的索引就被存储在数组b中。
  • 函数返回满足条件的元素的数量。
  • 主函数main
 
void main() {
...
}
  • 它定义了两个整数数组ab,以及一个整数n
  • 数组a被初始化为10个整数。
  • 调用fun函数,将数组abN作为参数传递,并将返回值存储在n中。
  • 使用一个循环遍历数组b的前n个元素,并使用这些索引从数组a中打印出相应的元素。

用一组整数验证命题:“任意一个百位数字与个位数字不同的三位正整数n1在经过以下操作后一定会变换到1089:将n1的百位数字与个位数字交换得到n2;求n1n2差的绝对值得到n3;将n3的百位数字与个位数字交换得到n4;求n3n4的和得到n5n5一定是1089。若n1n3是一位数或两位数,则在高位补0使其成为三位数。”

例如:n1123n2321n3198321123),n4891n51089198891

【要求】

(1)编写函数首部为int fun(int a[],int b[],int n)的子函数,其功能是用a指向数组的前n个整数验证上述命题,将所有符合命题的整数所在数组元素的下标依次保存到b指向的数组中,函数返回b数组中数据的个数。

(2)编写main函数,声明a数组并用测试数据初始化,用a数组作为实参调用fun函数,输出a数组中所有符合命题的整数。

输入测试数据:123  765  1  45  121  1345  131  67  696  3689

程序运行结果:123  765  1  45  67

#include <stdio.h>
#include<math.h>
#define N 10
int fun(int a[], int b[], int n) {int i,n1,n2,n3,n4,n5,s=0;for (i = 0; i < n; i++) {if (a[i]>999) continue;else {n1=a[i];n2 = (n1 % 10) * 100 + (n1 / 10 % 10) * 10 + (n1 / 100);n3 = fabs (n2 - n1);n4 = (n3 % 10) * 100 + (n3 / 10 % 10) * 10 + (n3 / 100);n5 = n3 + n4;if (n5 == 1089) {b[s] = i; s++; }}}return(s); 
}void main() {int a[N] = {123, 765, 1, 45, 121, 1345, 131, 67, 696, 3689};int i,n,b[N]; n=fun(a,b,N);for (i = 0; i < n; i++) {printf("%5d ", a[b[i]]);}
}

(改错题)给定函数fun的功能是:用递归算法计算斐波那契数列中第n项的值。从第1项起,斐波那契数列为:1123581321……

输入测试数据:6

程序运行结果:8

【要求】

  1. 将上述程序录入到文件115.c中,根据题目要求及程序中语句之间的逻辑关系对程序中的错误进行修改。
  2. 题中用“/******found******/”来提示在下一行有错。
  3. 改错时,可以修改语句中的一部分内容,调整语句次序,增加少量的声明或编译预处理命令,但不能增加其他语句,也不能删去整条语句。

【含有错误的源程序】:

#include <stdio.h>

long fun(int  m)

{

   /******found******/

    switch(m);

{  case 0: return 0;

  /******found******/

       case 1; case 2 : return 1 ;

    }

 /******found******/

fun(m-1)+fun(m-2) ;  

}

void main()

{  long  fib;

   int  n;

   scanf("%d",&n);

   printf("n = %d\n",n);

   fib=fun(n);

   printf("fib = %d\n",fib);

}

#include <stdio.h>
long fun(int m)
{switch(m) /******found******/{  case 0: return 0;/******found******/case 1: case 2: return 1 ; }return fun(m-1) + fun(m-2) ;  /******found******/
}
void main()
{  long fib; int n;scanf("%d",&n);printf("n = %d\n",n);fib = fun(n);printf("fib = %ld\n",fib);  /******found******/
}

试图实现一个计算斐波那契数列(Fibonacci sequence)的函数,但是有几个问题需要修正。斐波那契数列是这样一个数列:0, 1, 1, 2, 3, 5, 8, 13, ...,其中每个数字(从第三个开始)都是前两个数字的和。

问题解释与修正

  1. switch语句中的case 1和case 2
    case 1: case 2: return 1; 这行代码意味着当m为1或2时,函数都返回1。这是正确的,因为斐波那契数列的第1项和第2项都是1。

  2. 递归终止条件
    尽管switch语句已经处理了m为0、1和2的情况,但是代码中没有直接退出递归的逻辑。如果m大于2,则switch语句结束后,会执行return fun(m-1) + fun(m-2);进行递归调用。这是正确的逻辑。

  3. main函数的返回类型
    在C语言中,main函数的返回类型应该是int,而不是void。因此,应该将void main()改为int main(),并在函数末尾返回0,表示程序正常结束。

  4. 代码风格
    虽然这不是一个错误,但为了提高代码的可读性,最好在case 1:case 2:后面加上break;,尽管在这个特定的例子中,由于return语句的存在,break;是多余的。但通常,在switch语句中,除了最后一个case分支(如果需要的话),其他分支后都应该加上break;

 OK了,老哥们

(✪ω✪)┗( ▔, ▔ )┛

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

6.深度卷积神经网络

目录 1.深度卷积神经网络ALexNet 2012AlexNetAlexNet架构AlexNet与LeNet复杂度对比总结代码实现2.使用块的网络VGG 2014 image竞猜第二VGG架构进度总结代码实现3.网络中的网络NiN全连接层的问题NiN块NiN架构总结代码实现4.含并行连结的网络(GoogLeNet)2014 image竞猜第一最好…

数据资产:打破数据孤岛,实现数据互联互通,构建企业智能化转型的重要桥梁。通过高效整合与利用数据资源,推动企业决策的科学化、精准化,助力企业迈向智能化新时代

目录 一、引言 二、数据孤岛现象及其影响 三、打破数据孤岛&#xff0c;实现数据互联互通 1、制定统一的数据标准和管理规范 2、建设统一的数据平台 3、推广数据共享和开放文化 四、数据资产在智能化转型中的重要作用 1、推动企业决策的科学化、精准化 2、优化企业运营…

万界星空科技QMS质量管理介绍

产品的生产质量是企业发展之根本&#xff0c;对所有企业来说&#xff0c;建立完善质量控制体系&#xff0c;对企业生产经营以及发展竞争具有至关重要的影响&#xff0c;可以说是企业质量保证的防火墙。QMS质量管理系统对任何一家企业都具有重要意义&#xff0c;可帮助企业提高生…

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长

汽车传动系统为汽车动力总成重要组成部分 我国市场参与者数量不断增长 汽车系统主要包括动力系统、制动系统、传动系统、转向系统、行驶系统、燃油供给系统、照明系统以及电器系统。汽车传动系统指能够将发动机产生的动力转化为车辆行驶驱动力的动力传递装置。汽车传动系统为汽…

sslyze一键检查服务器检查服务器的 SSL/TLS 安全性(KALI工具系列二十五)

目录 1、KALI LINUX 简介 2、sslyze工具简介 3、信息收集 3.1 目标主机IP&#xff08;服务器&#xff09; 3.2 KALI的IP 4、操作示例 4.1 扫描主机和端口 4.2 批量扫描 4.3 插件扫描 4.4 输出结果 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺…

多分类问题中评价指标F1-Score 加权平均权重的计算方法

多分类问题中评价指标F1-Score 加权平均权重的计算方法 众所周知&#xff0c;F1分数&#xff08;F1-score&#xff09;是分类问题的一个衡量指标。在分类问题中&#xff0c;常常将F1-score作为评价分类结果好坏的指标。它是精确率和召回率的调和平均数&#xff0c;值域为[0,1]。…

从0到1使用vite搭建react项目保姆级教程(持续更新中)

一、vite创建react项目 要使用Vite创建一个React项目&#xff0c;你需要按照以下步骤操作&#xff1a; 1、确保你已经安装了Node.js&#xff08;建议使用最新的稳定版本&#xff09;。 2、 使用npm命令安装Vite CLI工具&#xff0c;再来创建项目 npm create vitelatest my-vi…

# 消息中间件 RocketMQ 高级功能和源码分析(四)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;四&#xff09; 一、 消息中间件 RocketMQ 源码分析&#xff1a;回顾 NameServer 架构设计。 1、RocketMQ 架构设计 消息中间件的设计思路一般是基于主题订阅发布的机制&#xff0c;消息生产者&#xff08;Producer&…

9.华为交换机telnet远程管理配置aaa认证

目的&#xff1a;telnet远程管理设备 LSW1配置 [Huawei]int Vlanif 1 [Huawei-Vlanif1]ip add 1.1.1.1 24 [Huawei-Vlanif1]q [Huawei]user-interface vty 0 4 [Huawei-ui-vty0-4]authentication-mode aaa [Huawei-ui-vty0-4]q [Huawei]aaa [Huawei-aaa]local-user admin pass…

Webmin在EPICS IOC启动中的应用

本文使用webmin启动远程工控机中的EPICS IOC&#xff0c;受控设备使用PI公司的六轴台以及相应的控制器C-887&#xff1a; 1&#xff09;控制器C-887 2) 六轴台&#xff1a; 3&#xff09;在工控机上安装用于与C-887控制器进行通信的EPICS IOC程序&#xff0c;安装结束后&#…

聊一聊生成式AI

生成式AI&#xff08;Generative AI&#xff09;是指一类能够自主创造新内容的人工智能技术&#xff0c;这些内容可以是文本、图像、音频、视频等。与传统的分析性或分类性AI系统不同&#xff0c;生成式模型的主要任务不是对现有数据进行分类或预测&#xff0c;而是生成全新的、…

光电液位传感器在净水器领域的应用优势有哪些?

光电液位传感器作为一种先进的液位检测技术&#xff0c;在净水器领域有着显著的应用优势。具有高精度的特点&#xff0c;能够精确地检测水位变化&#xff0c;保证水处理过程的稳定性和效率。 传统的浮球式传感器可能存在精度偏差或者在长期使用中需要维护和更换的问题&#xf…

内网穿透方法有哪些?路由器端口映射外网和软件方案步骤

公网IP和私有IP不能互相通讯。我们通常在局域网内部署服务器和应用&#xff0c;当需要将本地服务提供到互联网外网连接访问时&#xff0c;由于本地服务器本身并无公网IP&#xff0c;就无法实现。这时候就需要内网穿透技术&#xff0c;即内网映射&#xff0c;内网IP端口映射到外…

从网络配置文件中提取PEAP凭据

我的一位同事最近遇到了这样一种情况&#xff1a;他可以物理访问使用802.1X连接到有线网络的Windows计算机&#xff0c;同时保存了用于身份验证的用户凭据&#xff0c;随后他想提取这些凭据&#xff0c;您可能认为这没什么特别的&#xff0c;但是事情却有点崎岖波折…… 如何开…

屏蔽房是做什么用的?为什么需要定期检测?

屏蔽房对于不了解的人来说&#xff0c;可能光看名字不知道是做什么的&#xff0c;但是对于一些企业或者机构&#xff0c;却是再熟悉不过的了。和名字一样&#xff0c;屏蔽房是对空间内的信号以及一些外界环境条件进行隔绝&#xff0c;在一些有特殊要求的企业机构中&#xff0c;…

人生的乐趣,在于对真知的追求

子曰&#xff1a;朝闻道&#xff0c;夕死可矣&#xff01; 孔子说&#xff1a;早上听到关于世界的真理&#xff0c;哪怕晚上就die了都可以。 这句话很有力量而经常被人引用&#xff0c;表达出我们如何看待沉重的肉身和精神世界。 我们的生活目的&#xff1a;道。 —— 要了解…

陶建辉入选 2023 年度“中国物联网行业卓越人物榜”

在这个技术飞速发展的时代&#xff0c;物联网行业作为推动社会进步的重要力量&#xff0c;正在不断地演化和革新。近日&#xff0c;中国智联网生态大会暨“2023 物联之星”年度榜单颁奖典礼在上海浦东举行。现场公布了拥有物联网行业奥斯卡奖之称的 ——“物联之星 2023 中国物…

鸿蒙 Text文本过长超出Row的范围问题

代码如下: 可以发现随着文本内容的增加, 第二个组件test2明显被挤出了屏幕外, 感觉像是Row自己对内容的约束没做好一样, 目前没看到官方的推荐解决方法, 机缘巧合下找到了个这种的办法, 给内容会增加的组件设置layoutWeight(), 借助layoutWeight的特性来解决该问题, 改动后代码…

探究 IP 地址被网站封禁的原因

在我们登录各种网站、APP浏览时&#xff0c;可能会遇到 IP 地址被某些网站封禁的情况。很多人奇怪这是为什么呢&#xff1f; 首先&#xff0c;违反网站的使用规则是比较常见的原因之一。比如&#xff0c;频繁发送垃圾邮件、恶意评论、进行网络攻击或试图破解网站的安全机制等不…

餐饮点餐系统小程序(ThinkPHP+FastAdmin+UniApp)

便捷美食新体验&#x1f354;&#x1f4f1; 基于ThinkPHPFastAdminUniApp开发的餐饮点餐系统&#xff0c;主要应用于餐饮&#xff0c;例如早餐、面馆、快餐、零食小吃等快捷扫码点餐需求&#xff0c;标准版本仅支持先付款后就餐模式&#xff0c;高级版本支持先付后就餐和先就餐…