C语言--一维数组

news2024/9/20 18:36:08

数组概念

数组:是一种构造数据类型,用以处理批量的同种类型的数据。

主要特点:数据量大 ,类型相同

一维数组的定义

语法:
类型说明符 数组名[整型常量表达式];
注意:
方括号里面的内容用于指明数组长度,即数组的元素个数,必须是整型常量表达式
定义数组的实质是在内存中预留一段连续的储存空间以存放数组的全部元素。数组名表示这段连续的存储空间的起始地址(也称为首地址)空间大小由数组类型和元素个数确定

一维数组的使用

  1. 一维数组的初始化
    同普通变量一样,数组元素也要初始化赋值以后才能使用。 数组属构造数据类型,数组元索是组成数组的基本单位,每个元素是一个下标变量,因此有两种初始化数组元素的方法。

(1)在定义数组的同时初始化数组元索一般形式如下:
类型说明符 数组名[整型常量表达式]={数据值 1,数据值 2,…数据值N};
其中在{}中的各数据值即为对应的各元素初值,各值之间用逗号间隔。
例如,执行语句“int score[10]={90,78,80,85,61,70,95,81,58,76};”后,数组元素score[0]~score[10]的值依次为90,78,80,85,61,70,95,81,58,76
C语言对数组的初始化赋值还有以下几点规定。
① 可以只给部分元素赋初值。
当{}中值的个数少于元素个数时,这时只给前面部分元素赋值,其余未获得初值的元素系统默认赋值为 0。但{}中值的个数不能多于元素个数,也不能一个也没有。例如:
int score[10]={90,78,80,85,61};
表示只给 score[0]~score[4]赋值,而元素 score[5]-score[9]将自动赋0值。
② 只能给元素逐个赋值,不能给数组整体赋值。例如:给 10个元素全部赋1值,只能写为: int score[10]={1,1,1,1,1,1,1,1,1,1};
而不能写为: int a[10]=1;
③ 若给全部元素赋值,则在数组说明中,可以不给出数组元素的个数。系统会自动把(}中的数据个数定义为数组的长度。

(2)先定义数组,再初始化数组元素,这时通常采用循环结构。

#include <stdio.h>
int main()
{
    int i, score[10];
    for (i = 0; i < 10; i++)
    {
        scanf("%d", &score[i]);
    }
    printf("%d", score[1]);
    return 0;
}
  1. 一维数组元素的引用

在C语言中只能逐个地引用数组元素,而不能对数组进行整体引用。例如:
要输出 score 数组中的 50 个数组元素,必须使用循环语句逐个输出各数组元素 (即下标变量):

#include <stdio.h>
int main()
{
    int i, score[10];
    for (i = 0; i < 10;)
    {
        score[i++] = 2 * i;
    }
    for (i = 0; i <= 9; i++)
    {
        printf("%4d", score[i]);
    }
    return 0;
}

一维数组的应用举例

  1. 删除数组元素

已知数组a已经存放有N个其值互不相同的整数。现从键盘输入一个数 x,要求从数组中删除与 x 相等的元素,并将其后的元素逐个向前递补,且将最后一个元素置 0 值。输出删除后的数组。如原数组中无此数,则输出相应提示信息,提示不存在该值的元素。

#include <stdio.h>
#define N 10
int main()
{
    int i, x, flag = 0, k;
    int a[N] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    printf("原数组值:\n");
    for (i = 0; i < N; i++)
    {
        printf("%d", a[i]);
    }
    printf("请输入要删除的元素值:\n");
    scanf("%d", &x);
    for (i = 0; i < N; i++)
    {
        if (a[i] == x)
        {
            flag = 1;
            k = i;
            break;
        }
    }
    if (flag == 0)
    {
        printf("该数组中不存在该值!\n");
    }
    else
    {
        if (k == N - 1)
        {
            a[N - 1] = 0;
        }
        else
        {
            for (i = k; i < N - 1; i++)
            {
                a[i] = a[i + 1];
            }
            a[i] = 0;
        }
        printf("\n删除元素%d后的数组值:", x);
        for (i = 0; i < N; i++)
        {
            printf("%4d", a[i]);
        }
    }
    return 0;
}

终端:
在这里插入图片描述

  1. 一维数组的排序

从键盘输入 N 个整数,将其升序排列

A.冒泡排序法

#include <stdio.h>
#define N 10
int main()
{
    int a[N], i, j, t; // 定义中间变量 t
    printf("请输入%d个数据\n", N);
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
    }
    for (j = 0; j < N - 1; j++) // 一共 N 个数 要进行 N - 1 趟比较
    {
        for (i = 0; i <= N - 1 - j; i++) // 每一趟中需要两两比较的次数
        {
            if (a[i] > a[i + 1])
            {
                t = a[i];
                a[i] = a[i + 1];
                a[i + 1] = t;
            }
        }
    }
    printf("升序排列如下:\n");
    for (j = 0; j < N; j++)
    {
        printf("%3d", a[j]);
    }
    return 0;
}

