当前位置: 首页 > news >正文

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);  // 打印最长的字符串。  
}
  1. 使用gets_s:如注释所述,gets_s是一个非标准的函数,并且在很多实现中都不推荐使用,因为它可能导致缓冲区溢出。建议使用fgets代替。例如,可以用fgets(ss[i], sizeof(ss[i]), stdin)代替gets_s(ss[i])
  2. 未检查数组越界:在调用fun函数之前,没有检查是否有可能访问到超出数组边界的内存。虽然在这个特定的例子中可能不会出现问题,但这是一个不好的编程习惯,可能会导致未定义的行为。
  3. 代码可读性:变量命名和注释可以更加清晰和详细,以帮助其他开发者更好地理解代码的功能和目的。

 

实验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];}}}
}

思路解析

  1. 初始化与输入:首先,我们定义并初始化了一个5x5的二维数组。然后,我们调用findMinMax函数来找到这个数组中的最小值和最大值。
  2. 寻找最小值和最大值:在findMinMax函数中,我们使用两个指针minmax来分别存储找到的最小值和最大值。我们遍历整个数组,并使用条件语句来更新这两个指针的值。这样,当我们遍历完整个数组后,minmax就分别指向了数组中的最小值和最大值。
  3. 放置最小值和最大值:在主函数中,我们首先将最大值放在了二维数组的中心位置。然后,我们将最小值放在了四个角落。这样做的目的是使整个二维数组在视觉上看起来更有趣和更有组织性。
  4. 输出:最后,我们通过双重循环遍历整个二维数组,并使用printf函数将每个元素打印到控制台上。这样,用户就可以看到变换后的二维数组了。

相关文章:

c语言实验八

实验1&#xff1a;在主函数中输入num个字符串&#xff0c;写一个函数&#xff0c;从传入的num个字符串中找出最长的一个字符串&#xff0c;并通过形参指针max传回该串地址&#xff0c;在主函数中输出。&#xff08;注意&#xff1a;用****作为结束输入的标志。&#xff09; #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实验&#xff1a; 4.ACL的应用原则&#xff1a; 5.匹配原则&#xff1a; 二、NAT 1.NAT的原理及作用&#xff1a; 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、扫描注解&#xff0c;注册元数据和URI1.2.1、构建URI并写入Disruptor1.2.2、构建元数据并写入Disrupto…...

高级C#技术(二)

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

【性能测试】基础知识篇-压力模型

常见压力模式 并发模式&#xff08;即虚拟用户模式&#xff09;和RPS模式&#xff08;即Requests Per Second&#xff0c;每秒请求数&#xff0c;吞吐量模式&#xff09;。 本文介绍这两种压力模式的区别&#xff0c;以便根据自身业务场景选择更合适的压力模式。 并发模式 …...

springboot-redis设置定时触发任务详解

最近研究了一下“redis定时触发”&#xff0c;网上查了查资料&#xff0c;这里记录一下。 从Redis 2.8.0开始&#xff0c;Redis加入了发布/订阅模式以及键空间消息提醒&#xff08;keyspace notification&#xff09;功能。键空间消息提醒提供了允许客户端通过订阅指定信道获取…...

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 安装命令&#xff1a; sudo apt-get install subversion 创建第一个工程&#xff1a; 创建版本库、项目 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&#xff0c; http://slurm.schedmd.com/ )是开源的、具有容错性和高度可扩展的Linux集群超级计算系统资源管理和作业调度系统。超级计算系统可利用Slurm对资源和作业进行管理&a…...

ffmpeg可以做什么

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

一种缩小数据之间差距的算法

先上代码&#xff1a; /** * 缩小数据之间的差距&#xff0c;但是大小关系不变的方法* 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的区别

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

优质全套SpringMVC教程

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

微信小程序---使用npm包安装Vant组件库

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

GPT-4V被超越?SEED-Bench多模态大模型测评基准更新

&#x1f4d6; 技术报告 SEED-Bench-1&#xff1a;https://arxiv.org/abs/2307.16125 SEED-Bench-2&#xff1a;https://arxiv.org/abs/2311.17092 &#x1f917; 测评数据 SEED-Bench-1&#xff1a;https://huggingface.co/datasets/AILab-CVC/SEED-Bench SEED-Bench-2&…...

数据库_mongoDB

1 介绍 MongoDB 是一种 NoSQL 数据库&#xff0c;它将每个数据存储为一个文档&#xff0c;这里的文档类似于 JSON/BSON 对象&#xff0c;具体数据结构由键值&#xff08;key/value&#xff09;对组成。字段值可以包含其他文档&#xff0c;数组及文档数组。其数据结构非常松散&…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

Vue3 + Element Plus + TypeScript中el-transfer穿梭框组件使用详解及示例

使用详解 Element Plus 的 el-transfer 组件是一个强大的穿梭框组件&#xff0c;常用于在两个集合之间进行数据转移&#xff0c;如权限分配、数据选择等场景。下面我将详细介绍其用法并提供一个完整示例。 核心特性与用法 基本属性 v-model&#xff1a;绑定右侧列表的值&…...

AtCoder 第409​场初级竞赛 A~E题解

A Conflict 【题目链接】 原题链接&#xff1a;A - Conflict 【考点】 枚举 【题目大意】 找到是否有两人都想要的物品。 【解析】 遍历两端字符串&#xff0c;只有在同时为 o 时输出 Yes 并结束程序&#xff0c;否则输出 No。 【难度】 GESP三级 【代码参考】 #i…...

Android第十三次面试总结(四大 组件基础)

Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成&#xff0c;用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机&#xff1a; ​onCreate()​​ ​调用时机​&#xff1a;Activity 首次创建时调用。​…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

C++ 设计模式 《小明的奶茶加料风波》

&#x1f468;‍&#x1f393; 模式名称&#xff1a;装饰器模式&#xff08;Decorator Pattern&#xff09; &#x1f466; 小明最近上线了校园奶茶配送功能&#xff0c;业务火爆&#xff0c;大家都在加料&#xff1a; 有的同学要加波霸 &#x1f7e4;&#xff0c;有的要加椰果…...

基于PHP的连锁酒店管理系统

有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发&#xff0c;数据库mysql&#xff0c;前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...

MySQL 主从同步异常处理

阅读原文&#xff1a;https://www.xiaozaoshu.top/articles/mysql-m-s-update-pk MySQL 做双主&#xff0c;遇到的这个错误&#xff1a; Could not execute Update_rows event on table ... Error_code: 1032是 MySQL 主从复制时的经典错误之一&#xff0c;通常表示&#xff…...

vue3 daterange正则踩坑

<el-form-item label"空置时间" prop"vacantTime"> <el-date-picker v-model"form.vacantTime" type"daterange" start-placeholder"开始日期" end-placeholder"结束日期" clearable :editable"fal…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...