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

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;
}

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

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

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

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

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

相关文章

C图书信息管理系统 代码+报告

C图书信息管理系统 背景&#xff1a; 在当今信息时代&#xff0c;图书信息管理系统成为图书馆和书店等组织中不可或缺的一部分。随着图书数量的增加和信息化水平的提高&#xff0c;传统的手工管理方式已经无法满足快速、高效、精确的信息管理需求。因此&#xff0c;设计和实现一…

【STM32 物联网】AT指令的介绍

文章目录 前言一、什么是AT指令二、使用AT指令需要注意什么 三、AT指令的分类和提示信息3.1 AT指令的分类3.2 是否保存到Flash的含义3.3 提示信息 总结 前言 本系列STM32物联网使用的为esp8266-01S作为通信模块 在物联网&#xff08;IoT&#xff09;应用中&#xff0c;通信模…

为何 Serverless 革命停滞不前(译)

原文&#xff1a;Bernard Brode - 2020.10.12 主要观点 近几年来&#xff0c;有人预测 Serverless 计算将带来一种全新的计算时代&#xff0c;这种时代的应用程序无需操作系统即可运行。我们被告知这种框架将解决许多可扩展性问题。然而&#xff0c;现实并非如此。尽管许多人…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…

Sora爆火,普通人的10个赚钱机会

您好&#xff0c;我是码农飞哥&#xff08;wei158556&#xff09;&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。&#x1f4aa;&#x1f3fb; 1. Python基础专栏&#xff0c;基础知识一网打尽&#xff0c;9.9元买不了吃亏&#xff0c;买不了上当。 Python从入门到精通…

python-产品篇-游戏-成语填填乐

文章目录 准备代码效果 准备 无需其他文件&#xff0c;复制即用 代码 import random list["春暖花开","十字路口","千军万马","白手起家","张灯结彩","风和日丽","万里长城","人来人往",&…

Java集合篇之深入解析LinkedList

写在开头 作为ArrayList的同门师兄弟&#xff0c;LinkedList的师门地位逊色不少&#xff0c;除了在做算法题的时候我们会用到它之外&#xff0c;在实际的开发工作中我们极少使用它&#xff0c;就连它的创造者都说&#xff1a;“I wrote it&#xff0c;and I never use it”&am…

ESP32-Cam学习(1)——拍摄第一张照片

1.开发板介绍 使用的ESP32-Cam实物图为&#xff1a; 在某宝可以轻易买到。它分为主板&#xff0c;和底板。底板的主要功能是供电、程序下载等等。主板才是ESP32芯片的核心。 2.固件烧录 使用摄像头之前&#xff0c;需要给ESP32刷入支持摄像头的固件库&#xff0c;其下载地址为…

【DSP】ti和SYS/BIOS的printf

1. 引入 目的是在CCS中对printf进行重定向。关键是对fputc和fputs的重写。由下图可知&#xff0c;在sys/bios中的printf函数&#xff0c;会调用fputc打印一般的字符&#xff0c;会调用fputs打印转义字符得到的新的字符串。 2. 改写 首先&#xff0c;根据实际情况&#xff0…

一文了解Web3.0真实社交先驱ERA

Web2时代&#xff0c;少数科技巨头垄断了全球近60亿人口的网络社交数据&#xff0c;并用之为自己牟利&#xff0c;用户无法掌控个人数据&#xff0c;打破该局面逐渐成为共识&#xff0c;于是&#xff0c;不少人看到了Web3社交赛道蕴含的巨大机遇&#xff0c;标榜着去中心化和抗…

jmeter-11数据批量生成(向数据库批量插入数据)

文章目录 场景连接数据库添加循环控制器计数器新建JDBC请求运行结果运行前数据库数据为空运行后数据库多了十条数据场景 当你需要造数据的时候,比如注册20个新用户,这个时候可以使用jmeter与数据库连接,向数据库批量插入数据 连接数据库 具体连接方式:详见《jmeter-07jm…

多线程---创建线程

1.概述 多线程是指从软件或者硬件上实现多个线程并发执行的技术。线程是程序中独立运行的程序片段&#xff0c;每个线程都有独立的执行流程&#xff0c;可以在同一时间内执行不同的任务。具有多线程能力的计算机因有硬件支持而能够在同一时间执行多于一个线程&#xff0c;进而提…

SITLE24V2BNQ-3/TR瞬态电压抑制器

SITLE24V2BNQ是一种瞬态电压抑制器&#xff0c;设计用于保护两个汽车控制器区域 网络(CAN)母线不受ESD等瞬变造成的损坏。 SITLE24V2BNQ采用SOT-23封装。标准产品不含铅和卤素。

openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优

文章目录 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优222.1 前提条件222.2 内存相关参数设置222.3 网络相关参数设置222.4 I/O相关参数设置 openGauss学习笔记-222 openGauss性能调优-系统调优-操作系统参数调优 在性能调优过程中&#xff0c;可以根据…

第6个-滚动动画

Day 6 - Scroll Animation 1. 演示效果 2. 分析思路 布局 所有的内容进行水平垂直居中&#xff0c;可以使用**margin:0 auto;&#xff0c;也可以使用flex**布局&#xff1a; body {background-color: #efedd6;display: flex;flex-direction: column;justify-content: center…

计算机服务器中了_locked勒索病毒怎么办?Encrypted勒索病毒解密数据恢复

随着网络技术的不断发展&#xff0c;数字化办公已经成为企业生产运营的根本&#xff0c;对于企业来说&#xff0c;数据至关重要&#xff0c;但网络威胁无处不在&#xff0c;近期&#xff0c;云天数据恢复中心接到很多企业的求助&#xff0c;企业的计算机服务器遭到了_locked勒索…

GPT4微信机器人部署,集成gpt4问答、midjourney以及新闻等联网功能,免费可添加机器人成为自己专属助理

GPT问答和midjourney作为AI届两大亮点&#xff0c;都各自有官方体验方式。 同时&#xff0c;也有很多大神搭建了各类软件、平台供用户体验使用。 但是如果同时将GPT问答和midjourney集合到日常最常使用的微信呢&#xff1f; 打造一个微信机器人&#xff0c;不仅自己可以随时…

Halcon 相机标定

文章目录 算子单相机标定单相机标定畸变的矫正 算子 gen_caltab 生成标定文件 gen_caltab(::XNum,YNum,MarkDist,DiameterRatio,CalTabDescrFile,CalTabPSFile :) 算子来制作一个标定板XNum 每行黑色标志圆点的数量。YNum 每列黑色标志圆点的数…

自然语言编程系列(二):自然语言处理(NLP)、编程语言处理(PPL)和GitHub Copilot X

编程语言处理的核心是计算机如何理解和执行预定义的人工语言&#xff08;编程语言&#xff09;&#xff0c;而自然语言处理则是研究如何使计算机理解并生成非正式、多样化的自然语言。GPT-4.0作为自然语言处理技术的最新迭代&#xff0c;其编程语言处理能力相较于前代模型有了显…

Attention Is All Your Need论文翻译

0.摘要 这个统治序列转换模型是基于复杂循环或者卷积神经网络&#xff0c;它包含编码器和解码器。表现最好的模型也通过注意力机制来连接编码器和解码器。我们提出了一个新的简单网络架构——Transformer,它仅仅是是基于注意力机制&#xff0c;完全免去递推和卷积。在两个机器…