C语言—数组一维(含冒泡排序)

news2024/11/28 0:55:48

1.用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;  

/*1.用数组存储10个整型数,通过键盘输入一个数,找出该数在数组中的下标值;*/

#include <stdio.h>

int main(void)
{
    int nums[10] = {11,22,33,44,55,66,77,88,99,100};
    int i;
    int n;

    //遍历数组的数打印给用户
    printf("数组中的元素为:");

    for(i = 0;i < 10;i++)
    {
        printf("%-3d",nums[i]);
    }
    printf("\n");

    //让用户输入一个整数
    printf("请输入一个整数:");
    scanf("%d",&n);

    for(i = 0; i < 10;i++)  //遍历数组的元素
    {
        if(nums[i] == n)
        {
            break;  //找到与之匹配的元素,跳出循环
        }
    }

    if(i < 10)  //下标小于10说明找到了输入的数
    {
        printf("该数组的下标值为: %d\n",i);
    }
    else
    {
        printf("数组中未找到该数。\n");
    }

    return 0;
}


2.通过键盘输入 10 个学员成绩,
   1)输出不及格学员的成绩和下标。
   2)求最高分的下标值
   3)求最低成绩的下标值
   4)求总成绩及平均成绩

/*2.通过键盘输入 10 个学员成绩,
   1)输出不及格学员的成绩和下标。
   2)求最高分的下标值
   3)求最低成绩的下标值
   4)求总成绩及平均成绩 */

#include <stdio.h>

int main(void)
{
    float score[10] = {0};
    int i = 0;

    for(i = 0;i < 10;i++)
    {
        printf("请输入第%d个学生成绩:",i+1);
        scanf("%f",&score[i]);
    }

    float sum =0;
    int maxid = 0,minid = 0;

    for(i = 0;i < 10;i++)
    {
        sum += score[i];
        if(score[i] < 60)
        {
            printf("下标为%d的学生成绩不合格,成绩为:%.1f\n",i,score[i]);
        }

        if(score[maxid] < score[i])  //这里当最大值小于数组的元素i,则将i赋值给maxid
        {
            maxid = i;
        }
        if(score[minid] > score[i])  //当最小值minid大于数组元素i,则将数组i赋值给minid
        {
            minid = i;
        }
    }

    float ave = sum / 10;  //求均值

    printf("=================================\n");
    printf("最高分: %.1f,下标为: %d\n",score[maxid],maxid);
    printf("最低分: %.1f,下标为: %d\n",score[minid],minid);
    printf("总成绩: %.1f,平均成绩为: %.1f\n",sum,ave);

    return 0;
}


3.利用冒泡的排序思想将数据由大到小排序;

    数据的典型应用--数据排序
       冒泡排序
            向后冒泡(算法思想):1.两两进行数据交换,一次排序只排好最大的一个数,第二次是次大以此类推,交换(两两进行交换)
             向前冒泡:认为第一个数据已经排好,所有数据和第一个数据进行交换,第二次所有的数和第二个数 据进行交换(固定好一个数据其他数据进行交换)到n-2数据排序结束

1)向后冒泡(第一次把最大的数排号,第二次把次大的排序...以此类推向后冒泡)

数组不能越界

(全部比较数据会减少)

(依次排序过程两辆交换,一次排好一个数)

(嵌套循环经过多次)

(每完成一次数据减少)7 4 6 2 3 8 1 5

1. 一次排序只排好一个数,针对 n 个数,最差情况需要 n -1 次排序就可以排好;
2. 每次排序将相邻两个数据两两比较,将较大/较小的数向后交换,等所有的数据都比较完毕,较大/较小的数就会出现在最后,这也是该数应该有的位置。也就是说 排好了一个数;
3. 在剩余的数据中,再次应用第2步的操作,直到只剩下一个数。

#include <stdio.h>

int main(void)
{
    int a[] = {7,4,6,2,3,8,1,5};
    int n = sizeof(a) / sizeof(a[0]);
    int i = 0,j = 0;

    for(i = 0; i < n; i++)
    {
         printf("%3d",a[i]);
    }
    printf("\n");

    for(i = 0; i < n-1; i++)
    {
         for(j = 0; j < n-1 - i;j++)
         {
               if(a[j] > a[j+1])  //前一个比后一个元素大,进行交换
               {
                    int t = a[j];
                    a[j]  = a[j+1];
                    a[j+1]= t;
               }
         }
    }
    printf("========排序后========\n");
    for(i = 0; i < n; i++)
    {
         printf("%3d",a[i]);
    }
    printf("\n");

    return 0;
}

2)向前冒泡:向前冒泡从第二个元素开始和第一个数(固定数)比较,位置不动,先把最小的排出来在(认为一个数最小开始比较)

