C语言程序设计-7 数组

	在程序设计中,为了处理方便,把具有相同类型的若干变量按有序的形式组织起来。这

些按序排列的同类数据元素的集合称为数组。在C语言中,数组属于构造数据类型。一个数
组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组
元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。本
章介绍数值数组和字符数组,其余的在以后各章陆续介绍。

7.1 一维数组的定义和引用

7.1.1 一维数组的定义方式

7.1.2 一维数组元素的引用

【例 7.1】

main()
{
    int i, a[10];
    for (i = 0; i <= 9; i++)
        a[i] = i;
    for (i = 9; i >= 0; i--)
        printf("%d ", a[i]);
}

【例 7.2】

main()
{
    int i, a[10];
    for (i = 0; i < 10;)
        a[i++] = i;
    for (i = 9; i >= 0; i--)
        printf("%d", a[i]);
}

【例 7.3】

main()
{
    int i, a[10];
    for (i = 0; i < 10;)
        a[i++] = 2 * i + 1;
    for (i = 0; i <= 9; i++)
        printf("%d ", a[i]);
    printf("\n%d %d\n", a[5.2], a[5.8]);
}

本例中用一个循环语句给 a 数组各元素送入奇数值,然后用第二个循环语句输出各个奇
数。在第一个 for 语句中,表达式 3 省略了。在下标变量中使用了表达式 i++,用以修改循
环变量。当然第二个 for 语句也可以这样作,C语言允许用表达式表示下标。 程序中最后
一个 printf 语句输出了两次 a[5]的值,可以看出当下标不为整数时将自动取整。

7.1.3 一维数组的初始化

7.1.4 一维数组程序举例

【例 7.4】

main()
{
    int i, max, a[10];
    printf("input 10 numbers:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    max = a[0];
    for (i = 1; i < 10; i++)
        if (a[i] > max)
            max = a[i];
    printf("maxmum=%d\n", max);
}

【例 7.5】

main()
{
    int i, j, p, q, s, a[10];
    printf("\n input 10 numbers:\n");
    for (i = 0; i < 10; i++)
        scanf("%d", &a[i]);
    for (i = 0; i < 10; i++)
    {
        p = i;
        q = a[i];
        for (j = i + 1; j < 10; j++)
            if (q < a[j])
            {
                p = j;
                q = a[j];
            }
        if (i != p)
        {
            s = a[i];
            a[i] = a[p];
            a[p] = s;
        }
        printf("%d", a[i]);
    }
}

7.2 二维数组的定义和引用

7.2.1 二维数组的定义

7.2.2 二维数组元素的引用

在这里插入图片描述

#include <stdio.h>

main()
{
    int i, j, s = 0, average, v[3], a[5][3];
    printf("input score\n");
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 5; j++)
        {
            scanf("%d", &a[j][i]);
            s = s + a[j][i];
        }
        v[i] = s / 5;
        s = 0;
    }
    average = (v[0] + v[1] + v[2]) / 3;
    printf("math:%d\nc languag:%d\ndbase:%d\n", v[0], v[1], v[2]);
    printf("total:%d\n", average);
}

【例 7.7】

#include <stdio.h>

main()
{
    int i, j, s = 0, average, v[3];
    int a[5][3] = {{80, 75, 92}, {61, 65, 71}, {59, 63, 70}, {85, 87, 90}, {76, 77, 85}};
    for (i = 0; i < 3; i++)
    {
        for (j = 0; j < 5; j++)
            s = s + a[j][i];
        v[i] = s / 5;
        s = 0;
    }
    average = (v[0] + v[1] + v[2]) / 3;
    printf("math:%d\nc languag:%d\ndFoxpro:%d\n", v[0], v[1], v[2]);
    printf("total:%d\n", average);
}

7.2.4 二维数组程序举例

7.3 字符数组

7.3.1 字符数组的定义

7.3.2 字符数组的初始化

7.3.3 字符数组的引用

【例 7.8】

#include <stdio.h>

main()
{
    int i, j;
    char a[][5] = {{
                       'B',
                       'A',
                       'S',
                       'I',
                       'C',
                   },
                   {'d', 'B', 'A', 'S', 'E'}};
    for (i = 0; i <= 1; i++)
    {
        for (j = 0; j <= 4; j++)
            printf("%c", a[i][j]);
        printf("\n");
    }
}