终端:
在这里插入图片描述
B.选则排序法
具体实现思路:
逐次选择数组 a中的元素a[i] (i = 0,1,2,3,4,…,N - 2) 与它后边的每一个元素 a[j] (j = i+1,…,N - 1) 进行逐个比较,将a[i]至a[N-1]中的最小值与a[i]交换 (要保证a[i]比任何a[j]都要小)。重复这个过程 N - 1 次,最后 a 数组中元素便被升序排列

#include <stdio.h>
#define N 10
// 定义数组a[N],下标变量i,j,交换使用中间变量 t,记录 a[i] 至 a[N] 中最小元素的下标变量
int main()
{
    int a[N], i, j, k, t;
    for (i = 0; i < N; i++)
    {
        scanf("%d", &a[i]);
    }
    for (i = 0; i < N - 1; i++)
    {
        k = i;
        for (j = i + 1; j < N; j++)
        {
            if (a[j] < a[k])
            {
                k = j;
            }
            if (k != i)
            {
                t = a[k];
                a[k] = a[i];
                a[i] = t;
            }
        }
    }
    printf("升序排列后的结果为:\n");
    for (i = 0; i < N; i++)
    {
        printf("%3d", a[i]);
    }
    return 0;
}

终端:
在这里插入图片描述

  1. 数组中递推的应用

利用一维数组,输出斐波那契数列:
1,1,2,3,5,8,13,21,34,55,89…

分析:显然这是一个典型的递推问题,其递推公式如下:
{
当 i = 1; a [i] = 1;
当 i = 2; a [i] = 2;
当 3 <= i <= N; a[i] = a[i-1] + a[i+1];
}
利用循环结构实现设计:

#include <stdio.h>
#define N 10
int main()
{
    long i, a[N] = {1, 1};
    for (i = 2; i < N; i++)
    {
        a[i] = a[i - 1] + a[i - 2]; // 用递推公式依次计算出a[2].......
    }
    for (i = 0; i < N; i++)
    {
        printf("%ld\t", a[i]);
        if ((i + 1) % 5 == 0)
        {
            printf("\n"); // 每输入 5 个数就换行
        }
    }
    return 0;
}

在这里插入图片描述

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

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

相关文章

css3横向无限公告消息滚动功能

