C基础寒假练习(3)

一、求数组中的第二大值

#include <stdio.h>
int main() 
{
    int arr[] = {12, 35, 1, 10, 34, 1};
    int size = sizeof(arr) / sizeof(arr[0]);

    if (size < 2) 
    {
        printf("数组元素不足两个\n");
        return 0;
    }

    int first = -2147483648, second = -2147483648; // 使用INT_MIN的替代值

    for (int i = 0; i < size; i++) 
    {
        if (arr[i] > first) 
        {
            second = first;
            first = arr[i];
        }
        else if (arr[i] > second && arr[i] != first) 
        {
            second = arr[i];
        }
    }

    if (second == -2147483648) 
    {
        printf("没有第二大值\n");
    }
 else 
    {
        printf("第二大值是: %d\n", second);
    }

    return 0;
}

以下是对代码的详细解释:

  1. 初始化数组和计算大小:

    int arr[] = {12, 35, 1, 10, 34, 1};
    int size = sizeof(arr) / sizeof(arr[0]);
    
  • arr 是一个包含若干整数的数组。
  • size 计算数组的大小,即数组中元素的个数。
  1. 检查数组大小是否足够:

    if (size < 2) 
    {
        printf("数组元素不足两个\n");
        return 0;
    }
    
  • 如果数组中的元素少于两个,程序会输出 "数组元素不足两个" 并终止执行。

初始化变量:

int first = -2147483648, second = -2147483648; // 使用INT_MIN的替代值
  • first 和 second 分别用于存储数组中的最大值和第二大值。初始值设为 -2147483648,这是 int 类型的最小值,相当于 INT_MIN。

遍历数组寻找最大值和第二大值:

for (int i = 0; i < size; i++) 
{
    if (arr[i] > first) 
    {
        second = first;
        first = arr[i];
    }
    else if (arr[i] > second && arr[i] != first) 
    {
        second = arr[i];
    }
}
  • 遍历数组中的每个元素。
  •  如果当前元素大于 first,则更新 second 为 first,并将 first更新为当前元素。
  •  如果当前元素小于 first 但大于 second,并且不等于 first,则更新 second 为当前元素。
  1. 检查并输出结果:

    if (second == -2147483648) 
    {
        printf("没有第二大值\n");
    }
    else 
    {
        printf("第二大值是: %d\n", second);
    }
    
  • 如果 second 仍然是初始值 -2147483648,说明数组中没有第二大的值,输出 "没有第二大值"。
  • 否则,输出找到的第二大值。

总结来说,这段代码通过一次遍历数组来找到最大值和第二大值,时间复杂度为 O(n),其中 n 是数组的大小。

二、终端输入带空格的字符串,删除字符中的空格

#include <stdio.h>

// 计算字符串长度的函数
int my_strlen(const char* str) 
{
    int len = 0;
    while (str[len] != '\0') 
   {
        len++;
    }
    return len;
}

int main()
{
    char str[100];
    char result[100]; // 用于存储没有空格的结果字符串的数组
    int i, j = 0;

    printf("请输入一个字符串: ");
    fgets(str, sizeof(str), stdin);

    // 如果存在换行符,则将其移除
    int len = my_strlen(str);
    if (len > 0 && str[len - 1] == '\n') 
   {
        str[len - 1] = '\0';
    }

    // 处理字符串以删除空格
    for (i = 0; i < len; i++)
    {
        if (str[i] != ' ') 
        {
            result[j++] = str[i];
        }
    }
    result[j] = '\0'; // 终止结果字符串

    printf("删除空格后的字符串: %s\n", result);

    return 0;
}

以下是对代码的详细解释:
1. 计算字符串长度的函数 my_strlen:        
 

int my_strlen(const char* str) 
{
    int len = 0;
    while (str[len] != '\0') 
    {
        len++;
    }
    return len;
}

    • 这个函数用于计算字符串的长度。它通过遍历字符串直到遇到空字符 '\0' 来计算长度。
2. 主函数 main:        