7.3.4 字符串和字符串结束标志

7.3.5 字符数组的输入输出

【例 7.9】

#include <stdio.h>

main()
{
    char c[] = "BASIC\ndBASE";
    printf("%s\n", c);
}

注意在本例的 printf 函数中,使用的格式字符串为“%s”,表示输出的是一个字符串。
而在输出表列中给出数组名则可。不能写为:
printf(“%s”,c[]);

【例 7.10】

#include <stdio.h>

main()
{
    char st[15];
    printf("input string:\n");
    scanf("%s", st);
    printf("%s\n", st);
}

【例 7.11】

#include <stdio.h>

main()
{
    char st1[6], st2[6], st3[6], st4[6];
    printf("input string:\n");
    scanf("%s%s%s%s", st1, st2, st3, st4);
    printf("%s %s %s %s\n", st1, st2, st3, st4);
}

7.3.6 字符串处理函数

【例 7.12】

#include "stdio.h"
main()
{
    char c[] = "BASIC\ndBASE";
    puts(c);
}

【例 7.13】

#include "stdio.h"
main()
{
    char st[15];
    printf("input string:\n");
    gets(st);
    puts(st);
}

【例 7.14】

#include "string.h"
main()
{
    static char st1[30] = "My name is ";
    int st2[10];
    printf("input your name:\n");
    gets(st2);
    strcat(st1, st2);
    puts(st1);
}

【例 7.15】

#include "string.h"
main()
{
    char st1[15], st2[] = "C Language";
    strcpy(st1, st2);
    puts(st1);
    printf("\n");
}

【例 7.16】

#include "string.h"
main()
{
    int k;
    static char st1[15], st2[] = "C Language";
    printf("input a string:\n");
    gets(st1);
    k = strcmp(st1, st2);
    if (k == 0)
        printf("st1=st2\n");
    if (k > 0)
        printf("st1>st2\n");
    if (k < 0)
        printf("st1<st2\n");
}

【例 7.17】

#include "string.h"
main()
{
    int k;
    static char st[] = "C language";
    k = strlen(st);
    printf("The lenth of the string is %d\n", k);
}

7.4 程序举例

【例 7.18】把一个整数按大小顺序插入已排好序的数组中。
为了把一个数按大小插入已排好序的数组中,应首先确定排序是从大到小还是从小到大
进行的。设排序是从大到小进序的,则可把欲插入的数与数组中各数逐个比较,当找到第一
个比插入数小的元素 i 时,该元素之前即为插入位置。然后从数组最后一个元素开始到该元
素为止,逐个后移一个单元。最后把插入数赋予元素 i 即可。如果被插入数比所有的元素值
都小则插入最后位置。

#include "string.h"
main()
{
    int i, j, p, q, s, n, a[11] = {127, 3, 6, 28, 54, 68, 87, 105, 162, 18};
    for (i = 0; i < 10; i++)
    {
        p = i;
        q = a[i];
        for (j = i + 1; j < 10; j++)
            if (q < a[j])
            {
                p = j;
                q = a[j];
            }
        if (p != i)
        {
            s = a[i];
            a[i] = a[p];
            a[p] = s;
        }
        printf("%d ", a[i]);
    }
    printf("\ninput number:\n");
    scanf("%d", &n);
    for (i = 0; i < 10; i++)
        if (n > a[i])
        {
            for (s = 9; s >= i; s--)
                a[s + 1] = a[s];
            break;
        }
    a[i] = n;
    for (i = 0; i <= 10; i++)
        printf("%d ", a[i]);
    printf("\n");
}
	本程序首先对数组 a 中的 10 个数从大到小排序并输出排序结果。然后输入要插入的整

数 n。再用一个 for 语句把 n 和数组元素逐个比较,如果发现有 n>a[i]时,则由一个内循环
把 i 以下各元素值顺次后移一个单元。后移应从后向前进行(从 a[9]开始到 a[i]为止)。 后
移结束跳出外循环。插入点为 i,把 n 赋予 a[i]即可。 如所有的元素均大于被插入数,则
并未进行过后移工作。此时 i=10,结果是把 n 赋于 a[10]。最后一个循环输出插入数后的数
组各元素值。
程序运行时,输入数 47。从结果中可以看出 47 已插入到 54 和 28 之间。

