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

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


http://www.kler.cn/a/523315.html

相关文章:

  • MYSQL 商城系统设计 商品数据表的设计 商品 商品类别 商品选项卡 多表查询
  • AI编译器之——为什么大模型需要Relax?
  • 【C语言】main函数解析
  • PyTorch API 详细中文文档,基于PyTorch2.5
  • 【JavaWeb06】Tomcat基础入门:架构理解与基本配置指南
  • 高级编码参数
  • 基础IO相关知识
  • 使用jmeter进行压力测试
  • 安全漏洞扫描与修复系统的高质量技术详解
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-LangGraph-链式处理(一)
  • scratch学习教程
  • 0 基础学运维:解锁 K8s 云计算运维工程师成长密码
  • Lustre Core 语法 - 比较表达式
  • 如果我想设计一款复古风格的壁纸,应该选什么颜色?
  • JMeter插件PerfMon Metrics Collector:全方位服务器性能监控指南
  • 在Scene里面绘制编辑工具
  • 双指针(典型算法思想)——OJ例题算法解析思路
  • 05_任务的删除
  • 【第十天】零基础入门刷题Python-算法篇-数据结构与算法的介绍-两种常见的字符串算法(持续更新)
  • JavaScript系列(48)-- 3D渲染引擎实现详解
  • week08_文本匹配任务
  • 嵌入式知识点总结 Linux驱动 (一)-指令-常用Linux指令 GCC指令 GDB调试指令 驱动开发指令
  • 个人通知~~~
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》030-自定义组件的插槽Mixin
  • Julius AI 人工智能数据分析工具介绍
  • Ubuntu20.04 磁盘空间扩展教程