1. 一次排序只排好一个数,针对 n 个数,最差情况需要 n -1 次排序就可以排好;
2. 每次排序假定第一个数据是最大/最小的.用第一个数据之后的所有数据和第一个数据比较,遇到较大/较小的数据和第一个数据交换,访问完所有的数据,最前面的数据就排好了。
3. 在剩余的数据中,再次应用第2步的操作,直到只剩下一个数。

#include <stdio.h>

int main(void)
{
     int a[] = {7,9,1,4,5,8,3,2,6};
     int n = sizeof(a) / sizeof (a[0]); //计算数组元素的总数,一个很好用的公式

     int i = 0,j = 0;
     for(i = 0; i < n; i++)
     {
          printf("%3d",a[i]);   打印数组元素,%3d指定宽度为3,不足部分用空格填充
     }
     printf("\n");

     for(i = 0; i < n-1;i++)  // 外层循环用于控制排序次数
     {
          for(j = i+1; j < n; j++)  //内层循环实现每一次排序,找到从i+1到n-1的元素
          {
                if(a[j] < a[i])  //若找到更小元素,更新下标也就是索引
                {
                     int t = a[j];
                     a[j] = a[i];
                     a[i] = t;
                }
          }
     }
     for(i = 0; i < n; i++)
     {
          printf("%3d",a[i]);
     }
     printf("\n");

     return 0;
}

冒泡排序是排序中最简单的(?),当然也是效率最低的,她一次只排好一个数

区别:思想上是有一点点区别的,当然最后结果是一致的

向后冒泡:是通过比较和交换相邻元素来逐渐将最大的元素移动到数组的末尾。
向前冒泡:通过在每次外层循环中找到未排序部分的最小元素,并将其移动到未排序部分的起始位置。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

静态时序分析:SDC约束命令set_clock_uncertainty

相关阅读 静态时序分析https://blog.csdn.net/weixin_45791458/category_12567571.html?spm1001.2014.3001.5482 set_clock_uncertainty是用来指定设计中时钟周期的不确定性&#xff0c;不确定性指的是对那些会对时钟周期造成的负面影响。这些不确定性可能来源于时钟抖动(clo…

mysql8.0.36主从复制(读写分离)配置教程

1、关闭防火墙 使用命令行关闭防火墙 在Ubuntu系统中&#xff0c;可以使用以下命令关闭防火墙&#xff1a; sudo ufw disable执行该命令后&#xff0c;系统会提示是否要关闭防火墙&#xff0c;确认后即可关闭防火墙。 查看防火墙状态 使用以下命令可以查看防火墙当前的状…

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数

代码随想录Day50 | 70. 爬楼梯 322. 零钱兑换 279.完全平方数 70.爬楼梯322.零钱兑换279.完全平方数 70.爬楼梯 文档讲解&#xff1a;代码随想录 视频讲解&#xff1a; 状态 dp数组 dp[j]表示爬上第j阶台阶需要的方法数递推公式&#xff0c;由于在每一阶台阶可以向上走1~m阶&a…

AGV|RGV基本概念及导航分类与差异

AGV是自动导引运输车&#xff0c;装备采用电磁或光学等自动导引装置&#xff0c;能够沿规定的导引路径行驶&#xff0c;具有安全保护以及各种移载功能的运输车。其导航方式主要分磁条|磁钉导航、激光导航、激光反光板、激光自然导航、二维码导航、惯性导航等方式&#xff0c;广…

Java学习手册——第七篇基础语法

Java学习手册——第七篇基础语法 1. 注释2. 顺序语句3. 条件语句3.1 if语句3.2 switch语句 4. 循环语句4.1 for循环4.2 while 语句4.3 do...while语句 本篇为大家快速入门Java基础语法&#xff0c;了解一个语言的基础语法是必要的&#xff0c; 因为我们后期都是需要用这些基础语…

Kafka(三)(集成SpringBoot)

第三章 Kafka集成 SpringBoot SpringBoot 是一个在 JavaEE 开发中非常常用的组件。可以用于 Kafka 的生产者&#xff0c;也可以 用于 SpringBoot 的消费者。 在初始化springboot环境的时候要勾选kafka依赖 <dependency><groupId>org.springframework.kafka</gr…

【基础】第K大与第K小数

说明 给定一个长度为N(0< n< 10000)的序列&#xff0c;保证每一个序列中的数字a[i]是正整数 &#xff0c;编程要求求出整个序列中第k大的数字减去第k小的数字的值m&#xff0c;并判断m是否为质数。(0< k< n) 输入数据 第一行为2个数n&#xff0c;k&#xff08;…

步步深入 k8s 使用 pv pvc sc 在 nfs 基础上共享存储