html部分 {{item}}css部分 .boxingeds{ display: flex; flex-wrap: wrap; width: 150%; position: relative; left: 1000rpx; padding: 30rpx 0; position: absolute; top: 23%; z-index: 2; -webkit-animation: myfirst 30s linear 2s infinite; .textname{ display: inlin…

数字三角形 购物单

题目&#xff1a; 题目描述 上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径&#xff0c;把路径上面的数加起来可以得到一个和&#xff0c;你的任务就是找到最大的和。 路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边…

从0开始自制解释器——实现简单的加法计算器

为什么要学习编译器和解释器呢&#xff1f;文中的作者给出的答案有下面几个&#xff1a; 为了深入理解计算机是如何工作的&#xff1a;一个显而易见的道理就是&#xff0c;如果你不懂编译器和解释器是如何工作的那么你就不明白计算机是如何工作的编译器和解释器用到的一些原理…

InnoDB——详细说明索引中B+树的操作和原理

本内容针对Mysql5.x&#xff1b; 索引是应用程序设计和开发的一个重要方面。 若索引太多&#xff0c;应用程序的性能可能会收到影响。 而索引太少&#xff0c;对查询性能又会产生影响。 索引的注意事项&#xff1a; 如果知道数据的使用&#xff0c;从一开始就应该在需要处添加…

车企数据分类分级的实践指南出炉!“数据安全推进计划”发布,奇点云参编

日前&#xff0c;“数据安全推进计划”&#xff08;DSI&#xff09;正式发布《智能网联汽车数据分类分级实践指南》&#xff08;下文简称“指南”&#xff09;&#xff0c;旨在以合规为主要导向&#xff0c;明确智能网联汽车数据分类分级的方法论&#xff0c;为数据全生命周期的…

每日学术速递3.7

CV - 计算机视觉 | ML - 机器学习 | RL - 强化学习 | NLP 自然语言处理 Subjects: cs.CV 1.Dropout Reduces Underfitting 标题&#xff1a;Dropout 减少欠拟合 作者&#xff1a;Zhuang Liu, Zhiqiu Xu, Joseph Jin, Zhiqiang Shen, Trevor Darrel 文章链接&#xff1a;h…

SpringBoot(Tedu)—DAY01——环境搭建

SpringBoot(Tedu)—DAY01——环境搭建 目录SpringBoot(Tedu)—DAY01——环境搭建零、今日目标一、IDEA2021项目环境搭建1.1 通过 ctrl鼠标滚轮 实现字体大小缩放1.2 自动提示设置 去除大小写匹配1.3 设置参数方法自动提示1.4 设定字符集 要求都使用UTF-8编码1.5 设置自动编译二…

controller-runtime搭建operator开发环境

目录 基本结构 注入CRD 基本结构 首先下载相应的go pkg go get -u sigs.k8s.io/controller-runtime 接下来需要创建控制器和Manager Operator的本质是一个可重入的队列编程模式&#xff0c;而Manager可以用来管理Controller、Admission Webhook&#xff0c;包括访问资源对…

MATLAB算法实战应用案例精讲-【优化算法】樽海鞘群算法(SSA)及其算法变种(附matlab代码实现)

目录 前言 算法原理 算法思想 数学模型 &#xff08;1&#xff09;种群初始化 &#xff08;2&#xff09;领导者位置更新 &#xff08;3&#xff09;跟随者位置更新 代码实现 算法流程图 算法步骤 伪代码 SSA伪代码 MSSA伪代码 面向全局搜索的自适应领导者樽海鞘群算…

同模块设置不同应用主题方案

有时候公司内部会有不同应用但是有部分模块功能一样&#xff0c;只根据应用角色有些细节逻辑区分的场景。这时候往往采用模块化采用以应用至不同的APP。如果APP主题不一致&#xff0c;该如果解决。 方案&#xff1a; 在不同应用的config.gradle 下面根据不同应用定义不同的a…

基于SSM+SpringBoot《CRM客户关系管理系统》实战开发教程(附文档及源码)

1.项目简介 客户关系管理&#xff08;Customer Relationship Management&#xff0c;简称CRM&#xff09;&#xff0c;是指企业为提高核心竞争力&#xff0c;利用相应的信息技术以及互联网技术协调企业与顾客间在销售、营销和服务上的交互&#xff0c;从而提升其管理方式&…

AUTOSAR知识点Com(一):CANIf入门知识

目录 1、概述 2、上下层关系 2.1 上层 2.2 下层 3、链接 4、记录项 1、概述 下面主要是规范方面的描述&#xff1a; 参考文档《AUTOSAR_SWS_CANInterface.pdf》 CAN接口模块&#xff08;下文简“CanIf”&#xff09;位于底层CAN驱动&#xff08;CanDrv&#xff09;、CA…

华为机试题:HJ103 Redraiment的走法(python)

文章目录&#xff08;1&#xff09;题目描述&#xff08;2&#xff09;Python3实现&#xff08;3&#xff09;知识点详解1、input()&#xff1a;获取控制台&#xff08;任意形式&#xff09;的输入。输出均为字符串类型。1.1、input() 与 list(input()) 的区别、及其相互转换方…

【Python笔记20230307】

基础 编码、解码 str.encode(utf-8) # 编码 str.decode(utf-8) # 解码关键字 import keyword keyword.kwlist格式化输出 % 占位符:%s 字符串%d 整数%f 浮点数Hello, %s % world Hi, %s, you have $%d. % (Michael, 1000000) 占位符的修饰符 -左对齐 .小数点后位数 0左边补零…

SpringCloud简介

一、注册中心 1、为什么需要用到注册中心&#xff1f; 让消费者服务及时知道提供者服务的状态。例如&#xff1a;是否宕机、是否增加了集群实例等。 2、dubbo和zookeeper 特点&#xff1a;服务消费端订阅注册中心。服务提供端增加实例会把新实例注册到注册中心&#xff0c;…

HCIP知识点(前三天)

复习HCIA&#xff1a; 一、TCP/IP模型&#xff0c;OSI模型 OSI 开放式系统互联参考模型 应用层 抽象语言—>编码 表示层 编码—>二进制 会话层 应用程序内部的区分地址&#xff08;无标准格式&#xff09; 传输层 TCP/UDP – 分段&#xff08;受MTU限制&#xff09;、端…

C 语言网络编程 — PF_NETLINK sockets

目录 文章目录目录PF_NETLINK socketsPF_NETLINK sockets Linux 提供了 4 种 User Process 和 Kernel 之间进行通信的 IPC&#xff08;Inter-Process Communicate&#xff0c;进程间通信&#xff09;方式&#xff1a; /procioctlsysfsPF_NETLINK sockets&#xff08;Netlink …

vue大型商城系统中遇到的问题(上)

一&#xff1a;创建仓库1.领导创建git仓库&#xff08;参考————这篇文章&#xff09;&#xff0c;新手下载git2.打开cmd终端&#xff0c;将git仓库拉到本地3.进入文件目录&#xff0c;查看分支&#xff08;新手向——为什么需要创建分支&#xff0c;查看---&#xff09;4.创…

HCIP笔记

第一天 ARP协议 正向ARP&#xff1a;通过IP地址获取目的MAC地址 过程&#xff1a; 目的IP到目的MAC再到ARP表中&#xff0c;所需时间是180s 反向ARP&#xff1a;通过目标MAC地址获取目标IP地址 免费ARP&#xff1a;利用正向ARP的原理请求自己的IP地址 1.自我检测 2.检测地址冲…

使用JMeter 录制脚本

使用JMeter 录制脚本&#xff0c;参考的一个博主的&#xff0c;我记录到我这里&#xff0c;留着以后用哈哈哈哈 1&#xff0c;添加 HTTP代理服务器 测试计划右键–》添加–》非测试元件–》http代理服务器 2&#xff0c;添加线程组&#xff0c;用来存放录制脚本的&#xff0c…