【例 7.19】在二维数组 a 中选出各行最大的元素组成一个一维数组 b。
a=( 3 16 87 65
4 32 11 108
10 25 12 37)
b=(87 108 37)
本题的编程思路是,在数组 A 的每一行中寻找最大的元素,找到之后把该值赋予数组 B
相应的元素即可。程序如下:

#include "string.h"
main()
{
    int a[][4] = {3, 16, 87, 65, 4, 32, 11, 108, 10, 25, 12, 27};
    int b[3], i, j, l;
    for (i = 0; i <= 2; i++)
    {
        l = a[i][0];
        for (j = 1; j <= 3; j++)
            if (a[i][j] > l)
                l = a[i][j];
        b[i] = l;
    }
    printf("\narray a:\n");
    for (i = 0; i <= 2; i++)
    {
        for (j = 0; j <= 3; j++)
            printf("%5d", a[i][j]);
        printf("\n");
    }
    printf("\narray b:\n");
    for (i = 0; i <= 2; i++)
        printf("%5d", b[i]);
    printf("\n");
}
	程序中第一个 for语句中又嵌套了一个 for语句组成了双重循环。外循环控制逐行处理,

并把每行的第 0 列元素赋予 l。进入内循环后,把 l 与后面各列元素比较,并把比 l 大者赋
予 l。内循环结束时 l 即为该行最大的元素,然后把 l 值赋予 b[i]。等外循环全部完成时,
数组 b 中已装入了 a 各行中的最大值。后面的两个 for 语句分别输出数组 a 和数组 b。

【例 7.20】输入五个国家的名称按字母顺序排列输出。
本题编程思路如下:五个国家名应由一个二维字符数组来处理。然而C语言规定可以把
一个二维数组当成多个一维数组处理。 因此本题又可以按五个一维数组处理, 而每一个一
维数组就是一个国家名字符串。用字符串比较函数比较各一维数组的大小,并排序,输出结
果即可。
编程如下:

#include "string.h"
main()
{
    char st[20], cs[5][20];
    int i, j, p;
    printf("input country's name:\n");
    for (i = 0; i < 5; i++)
        gets(cs[i]);
    printf("\n");
    for (i = 0; i < 5; i++)
    {
        p = i;
        strcpy(st, cs[i]);
        for (j = i + 1; j < 5; j++)
            if (strcmp(cs[j], st) < 0)
            {
                p = j;
                strcpy(st, cs[j]);
            }
        if (p != i)
        {
            strcpy(st, cs[i]);
            strcpy(cs[i], cs[p]);
            strcpy(cs[p], st);
        }
        puts(cs[i]);
    }
    printf("\n");
}
	本程序的第一个 for 语句中,用 gets 函数输入五个国家名字符串。上面说过C语言允

许把一个二维数组按多个一维数组处理,本程序说明 cs[5][20]为二维字符数组,可分为五
个一维数组 cs[0],cs[1],cs[2],cs[3],cs[4]。因此在 gets 函数中使用 cs[i]是合法的。
在第二个 for 语句中又嵌套了一个 for 语句组成双重循环。这个双重循环完成按字母顺序排
序的工作。在外层循环中把字符数组 cs[i]中的国名字符串拷贝到数组 st 中,并把下标 i
赋予 P。进入内层循环后,把 st 与 cs[i]以后的各字符串作比较,若有比 st 小者则把该字
符串拷贝到 st 中,并把其下标赋予 p。内循环完成后如 p 不等于 i 说明有比 cs[i]更小的字
符串出现,因此交换 cs[i]和 st 的内容。至此已确定了数组 cs 的第 i 号元素的排序值。然
后输出该字符串。在外循环全部完成之后即完成全部排序和输出。

7.5 本章小结

