实验四 数组和函数
- 实验名称
实验四 数组和函数
- 实验目的
(1)掌握一维、二维数组以及字符数组的定义、元素引用和编程方法。
(2)掌握字符串常用程序的设计方法。
(3)掌握函数定义和调用的方法,以及函数参数传递的方式。
(4)理解变量的作用域及生存期。
- 实验题目
- 编写程序计算Fibonacci数列的前40项。(要求每行输出4个数)
- 从键盘上输入一个3×4
的整数矩阵,找出其中最大值和最小值,记录它们的行号和列号并输出。 - 编写程序将2个字符串连接起来(不使用strcat函数)并输出。
- 编程实现一个具有+,-
,×,÷,%
运算功能的简单计算器。(通过函数实现) - 任意输入2个整数,编写2个函数分别求这2个整数的最大公约数和最小公倍数,结果在主函数中输出。
- 实验环境
硬件:个人电脑;软件:Visual C++ 6.0
- 实验代码及结果(程序运行结果请以截屏图给出)
- 源程序代码:
| #include <stdio.h> int main() { int fibonacci[40]; fibonacci[0] = 0; fibonacci[1] = 1; for (int i = 2; i < 40; i++) fibonacci[i] = fibonacci[i - 1] + fibonacci[i - 2]; for (int i = 0; i < 40; i++) { printf("%d ", fibonacci[i]); if ((i + 1) % 4 == 0) // 使用 (i + 1) % 4 来判断是否是每行的最后一个数字 printf("\n"); } return 0; } |
运行结果为:

- 源程序代码:
| #include <stdio.h> #include <limits.h> int main() { int matrix[3][4]; int max_value = INT_MIN, min_value = INT_MAX; int max_row, max_col, min_row, min_col; printf("请输入一个3x4的整数矩阵:\n"); for (int i = 0; i < 3; i++) { for (int j = 0; j < 4; j++) { scanf("%d", &matrix[i][j]); // 更新最大值和最小值及其位置 if (matrix[i][j] > max_value) { max_value = matrix[i][j]; max_row = i; max_col = j; } if (matrix[i][j] < min_value) { min_value = matrix[i][j]; min_row = i; min_col = j; } } } printf("最大值:%d,位置:(%d, %d)\n", max_value, max_row, max_col); printf("最小值:%d,位置:(%d, %d)\n", min_value, min_row, min_col); return 0; } |
运行结果为:

- 源程序代码:
| #include <stdio.h> int main() { char str1[100] = "Hello, "; char str2[] = "World!"; int i = 0, j = 0; // 找到str1的末尾 while (str1[i] != '\0') i++; // 将str2的字符逐个复制到str1的末尾 while (str2[j] != '\0') { str1[i] = str2[j]; i++; j++; } // 在str1的末尾添加字符串结束符'\0' str1[i] = '\0'; // 输出连接后的字符串 printf("%s\n", str1); return 0; } |
运行结果为:

- 源程序代码:
| #include <stdio.h> double add(double a, double b) { return a + b; } double subtract(double a, double b) { return a - b; } double multiply(double a, double b) { return a * b; } double divide(double a, double b) { return a / b; } int modulus(int a, int b) { return a % b; } // 主函数 int main() { char operator; double num1, num2; double result; printf("请输入一个算式:\n"); scanf("%lf %c %lf", &num1, &operator, &num2); // 根据运算符执行相应的运算 switch (operator) { case '+': result = add(num1, num2); break; case '-': result = subtract(num1, num2); break; case '*': result = multiply(num1, num2); break; case '/': result = divide(num1, num2); break; case '%': // 执行取模运算 result = modulus(num1, num2); break; default: printf("错误:无效的运算符。\n"); return 1; // 返回非零值表示程序异常终止 } // 输出其他运算的结果 printf("结果:%.2lf %c %.2lf = %.2lf\n", num1, operator, num2, result); return 0; } |
运行结果为:

- 源程序代码:
| #include <stdio.h> // 求最大公约数的递归函数(辗转相除法) int gcd(int a, int b) { if (b == 0) return a; else return gcd(b, a % b); } // 求最小公倍数的函数(利用GCD) int lcm(int a, int b, int gcd_result) { return (a * b) / gcd_result; } // 主函数 int main() { int num1, num2; int gcd_result, lcm_result; // 输入两个整数 printf("请输入两个整数:\n"); scanf("%d %d", &num1, &num2); // 计算最大公约数(使用递归辗转相除法) gcd_result = gcd(num1, num2); // 计算最小公倍数 lcm_result = lcm(num1, num2, gcd_result); printf("最大公约数:%d\n", gcd_result); printf("最小公倍数:%d\n", lcm_result); return 0; } |
运行结果为:

六、实验心得(请对每个实验题目编程及调试运行中遇到的问题及解决方案进行简单总结)
相关文章:
实验四 数组和函数
实验名称 实验四 数组和函数 实验目的 (1)掌握一维、二维数组以及字符数组的定义、元素引用和编程方法。 (2)掌握字符串常用程序的设计方法。 (3)掌握函数定义和调用的方法,以及函数参数传…...
基于安卓14 的ANR dump信息原理
首先以 service 处理超时逻辑来分析 1)service timeout调用到anr 的逻辑: /frameworks/base/services/core/java/com/android/server/am/ActiveServices.java 5827 void scheduleServiceTimeoutLocked(ProcessRecord proc) { 5828 if (…...
C++ volatile(八股总结)
答:跟编译器优化有关,告诉编译器每次操作该变量时一定要从内存中真正取出,而不是使用已经存在寄存器中的备份。 volatile是一个类型限定符,用来告诉编译器,某个变量的值可能在任何时刻发生变化,因此&#…...
SQL从入门到实战
学前须知 sqlzoo数据介绍 world nobel covid ge game、goal、eteam teacher、dept movie、casting、actor 基础语句 select&from SELECT from WORLD Tutorial - SQLZoo 基础查询select单列&多列&所有列&别名应用 例题一 SELECT name, continent, population …...
Redis源码阅读-源码阅读方式
Redis源码下载 首先通过地址(https://github.com/redis/redis)下载redis的源码。redis的源码版本,这里可以选择合适的查看,这里选择的是redis 5.x版本的源码。 Redis源码查看方式 这里可以选择合适的C开发工具,打开…...
若依框架简介
若依(RuoYi)框架是一个基于Java语言的后台管理系统快速开发框架,它结合了多种前端和后端技术,提供了高效的开发工具。以下是对若依框架的详细解析: 一、技术架构 后端:若依框架后端采用了Spring Boot、My…...
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分
MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分 目录 MOE怎样划分不同专家:K-Means聚类算法来实现将神经元特征聚类划分MOE划分不同专家的方法K-Means聚类算法来实现将神经元特征聚类划分成不同专家(行或者列聚类)举例说明怎么聚类,最后神经网络怎么保存M…...
为 CentOS7 虚拟机添加第二块网卡
为 CentOS7 虚拟机添加第二块网卡 目录 为 CentOS7 虚拟机添加第二块网卡一、在虚拟中添加网卡二、网卡配置1、查看新增的网卡信息2、创建网卡配置文件 一、在虚拟中添加网卡 1、右击虚拟机,在弹出的菜单中选择【设置】,弹出如下图所示的【虚拟机设置】…...
30天开发操作系统 第 12 天 -- 定时器
前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单,只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器,CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...
雷达的分类
雷达是一种利用电磁波进行探测和定位的设备,其分类方式多种多样,以下是按照不同标准对雷达进行的分类: 一、按功能分类 警戒雷达:用于搜索、监视和识别空中、海面或地面的目标,为防御系统提供早期预警。引导雷达&…...
Ubuntu桌面管理环境: GDM3,KDM,LightDM
介绍 Ubuntu是一个广受欢迎的Linux操作系统,拥有强大而多样化的桌面管理环境。其中三个常用的桌面管理环境是GDM3,KDM和LightDM。本篇博客将介绍这三个桌面管理环境的特点和功能。 GDM3 (GNOME Display Manager) GDM3是默认的桌面管理环境,…...
使用Llama 3.1创建合成数据集以调优你的大型语言模型
使用Llama 3.1创建合成数据集以调优你的大型语言模型 在数据驱动的人工智能领域,数据是核心资产。开发高质量数据集既复杂又昂贵,因此很多实验室和开发者选择使用合成数据集。本文将介绍如何利用大型语言模型Llama 3.1 405B创建合成数据集,并…...
js可不使用document直接根据id获取id元素
今天在用原生js写demo的时候发现一个有意思的小现象,那就是可以直接根据元素的id去获取对应的元素。 起先是我定义了四个btn,每个btn都是根据getElementById来获取元素,然后给元素绑定事件,在调试的时候都挺好,到了后…...
【竞技宝】CS2:HLTV2024职业选手排名TOP8-broky
北京时间2025年1月7日,HLTV年度选手排名正在持续公布中,今日凌晨正式公布了今年的TOP8为FAZE战队的broky。 选手简介 broky是一位来自拉脱维亚的职业CS选手,现年23岁。2018年7月,broky获得了FPL资格,连续几季在榜上前5。他的首次赛场留名是跟随拉脱维亚本土战队Wolsung出征BES…...
Apache Paimon-实时数据湖
一、Apache Paimon是什么? Flink社区希望能够将 Flink 的 Streaming 实时计算能力和 Lakehouse 新架构优势进一步结合,推出新一代的 Streaming Lakehouse 技术,促进数据在数据湖上真正实时流动起来,并为用户提供实时离线一体化的开发体验。 …...
hpm使用笔记————使用usb作为从机接收来自上位机的数据然后通过spi主机发送给spi从机
历程整合 环境要求任务需求任务实现代码实现任务测试功能测试 结束 环境 hpm_sdk v 1.7.0ses v8.10 要求 例程demo USB-CDC 作为从机接收,然后把接收到的数据转发给SPI,SPI传输出去 任务需求 USB使用cherry协议栈进行开发 作为device设备(…...
数据结构(查找算法)
1. 查找的概念 在一堆数据中,找到我们想要的那个数据,就是查找,也称为搜索,很容易想到,查找算法的优劣,取决于两个因素: 数据本身存储的特点查找算法本身的特点 比如,如果数据存储…...
private前端常见算法
1.数组 合并两个有序数组(简单-5) https://leetcode.cn/problems/merge-sorted-array/description/?envTypestudy-plan-v2&envIdtop-interview-150 移除元素(简单-4) https://leetcode.cn/problems/remove-element/descr…...
Go语言之十条命令(The Ten Commands of Go Language)
Go语言之十条命令 Go语言简介 Go语言(又称Golang)是由Google开发的一种开源编程语言,首次公开发布于2009年。Go语言旨在提供简洁、高效、可靠的软件开发解决方案,特别强调并发编程和系统编程。 Go语言的基本特征 静态强类…...
Residency 与 Internship 的区别及用法解析
Residency 与 Internship 的区别及用法解析 在英文中,“residency” 和 “internship” 都与职业培训相关,但它们的使用场景和具体含义存在显著差异。本文将详细解析这两个词的区别,以及它们在不同语境下的应用。 Residency 的定义及使用场景…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
Qt/C++开发监控GB28181系统/取流协议/同时支持udp/tcp被动/tcp主动
一、前言说明 在2011版本的gb28181协议中,拉取视频流只要求udp方式,从2016开始要求新增支持tcp被动和tcp主动两种方式,udp理论上会丢包的,所以实际使用过程可能会出现画面花屏的情况,而tcp肯定不丢包,起码…...
盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来
一、破局:PCB行业的时代之问 在数字经济蓬勃发展的浪潮中,PCB(印制电路板)作为 “电子产品之母”,其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透,PCB行业面临着前所未有的挑战与机遇。产品迭代…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...
Ascend NPU上适配Step-Audio模型
1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统,支持多语言对话(如 中文,英文,日语),语音情感(如 开心,悲伤)&#x…...
【python异步多线程】异步多线程爬虫代码示例
claude生成的python多线程、异步代码示例,模拟20个网页的爬取,每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程:允许程序同时执行多个任务,提高IO密集型任务(如网络请求)的效率…...
如何在最短时间内提升打ctf(web)的水平?
刚刚刷完2遍 bugku 的 web 题,前来答题。 每个人对刷题理解是不同,有的人是看了writeup就等于刷了,有的人是收藏了writeup就等于刷了,有的人是跟着writeup做了一遍就等于刷了,还有的人是独立思考做了一遍就等于刷了。…...
Swagger和OpenApi的前世今生
Swagger与OpenAPI的关系演进是API标准化进程中的重要篇章,二者共同塑造了现代RESTful API的开发范式。 本期就扒一扒其技术演进的关键节点与核心逻辑: 🔄 一、起源与初创期:Swagger的诞生(2010-2014) 核心…...
