c语言实验八
实验1:在主函数中输入num个字符串,写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址,在主函数中输出。(注意:用****作为结束输入的标志。)
#include<stdio.h>
#include<stdlib.h>
#include<string.h> // 定义一个函数,该函数接受一个二维字符数组、
//一个整数(表示数组中的字符串数量)和一个指向字符的指针。
// 函数的目的是找到数组中最长的字符串,并将其地址赋值给指针。
char* fun(char(*a)[81], int num, char* max)
{int i;max = a[0]; // 将max初始化为数组中的第一个字符串。 for (i = 0; i < num; i++) // 遍历数组中的每一个字符串。 {if (strlen(max) < strlen(a[i])) // 如果当前最长的字符串长度小于当前遍历到的字符串长度, { // 则更新max为当前字符串。 max = a[i];}}return max; // 返回最长的字符串的地址。
}int main()
{char ss[10][81], * ps = NULL; // 定义一个二维字符数组和一个指向字符的指针。 char s[3][81], * p = NULL; // 定义另一个二维字符数组和一个指向字符的指针。 int i = 0, n;// 使用gets_s函数从用户那里获取字符串,直到输入"****"为止。
//gets_s是一个非标准的函数,通常不建议使用,因为它可能导致缓冲区溢出。建议使用fgets代替。 gets_s(ss[i]); // 读取第一个字符串。 while (!strcmp(ss[i], "****") == 0) // 当输入的不是"****"时,继续读取下一个字符串。 {i++;gets_s(ss[i]); // 读取下一个字符串。 }n = i; // 记录已输入的字符串数量。 ps = fun(ss, n, ps); // 调用fun函数找到最长的字符串。 printf("\n最长字符串=%s\n", ps); // 打印最长的字符串。
}
- 使用
gets_s
:如注释所述,gets_s
是一个非标准的函数,并且在很多实现中都不推荐使用,因为它可能导致缓冲区溢出。建议使用fgets
代替。例如,可以用fgets(ss[i], sizeof(ss[i]), stdin)
代替gets_s(ss[i])
。- 未检查数组越界:在调用
fun
函数之前,没有检查是否有可能访问到超出数组边界的内存。虽然在这个特定的例子中可能不会出现问题,但这是一个不好的编程习惯,可能会导致未定义的行为。- 代码可读性:变量命名和注释可以更加清晰和详细,以帮助其他开发者更好地理解代码的功能和目的。
实验2:n个人围成一圈,顺序排号,从第1个人开始报数(从1到3报数),凡是报到3的人退出圈子,问最后留下的人的序号和名字。主程序中输入n和每个人的序号名字,输出最后结果。处理过程用子函数实现。
#include <stdio.h>
#include <stdlib.h> //定义一个结构体存储人的序号和名字
typedef struct {int number;char name[50];
} Person;int main() {int n;printf("请输入人数:");scanf("%d", &n); //从控制台读取用户输入的人数并存储在n中Person* people = (Person*)malloc(n * sizeof(Person)); //动态分配内存,用于存储n个Person结构体。for (int i = 0; i < n; i++) {printf("请输入第%d个人的序号和名字:", i + 1);scanf("%d %s", &people[i].number, people[i].name);}int count = 0; //定义一个计数器变量count,初始化为0。int index = 0; //定义一个索引变量index,初始化为0。while (count < n -1) {index = index % n; //通过取模运算更新index的值count++;}printf("最后留下的人序号:%d\n", people[index].number);printf("最后留下的人名字:%s\n", people[index].name);free(people);return 0;
}
实验3:定义一个5*5的矩阵(二维数组),赋上初值,通过调用函数实现:将数组中的最大值放在中心,4个角分别放4个最小的元素(顺序为从左到右,从上到下依次从小到大存放),在主函数中输出变换后的数组。
#include <stdio.h>// 函数声明
void findMinMax(int arr[5][5], int* min, int* max);
void swap(int* a, int* b);int main() {// 定义并初始化二维数组int matrix[5][5] = { {1, 2, 3, 4, 5},{6, 7, 8, 9, 10},{11, 12, 13, 14, 15},{16, 17, 18, 19, 20},{21, 22, 23, 24, 25} };// 调用函数找到最小值和最大值int min, max;findMinMax(matrix, &min, &max);// 将最大值放在中心位置matrix[2][2] = max;// 将最小值放置在四个角落matrix[0][0] = min;matrix[0][4] = min;matrix[4][0] = min;matrix[4][4] = min;// 输出变换后的数组for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {printf("%d\t", matrix[i][j]);}printf("\n");}return 0;
}// 找到二维数组中的最小值和最大值
void findMinMax(int arr[5][5], int* min, int* max) {*min = arr[0][0];*max = arr[0][0];for (int i = 0; i < 5; i++) {for (int j = 0; j < 5; j++) {if (arr[i][j] < *min) {*min = arr[i][j];}if (arr[i][j] > *max) {*max = arr[i][j];}}}
}
思路解析:
- 初始化与输入:首先,我们定义并初始化了一个5x5的二维数组。然后,我们调用
findMinMax
函数来找到这个数组中的最小值和最大值。- 寻找最小值和最大值:在
findMinMax
函数中,我们使用两个指针min
和max
来分别存储找到的最小值和最大值。我们遍历整个数组,并使用条件语句来更新这两个指针的值。这样,当我们遍历完整个数组后,min
和max
就分别指向了数组中的最小值和最大值。- 放置最小值和最大值:在主函数中,我们首先将最大值放在了二维数组的中心位置。然后,我们将最小值放在了四个角落。这样做的目的是使整个二维数组在视觉上看起来更有趣和更有组织性。
- 输出:最后,我们通过双重循环遍历整个二维数组,并使用
printf
函数将每个元素打印到控制台上。这样,用户就可以看到变换后的二维数组了。
相关文章:
c语言实验八
实验1:在主函数中输入num个字符串,写一个函数,从传入的num个字符串中找出最长的一个字符串,并通过形参指针max传回该串地址,在主函数中输出。(注意:用****作为结束输入的标志。) #i…...