1.数组是程序设计中最常用的数据结构。数组可分为数值数组(整数组,实数组),字符数组
以及后面将要介绍的指针数组,结构数组等。
2.数组可以是一维的,二维的或多维的。
3.数组类型说明由类型说明符、数组名、数组长度(数组元素个数)三部分组成。数组元素又
称为下标变量。 数组的类型是指下标变量取值的类型。
4.对数组的赋值可以用数组初始化赋值,输入函数动态赋值和赋值语句赋值三种方法实现。
对数值数组不能用赋值语句整体赋值、输入或输出,而必须用循环语句逐个对数组元素进行
操作。

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

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

相关文章

Hive笔记-3

3.2.2 查看表 1) 展示所有表 (1) 语法: 语法: SHOW TABLES [IN database_name] LIKE [identifier_with_wildcards]; In database_name 写的是查哪个数据库,一般不写默认是当前数据库 Like 后面跟通配符表达式 (2) 案例: 查看在 db_hive1 数据库里有没有以 stu 开头的表 …

DeviceNet总线粗缆和细缆连接器

DeviceNet总线粗缆和细缆连接器 DeviceNet的粗缆和细缆连接器是网络中不可或缺的部分&#xff0c;它们负责将不同的设备连接起来&#xff0c;实现数据的传输。粗缆通常用于主干线路&#xff0c;而细缆则用于分支线路。粗缆和细缆的芯位分布有所不同&#xff0c;粗缆通常有五个…

申办乙级资信证书,河南工程咨询单位流程详解

河南工程咨询单位申办乙级资信证书的流程详解如下&#xff1a; 一、前期准备阶段 研读政策文件&#xff1a; 研读《工程咨询行业管理办法》&#xff08;国家发展改革委2017年第9号令&#xff09;以及《国家发展改革委关于印发<工程咨询单位资信评价标准>的通知》&#x…

【嵌入式Linux】<总览> 文件IO(更新中)

文章目录 前言 一、常用函数 1. open函数 2. close函数 3. write函数 4. read函数 5. dup函数 6. dup2函数 二、文件读写细节 1. 换行符 2. 文件描述符 3. errno和perror 前言 在Linux系统中&#xff0c;一切皆文件。因此&#xff0c;掌握Linux下文件IO常用的函数…

高效电商数据分析:电商爬虫API与大数据技术的融合应用

一、引言 随着电子商务的迅猛发展和数据量的爆炸式增长&#xff0c;电商数据分析已成为企业决策的关键依据。在竞争激烈的电商市场中&#xff0c;如何高效、准确地获取并分析数据&#xff0c;以洞察市场趋势、优化运营策略、提升用户体验&#xff0c;成为电商企业面临的重要挑…

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 连续字母长度(100分) - 三语言AC题解(Python/Java/Cpp)

&#x1f36d; 大家好这里是清隆学长 &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f497; &#x1f…

3D Web轻量化引擎HOOPS Commuicator是如何创建AEC查看器的?

在当今数字化时代&#xff0c;建筑、工程和施工&#xff08;AEC&#xff09;行业正经历着一场技术革命。HOOPS Communicator&#xff0c;一款基于HOOPS Web平台的3D Web轻量化引擎&#xff0c;正是这场革命的先锋之一。本文将探讨HOOPS Communicator是如何创建AEC查看器的&…

[论文笔记]Are Large Language Models All You Need for Task-Oriented Dialogue?

引言 今天带来论文Are Large Language Models All You Need for Task-Oriented Dialogue?的笔记。 主要评估了LLM在完成多轮对话任务以及同外部数据库进行交互的能力。在明确的信念状态跟踪方面&#xff0c;LLMs的表现不及专门的任务特定模型。然而&#xff0c;如果为它们提…

【Codesys】-计算开机通电运行时间,累计正常使用时间,故障停机时间

应客户要求&#xff0c;在程序添加了这个用来计算开机运行时间&#xff0c;原理就是取当前时间减去一开始记录的时间&#xff0c;没什么特别要求&#xff0c;记录一下使用的变量类型和数据写法&#xff0c;防止忘记了。 下文只写了一个开机通电运行时间的写法&#xff0c;累计…

解决navicat连接oracle19c数据库缺少oci.dll

下载oci.dll文件 搜索Oracle Instant Client Downloads Oracle Instant Client Downloads点击 Oracle Instant Client Downloads 超链接 根据自己的操作系统按需选择 以windows64位为例&#xff0c;下载 Version 19.23.0.0.0的OCI压缩包 解压到Navicat的安装根路径下&#xff…