int main()
{
    char str[100];
    char result[100]; // 用于存储没有空格的结果字符串的数组
    int i, j = 0;

    printf("请输入一个字符串: ");
    fgets(str, sizeof(str), stdin);

    • 定义了两个字符数组 str 和 result,分别用于存储输入的字符串和处理后的字符串。
    • 使用 fgets 从标准输入读取字符串,并存储在 str 中。
3. 移除换行符:        
 

    // 如果存在换行符,则将其移除
    int len = my_strlen(str);
    if (len > 0 && str[len - 1] == '\n') 
    {
        str[len - 1] = '\0';
    }

    • 调用 my_strlen 计算字符串的长度。
• 如果字符串末尾有换行符(即 '\n'),则将其替换为空字符 '\0',以移除换行符。
4. 删除空格:        
 

    // 处理字符串以删除空格
    for (i = 0; i < len; i++)
    {
        if (str[i] != ' ') 
        {
            result[j++] = str[i];
        }
    }
    result[j] = '\0'; // 终止结果字符串

    • 遍历输入字符串 str,将非空格字符复制到 result 数组中。
    • 使用变量 j 来跟踪 result 数组的当前位置。
    • 最后,在 result 数组的末尾添加空字符 '\0',以终止字符串。
5. 输出结果:        

    printf("删除空格后的字符串: %s\n", result);

    return 0;
}


   • 返回 0,表示程序正常结束。
总结来说,这段代码实现了一个简单的字符串处理功能,能够读取用户输入的字符串,删除其中的空格,并输出处理后的结果。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/961151.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vue 响应式渲染 - 待办事项简单实现

Vue 渐进式JavaScript 框架 基于Vue2的学习笔记 - Vue 响应式渲染 - 待办事项简单实现 目录 待办事项简单实现 页面初始化 双向绑定的指令 增加留言列表设置 增加删除按钮 最后优化 总结 待办事项简单实现 页面初始化 对页面进行vue的引入、创建输入框和按钮及实例化V…

计算机毕业设计Django+Tensorflow音乐推荐系统 机器学习 深度学习 音乐可视化 音乐爬虫 知识图谱 混合神经网络推荐算法 大数据毕设

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

新增文章功能

总说 过程参考黑马程序员SpringBoot3Vue3全套视频教程&#xff0c;springbootvue企业级全栈开发从基础、实战到面试一套通关_哔哩哔哩_bilibili 之前又偷懒几天。回老家没事干&#xff0c;玩也玩不好&#xff0c;一玩老是被家里人说。写代码吧还是&#xff0c;他们都看不懂&a…

Oracle PMON进程清洗功能

PMON进程 简介 1&#xff0c;在进程非正常中断后&#xff0c;做清理工作。例如&#xff1a;dedicated server失败了或者因为一些原因被杀死&#xff0c;这是PMON的工作分两种。第一&#xff0c;是对dedicated server所做的工作进行恢复或撤销。第二&#xff1a;是释放dedicate…

2025美赛数学建模C题:奥运金牌榜,完整论文代码模型目前已经更新

2025美赛数学建模C题&#xff1a;奥运金牌榜&#xff0c;完整论文代码模型目前已经更新&#xff0c;获取见文末名片

【数据结构】空间复杂度

目录 一、引入空间复杂度的原因 二、空间复杂度的分析 ❥ 2.1 程序运行时内存大小 ~ 程序本身大小 ❥ 2.2 程序运行时内存大小 ~ 算法运行时内存大小 ❥ 2.3 算法运行时内存大小 ❥ 2.4 不考虑算法全部运行空间的原因 三、空间复杂度 ❥ 3.1空间复杂度的定义 ❥ 3.2 空…

[Java]快速入门

java是什么 Java是美国的sun 公司(Stanford University Network)在1995年推出的一门计算机高级编程语言 sun公司于2009年被Oracle(甲骨文)公司收购。 普遍认同lava的联合创始人之一: 詹姆斯高斯林(James Gosling)为Java之父。 Java是世界上最流行的编程语言之一&#xff0c;…

数据分析系列--②RapidMiner导入数据和存储过程

一、下载数据 点击下载AssociationAnalysisData.xlsx数据集 二、导入数据 1. 在本地计算机中创建3个文件夹 2. 从本地选择.csv或.xlsx 三、界面说明 四、存储过程 将刚刚新建的过程存储到本地 Congratulations, you are done.

【源码+文档+调试讲解】基于springboot的高校实验室预约系统

摘 要 高校实验室预约系统是一款专为高等教育机构设计的在线管理工具&#xff0c;旨在简化实验室资源的分配和使用。通过该系统&#xff0c;学生和教师可以轻松查看实验室的空闲时间&#xff0c;并进行实时预约。系统支持不同用户权限设置&#xff0c;确保资源合理分配&#x…