ArcGIS Pro SDK文件选择对话框
文件保存对话框 // 获取默认数据库var gdbPath Project.Current.DefaultGeodatabasePath;//设置文件的保存路径SaveItemDialog saveLayerFileDialog new SaveItemDialog(){Title "Save Layer File",OverwritePrompt true,//获取或设置当同名文件已存在时是否出现…...

ACT、NAT、NATPT和EASY-IP
目录 一、ACL 1.ACL 2.ACL的两种应用匹配机制 3.ACL的基本类型 4.ACL命令操作 5.ACL实验: 4.ACL的应用原则: 5.匹配原则: 二、NAT 1.NAT的原理及作用: 2.NAT分类 3.NAT配置 三、EASY-ip实验 四、NATPT 五、通配符 …...
HTML实现每天单词积累
注册页面 <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>注册</title><style>body {font-family: Arial, sans-serif;background-color: #f5f5f5;}form {max-width: 500px;margin: 50px auto;padding: 40px…...

【ECMAScript笔记二】运算符分类,流程控制(顺序结构、分支结构、循环结构)
文章目录 4 运算符4.1 算术运算符4.2 递增和递减运算符4.3 比较运算符4.4 逻辑运算符4.5 赋值运算符4.6 运算优先级 5 流程控制5.1 顺序结构5.2 分支结构5.2.1 if 语句5.2.2 switch 语句 5.3 循环结构5.3.1 for循环5.3.2 while循环5.3.3 do while循环5.3.4 continue和break 5.4…...

ShenYu网关注册中心之Zookeeper注册原理
文章目录 1、客户端注册流程1.1、读取配置1.1.1、用于注册的 ZookeeperClientRegisterRepository1.1.2、用于扫描构建 元数据 和 URI 的 SpringMvcClientEventListener 1.2、扫描注解,注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disrupto…...

高级C#技术(二)
前言 本章为高级C#技术的第二节也是最后一节。前一节在下面这个链接 高级C#技术https://blog.csdn.net/qq_71897293/article/details/134930989?spm1001.2014.3001.5501 匿名类型 匿名类型如其名,匿名的没有指定变量的具体类型。 举个例子: 1 创建…...

【性能测试】基础知识篇-压力模型
常见压力模式 并发模式(即虚拟用户模式)和RPS模式(即Requests Per Second,每秒请求数,吞吐量模式)。 本文介绍这两种压力模式的区别,以便根据自身业务场景选择更合适的压力模式。 并发模式 …...
springboot-redis设置定时触发任务详解
最近研究了一下“redis定时触发”,网上查了查资料,这里记录一下。 从Redis 2.8.0开始,Redis加入了发布/订阅模式以及键空间消息提醒(keyspace notification)功能。键空间消息提醒提供了允许客户端通过订阅指定信道获取…...

Video anomaly detection with spatio-temporal dissociation 论文阅读
Video anomaly detection with spatio-temporal dissociation 摘要1.介绍2.相关工作3. Methods3.1. Overview3.2. Spatial autoencoder3.3. Motion autoencoder3.4. Variance attention module3.5. Clustering3.6. The training objective function 4. Experiments5. Conclusio…...

svn 安装
安装系统 ubuntu 22 安装命令: sudo apt-get install subversion 创建第一个工程: 创建版本库、项目 1、先创建svn根目录文件夹 sudo mkdir /home/svn 2、创建项目的目录文件夹 sudo mkdir /home/svn/demo_0 svnadmin create /home/svn/demo_0 配置&a…...

slurm 23.11.0集群 debian 11.5 安装
slurm 23.11.0集群 debian 11.5 安装 用途 Slurm(Simple Linux Utility for Resource Management, http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理&a…...

ffmpeg可以做什么
用途 FFmpeg是一个功能强大的多媒体处理工具,可以处理音频和视频文件。它是一个开源项目,可在各种操作系统上运行,包括Linux、Windows和Mac OS X等。以下是FFmpeg可以做的一些主要任务: 转换媒体格式:可将一个媒体格式…...

一种缩小数据之间差距的算法
先上代码: /** * 缩小数据之间的差距,但是大小关系不变的方法* param {Array} features */function minMaxData(data) {for (let i 0; i < data.length; i) {const f data[i];const x f[1];const yf[2];//此处5根据实际情况设置const y2 Math.pow(…...

【Axure RP9】动态面板使用------案例:包括轮播图和多方式登入及左侧菜单栏案例
目录 一 动态面板简介 1.1 动态面板是什么 二 轮播图 2.1 轮播图是什么 2.2 轮播图应用场景 2.3 制作实播图 三 多方式登入 3.1多方式登入是什么 3.3 多方式登入实现 四 左侧菜单栏 4.1左侧菜单栏是什么 4.2 左侧菜单栏实现 一 动态面板简介 1.1 动态面板是什么…...

在接口实现类中,加不加@Override的区别
最近的软件构造实验经常需要设计接口,我们知道Override注解是告诉编译器,下面的方法是重写父类的方法,那么单纯实现接口的方法需不需要加Override呢? 定义一个类实现接口,使用idea时,声明implements之后会…...

优质全套SpringMVC教程
三、SpringMVC 在SSM整合中,MyBatis担任的角色是持久层框架,它能帮我们访问数据库,操作数据库 Spring能利用它的两大核心IOC、AOP整合框架 1、SpringMVC简介 1.1、什么是MVC MVC是一种软件架构的思想(不是设计模式-思想就是我们…...

微信小程序---使用npm包安装Vant组件库
在小程序项目中,安装Vant 组件库主要分为如下3步: 注意:如果你的文件中不存在pakage.json,请初始化一下包管理器 npm init -y 1.通过 npm 安装(建议指定版本为1.3.3) 通过npm npm i vant/weapp1.3.3 -S --production 通过y…...

GPT-4V被超越?SEED-Bench多模态大模型测评基准更新
📖 技术报告 SEED-Bench-1:https://arxiv.org/abs/2307.16125 SEED-Bench-2:https://arxiv.org/abs/2311.17092 🤗 测评数据 SEED-Bench-1:https://huggingface.co/datasets/AILab-CVC/SEED-Bench SEED-Bench-2&…...
数据库_mongoDB
1 介绍 MongoDB 是一种 NoSQL 数据库,它将每个数据存储为一个文档,这里的文档类似于 JSON/BSON 对象,具体数据结构由键值(key/value)对组成。字段值可以包含其他文档,数组及文档数组。其数据结构非常松散&…...
Leetcode 3576. Transform Array to All Equal Elements
Leetcode 3576. Transform Array to All Equal Elements 1. 解题思路2. 代码实现 题目链接:3576. Transform Array to All Equal Elements 1. 解题思路 这一题思路上就是分别考察一下是否能将其转化为全1或者全-1数组即可。 至于每一种情况是否可以达到…...

抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
06 Deep learning神经网络编程基础 激活函数 --吴恩达
深度学习激活函数详解 一、核心作用 引入非线性:使神经网络可学习复杂模式控制输出范围:如Sigmoid将输出限制在(0,1)梯度传递:影响反向传播的稳定性二、常见类型及数学表达 Sigmoid σ ( x ) = 1 1 +...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...

USB Over IP专用硬件的5个特点
USB over IP技术通过将USB协议数据封装在标准TCP/IP网络数据包中,从根本上改变了USB连接。这允许客户端通过局域网或广域网远程访问和控制物理连接到服务器的USB设备(如专用硬件设备),从而消除了直接物理连接的需要。USB over IP的…...

Windows安装Miniconda
一、下载 https://www.anaconda.com/download/success 二、安装 三、配置镜像源 Anaconda/Miniconda pip 配置清华镜像源_anaconda配置清华源-CSDN博客 四、常用操作命令 Anaconda/Miniconda 基本操作命令_miniconda创建环境命令-CSDN博客...

WebRTC调研
WebRTC是什么,为什么,如何使用 WebRTC有什么优势 WebRTC Architecture Amazon KVS WebRTC 其它厂商WebRTC 海康门禁WebRTC 海康门禁其他界面整理 威视通WebRTC 局域网 Google浏览器 Microsoft Edge 公网 RTSP RTMP NVR ONVIF SIP SRT WebRTC协…...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
核心速览 研究背景 研究问题:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...