红黑树(数据结构篇)

数据结构之红黑树 红黑树(RB-tree) 概念&#xff1a; 红黑树是AVL树的变种&#xff0c;它是每一个节点或者着成红色&#xff0c;或者着成黑色的一棵二叉查找树。对红黑树的操作在最坏情形下花费O(logN)时间&#xff0c;它的插入操作使用的是非递归形式实现红黑树的高度最多是…

视频融合共享平台LntonCVS视频监控安防系统运用多视频协议建设智慧园区方案

智慧园区&#xff0c;作为现代化城市发展的重要组成部分&#xff0c;不仅推动了产业的升级转型&#xff0c;也成为了智慧城市建设的核心力量。随着产业园区之间的竞争日益激烈&#xff0c;如何打造一个功能完善、智能化程度高的智慧园区&#xff0c;已经成为了业界广泛关注的焦…

软考高级论文真题“论大数据lambda架构”

论文真题 大数据处理架构是专门用于处理和分析巨量复杂数据集的软件架构。它通常包括数据收集、存储、处理、分析和可视化等多个层面&#xff0c;旨在从海量、多样化的数据中提取有价值的信息。Lambda架构是大数据平台里最成熟、最稳定的架构&#xff0c;它是一种将批处理和流…

怎么将几段音频合并在一起,试试这几个音频拼接小妙招

怎么将多个音频合并在一起呢&#xff1f;音频是我们日常工作生活中常见的文件&#xff0c;音频与我们息息相关&#xff0c;无论你是音乐爱好者&#xff0c;还是喜欢记录生活中的声音&#xff0c;都离不开音频。因此我们会遇到关于很多音频剪辑的难题&#xff0c;就像今天小编给…

某棋牌渗透测试

前言 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失&#xff0c;均由使用者本人负责&#xff0c;文章作者不为此承担任何责任。 一、信息收集 这里通过fofa进行收集&#xff0c;语法为&#xff1a;body某棋牌 && titlexxx 图1-1 fofa资产收集 …

第 402 场 LeetCode 周赛题解

A 构成整天的下标对数目 I 计数&#xff1a;遍历 h o u r s hours hours &#xff0c;记录 h o u r s [ i ] % 24 hours[i]\%24 hours[i]%24 的出现次数 class Solution {public:long long countCompleteDayPairs(vector<int>& hours) {vector<int> cnt(24);…

图像处理:Python使用OpenCV 减少图片噪音

文章目录 1. 均值滤波 (Mean Filtering)2. 高斯滤波 (Gaussian Filtering)3. 中值滤波 (Median Filtering)4.代码实现示例5.效果展示 在图像处理中&#xff0c;均值滤波、高斯滤波和中值滤波是三种常用的降噪方法。它们的实现原理各有不同&#xff1a; 1. 均值滤波 (Mean Filte…

Paper Reading: EfficientAD:毫秒级延迟的准确视觉异常检测

EfficientAD 简介方法高效的patch描述PDN教师pretraining 轻量级的师生模型逻辑异常检测异常图像的标准化 实验局限性 EfficientAD: Accurate Visual Anomaly Detection at Millisecond-Level Latencies EfficientAD&#xff1a;毫秒级延迟的准确视觉异常检测, WACV 2024 paper…

贪吃蛇——c语言版

文章目录 演示效果实现的基本功能技术要点源代码实现功能GameStart打印欢迎界面和功能介绍绘制地图创建蛇创建食物 GameRun打印提示信息蛇每走一步 GameEnd蛇死亡后继续游戏 演示效果 贪吃蛇1.0演示视频 将终端应用程序改为控制台主机 实现的基本功能 贪吃蛇地图绘制蛇吃食物的…

基于TCAD与紧凑模型结合方法探究陷阱对AlGaN/GaN HEMTs功率附加效率及线性度的影响

来源&#xff1a;Investigation of Traps Impact on PAE and Linearity of AlGaN/GaN HEMTs Relying on a Combined TCAD–Compact Model Approach&#xff08;TED 24年&#xff09; 摘要 本文提出了一种新型建模方法&#xff0c;用于分析GaN HEMTs的微波功率性能。通过结合工…