MIMIC-IV数据部署(博主较忙,缓慢更新)

1. 用到的数据准备 在下面的网站&#xff0c;注册、申请、推荐人从邮箱里帮忙确认。 通过后&#xff0c;拉到页面的最下面。把那个将近10个G的文件给下载下来。 可以在晚上睡觉的时候下载&#xff0c;第二天早上起来“收数据”。 MIMIC-IV v3.1 2. 用到的软件准备 7-zip …

6. 使用springboot做一个音乐播放器软件项目【1.0版项目完结】附带源码~

#万物OOP 注意&#xff1a; 本项目只实现播放音乐和后台管理系统。 不分享任何音乐歌曲资源。 上一篇文章我们 做了音乐播放器后台的功能。参考地址&#xff1a; https://jsonll.blog.csdn.net/article/details/145214363 这个项目已经好几天也没更新了&#xff0c;因为临近放…

macbook安装go语言

通过brew来安装go语言 使用brew命令时&#xff0c;一般都会通过brew search看看有哪些版本 brew search go执行后&#xff0c;返回了一堆内容&#xff0c;最下方展示 If you meant "go" specifically: It was migrated from homebrew/cask to homebrew/core. Cas…

装机爱好者的纯净工具箱

对于每一位电脑用户来说&#xff0c;新电脑到手后的第一件事通常是检测硬件性能。今天为大家介绍一款开源且无广告的硬件检测工具——入梦工具箱。 主要功能 硬件信息一目了然 打开入梦工具箱&#xff0c;首先看到的是硬件信息概览。这里不仅包含了内存、主板、显卡、硬盘等常…

数据分析系列--③RapidMiner算子说明及数据预处理

一、算子说明 1 新建过程 2 算子状态灯 状态灯说明: (1)状态指示灯&#xff1a; 红色:指示灯说明有参数未被设置或输入端口未被连接等问题; 黄色:指示灯说明还未执行算子&#xff0c;不管配置是否基本齐全; 绿色:指示灯说明一切正常&#xff0c;已成功执行算子。 (2)三角…

PVE 虚拟机安装 Debian 无图形化界面服务器

Debian 安装 Debian 镜像下载 找一个Debian镜像服务器&#xff0c;根据需要的版本和自己硬件选择。 iso-cd/&#xff1a;较小&#xff0c;仅包含安装所需的基础组件&#xff0c;可能需要网络访问来完成安装。有镜像 debian-12.9.0-amd64-netinst.isoiso-dvd/&#xff1a;较…

操作系统指定用户密码永不过期

背景 实际生产环境中&#xff0c;数据中心操作系统通常会有基线要求&#xff08;比如等保之类&#xff09;&#xff0c;要求设置操作系统密码有效期&#xff0c;但是infra团队或者操作系统管理员或者某些业务配置使用的操作系统用户又需要密码不能不停修改&#xff08;或者说一…

npm:升级自身时报错:EBADENGINE

具体报错信息如下&#xff1a; 1.原因分析 npm和当前的node版本不兼容。 // 当前实际版本: Actual: {"npm":"10.2.4","node":"v20.11.0"}可以通过官网文档查看与自己 node 版本 兼容的是哪一版本的npm&#xff0c;相对应进行更新即可…

解决报错“The layer xxx has never been called and thus has no defined input shape”

解决报错“The layer xxx has never been called and thus has no defined input shape”(这里写自定义目录标题) 报错显示 最近在跑yolo的代码时遇到这样一个错误&#xff0c;显示“the layer {self.name} has never been called”.这个程序闲置了很久&#xff0c;每次一遇到…

【图文详解】lnmp架构搭建Discuz论坛

安装部署LNMP 系统及软件版本信息 软件名称版本nginx1.24.0mysql5.7.41php5.6.27安装nginx 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客: 关闭防火墙 systemctl stop firewalld &&a…

基于物联网的火灾报警器设计与实现(论文+源码)

1 总体方案设计 本次基于物联网的火灾报警器&#xff0c;其系统总体架构如图2.1所示&#xff0c;采用STM32f103单片机作为控制器&#xff0c;通过DS18B20传感器实现温度检测&#xff1b;通过MQ-2烟雾传感器实现烟雾检测&#xff1b;.通过火焰传感器实现火焰检测&#xff0c;当…