博客原文 文章目录 前言集群环境nfs 环境搭建pod 挂载 nfs架构图 pvc 方式挂载 nfs架构图 storageclass 方式动态申请 pv架构图 参考 前言 持久化卷&#xff08;Persistent Volume, PV&#xff09;允许用户将外部存储映射到集群&#xff0c;而持久化卷申请&#xff08;Persist…

[Java][算法 滑动窗口]Day 02---LeetCode 热题 100---08~09

第一题 无重复字符串的最长子串 思路 其实就是在字符串S中 找到没有重复的最长子串的长度 这道题的难点就是在于如何判断最长并且无重复 首先 最长长度 可以使用变量max记录保存 再者 判断有无重复 最简单的方法就是 暴力遍历法 即对于每次找的子串都再次寻找遍历…

【Django】Django内建用户系统

Django内建用户系统 14.1 Django中的用户认证 Django带有一个用户认证系统系统&#xff0c;它处理用户用户账号、组、权限以及基于cookie的用户会话。 用户可以直接使用Django自带的用户表。 官方文档&#xff1a;https://docs.djangoproject.com/zh-hans/2.2/topics/auth/ …

计算机组成原理 2 数据表示

机器数 研究机器内的数据表示&#xff0c;目的在于组织数据&#xff0c;方便计算机硬件直接使用。 需要考虑&#xff1a; 支持的数据类型&#xff1b; 能表示的数据精度&#xff1b; 是否有利于软件的移植 能表示的数据范围&#xff1b; 存储和处理的代价&#xff1b; ... 真值…

ELAdmin 配置定时任务

定义方法 在自己的 Module 中写个要执行的方法。 比如获取微信公众号的 accessToken&#xff0c;每两个小时更新一次。这种的其实使用 Spring 的 Scheduled 更方便些&#xff0c;此处仅为演示。 package me.zhengjie.mp.task;import com.alibaba.fastjson.JSON; import lombo…

基于Linux的nfs、samba网络服务搭建

我学的Ubuntu&#xff0c;以它为例子 一、nfs(linux <---> linux) 1.1.nfs首先搭建服务端&#xff08;对外共享&#xff09; //安装nfs核心服务 sudo apt update sudo apt install nfs-kernel-server //配置nfs文件(指定共享文件) sudo vim /etc/exports //重启nf…

H5 渐变3D旋转个人主页引导页源码

H5 渐变3D旋转个人主页引导页源码 源码介绍&#xff1a;一款渐变3D旋转个人主页引导页源码&#xff0c;可以做个人主页/旗下网站引导 下载地址&#xff1a; https://www.changyouzuhao.cn/10392.html

第三百四十五回

文章目录 1. 概念介绍2. 方法与功能2.1 基本用法2.2 加密算法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"FlutterCacheManager组件"相关的内容&#xff0c;本章回中将介绍一个加密工具包.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 加密主要…

【MySQL进阶之路】通过实操理解 explain 执行计划

欢迎关注公众号&#xff08;通过文章导读关注&#xff1a;【11来了】&#xff09;&#xff0c;及时收到 AI 前沿项目工具及新技术的推送&#xff01; 在我后台回复 「资料」 可领取编程高频电子书&#xff01; 在我后台回复「面试」可领取硬核面试笔记&#xff01; 文章导读地址…

【刷题记录】——2024寒假day9编程题

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 1.目录大纲&#xff1a; 2.题目链接&#xff1a; T1:LINK T2:LINK 3.详解思路&#xff1a; T1: 思路&#xff1a; /*** Note: The returned array must be malloced, assume caller calls free().*/#include<…

计算机网络——11EMail

EMail 电子邮件&#xff08;EMail&#xff09; 3个主要组成部分 用户代理邮件服务器简单邮件传输协议&#xff1a;SMTP 用户代理 又名“邮件阅读器”撰写、编辑和阅读邮件输入和输出邮件保存在服务器上 邮件服务器 邮箱中管理和维护发送给用户的邮件输出报文队列保持待发…

【成长记录】第一次写博客入csdn榜单了 还是第一.....

庆祝一下第一次拿综合榜榜一 Java内容榜第二 总之谢谢大家支持 小苏会继续努力的 可以看看我的新作 嘻嘻&#x1f601;&#x1f924;&#x1f449;&#x1f3fb;&#x1f448;&#x1f3fb; 谢谢大家

web3知识体系汇总

web3.0知识体系 1.行业发展 2. web3的特点&#xff1a; 1、统一身份认证系统 2、数据确权与授权 3、隐私保护与抗审查 4、去中心化运行 Web3.0思维技术思维✖金融思维✖社群思维✖产业思维”&#xff0c;才能从容理解未来Web3.0时代的大趋势。 3.技术栈 Web3.jsSolidit…