当前位置: 首页 > 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函数将每个元素打印到控制台上。这样,用户就可以看到变换后的二维数组了。

http://www.lryc.cn/news/262698.html

相关文章:

  • ArcGIS Pro SDK文件选择对话框
  • ACT、NAT、NATPT和EASY-IP
  • HTML实现每天单词积累
  • 【ECMAScript笔记二】运算符分类,流程控制(顺序结构、分支结构、循环结构)
  • ShenYu网关注册中心之Zookeeper注册原理
  • 高级C#技术(二)
  • 【性能测试】基础知识篇-压力模型
  • springboot-redis设置定时触发任务详解
  • Video anomaly detection with spatio-temporal dissociation 论文阅读
  • svn 安装
  • slurm 23.11.0集群 debian 11.5 安装
  • ffmpeg可以做什么
  • 一种缩小数据之间差距的算法
  • 【Axure RP9】动态面板使用------案例:包括轮播图和多方式登入及左侧菜单栏案例
  • 在接口实现类中,加不加@Override的区别
  • 优质全套SpringMVC教程
  • 微信小程序---使用npm包安装Vant组件库
  • GPT-4V被超越?SEED-Bench多模态大模型测评基准更新
  • 数据库_mongoDB
  • Layui实现自定义的table列悬停事件并气泡提示信息
  • Tomcat从认识安装到详细使用
  • 07-Eventing及实践
  • Linux下Netty实现高性能UDP服务
  • Ubuntu 22.04 Tesla V100s显卡驱动,CUDA,cuDNN,MiniCONDA3 环境的安装
  • FFmpeg转码流程和常见概念
  • 【01】GeoScene生产海图或者电子航道图
  • TWS蓝牙耳机的船运模式
  • Vue系列之指令 v-html
  • Mac如何安装stable diffusion
  • Kubernetes (k8s) 快速认知