编写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.mzph.cn/pingmian/30149.shtml

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

相关文章

通过阿里云OOS定时升级Redis实例临时带宽

功能背景 在数据驱动的现代业务环境中&#xff0c;Redis以其卓越的性能和灵活性&#xff0c;已成为众多企业关键基础设施的重要组成部分。Redis广泛应用于处理缓存、会话管理、消息队列等多种数据密集型和响应敏感型的场景&#xff0c;对业务连续性和用户体验贡献极大。然而&a…

如何用Vue3构建一个交互式树状图

本文由ScriptEcho平台提供技术支持 项目地址&#xff1a;传送门 Vue 3 ApexCharts Treemap 组件&#xff1a;可视化多维数据 应用场景 树形图&#xff08;Treemap&#xff09;是一种可视化多维数据的有效方式&#xff0c;特别适用于展示层次结构数据或按类别分组的数据。它…

Webmin在EPICS IOC启动中的应用

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

【DBA早下班系列】—— 并行SQL/慢SQL 问题该如何高效收集诊断信息

1. 前言 OceanBase论坛问答区或者提交工单支持的时候大部分时间都浪费在了诊断信息的获取交互上&#xff0c;今天我就其中大家比较头疼的SQL问题&#xff0c;给大家讲解一下如何一键收集并行SQL/慢SQL所需要的诊断信息&#xff0c;减少沟通成本&#xff0c;让大家早下班。 2. …

Python网络爬虫4-实战爬取pdf

1.需求背景 爬取松产品中心网站下的家电说明书。这里以冰箱为例&#xff1a;松下电器-冰箱网址 网站分析&#xff1a; 第一步&#xff1a; 点击一个具体的冰箱型号&#xff0c;点击了解更多&#xff0c;会打开此型号电器的详情页面。 第二步&#xff1a;在新打开的详情页面中…

docker安装使用

文章目录 docker产生的原因传统虚拟机容器化技术 docker组成安装docker镜像加速docker安装过程中遇到的问题以及解决办法Errors during downloading metadata for repository root_:Failed to set locale, defaulting to C.UTF-8 docker产生的原因 传统虚拟机 在不使用docker…

图纸管理的方法、图纸管理软件

图纸管理是一个复杂且关键的过程&#xff0c;它涉及到图纸的创建、存储、共享、修改、审核、存档和检索等多个环节。以下是根据参考文章总结的图纸管理的具体内容和方法&#xff1a; 一、图纸管理的目的 1、确保图纸的准确性&#xff1a;通过规范的管理流程和质量控制措施&…

星戈瑞FITC-Cytochrome C:荧光标记细胞色素C的研究与应用

细胞色素C&#xff08;Cytochrome C&#xff09;是一种位于线粒体内膜上的蛋白质。为了深入地研究细胞色素C在细胞生物学和病理学中的功能&#xff0c;科学家们常常采用荧光标记技术对其进行追踪和观察。其中&#xff0c;异硫氰酸荧光素&#xff08;FITC&#xff09;作为一种常…

抖音短剧看剧系统是怎么做的?怎么样搭建上线运营?

前言&#xff1a; 当前热门短剧已深入大家的日常&#xff0c;针对一些好的短剧更是吸金无数。今天给大家介绍一下短剧这个项目整个运作模式。 一、一部短剧是怎么样呈现到观众眼前的&#xff1f; 首先影视作品公司拍摄剪辑好短剧 &#xff0c;弄好一切审核后&#xff0c;放到…

Chatgpt教我打游戏攻略

宝可梦朱 我在玩宝可梦朱的时候&#xff0c;我的同行队伍里有黏美儿&#xff0c;等级为65&#xff0c;遇到了下雨天但是没有进化&#xff0c;为什么呢&#xff1f; 黏美儿&#xff08;Goomy&#xff09;要进化为黏美龙&#xff08;Goodra&#xff09;&#xff0c;需要满足以下…

vue-cli 根据文字生成pdf格式文件 jsPDF

1.安装jspdf npm install jspdf --save 2.下载ttf格式文件 也可以用C:\Windows\Fonts下的字体文件&#xff0c;反正调一个需要的ttf字体文件就行&#xff0c;但有的字体存在部分字体乱码现象 微软雅黑ttf下载地址&#xff1a; FontsMarket.com - Download Microsoft YaHei …

访问0xdddddddd内存地址引发软件崩溃的实战问题排查

目录 1、问题描述 2、访问空指针或者野指针 3、C程序中常见的异常内存值 4、0xdddddddd内存访问违例问题分析与排查 4.1、初步分析 4.2、CConfMeidaConfigDlg窗口类对象是何时被销毁的&#xff1f; 4.3、为啥会访问到已经释放内存的CConfMeidaConfigDlg类对象&#xff1…

(2)图像识别yolov5—识别图片视频等文件

目录 一、识别示例图片 二、识别视频 三、修改 detect.py 代码以输出物体坐标,更改识别方式 四、更改后的演示代码: 一、识别示例图片 在yolov5文件夹中,有两个示例图片,这里我们对示例图片进行识别。 打开命令行,进入到当前yolov5目录,通过运行下面的指令,然后对…

QTimer、QElapsedTimer、timeout()事件、singleShot事件

实现 QTimer 定时器 、timeout()事件、singleShot事件的使用 QElapsedTimer 计数器的使用 布局 设置第一个和第二个groupBox高度为固定 timerexample.cpp #include "timerexample.h" #include "ui_timerexample.h" #include "QTime" #include …

分享一个dnslog在线平台

DNSLog Platform 页面只有两个按钮&#xff0c;点击Get Subdomain可以随机生成一个dnslog 点击Refresh Record&#xff0c;刷新这个dnslog的记录。可以查看到这条dnslog的IP地址和创建时间。

QT6不自动生成pro文件

安装了QT的新版本结果他不自动生成pro文件了导致下次打开很复杂 记得在创建时选择qmake&#xff0c;因为新版默认cmake

大模型“诸神之战”,落地才是赛点

ChatGPT 诞生已经快一年&#xff0c;你还在与它对话吗&#xff1f; 有的人用来写报告、改代码&#xff0c;让它成为得力帮手&#xff1b;有的人却只是“调戏”个两三回&#xff0c;让它创作诗歌或故事&#xff0c;便不再“宠幸”。 根据网站分析工具 SimilarWeb 的数据&#…

delphi 如何使用TEdgeBrowser组件以及打包环境在其他主机上运行

不管开发环境还是第三方环境先安装运行时库&#xff1a;Microsoft Edge WebView2 | Microsoft Edge Developer 开发环境可以直接通过&#xff1a; delphi IDE安装 安装完毕后进入到指定路径&#xff0c;复制里面的WebView2Loader.dll到你要开发的程序根目录&#xff1a; 大致路…

未来工牌:蓝牙智联的彩色墨水屏工牌

在快节奏的现代职场中&#xff0c;传统的工牌已无法满足人们对于个性化和智能化的需求。为此&#xff0c;我们创新研发了一款4寸电子墨水屏工牌&#xff0c;它不仅仅是一个身份的象征&#xff0c;更是一个集蓝牙通信、智能显示、节能环保于一体的未来工具。 这款工牌拥有600*4…

电压模式R-2R DAC的工作原理和特性

本文将探讨电压模式R-2R DAC结构。 在本文中&#xff0c;我们将探索什么是R-2R DAC以及如何实现它们。 首先&#xff0c;我们将简要回顾一下开尔文分压器DAC。这种结构很简单&#xff0c;但它们需要大量的电阻和开关来实现高分辨率DAC。这个问题的一个解决方案是称为R-2R DAC…