C语言基本知识复习浓缩版:数组

所谓数组(Array),就是一系列数据的集合。这些数据具有相同的类型,并且在内存中挨着存放,彼此之间没有缝隙。换句话说,数组用来存放多份数据,但是它有两个要求:

  • 这些数据的类型必须相同;
  • 这些数据在内存中必须连续存储。

1、数组的概念和定义

  • 数组是一种数据结构,用于存储一组相同类型的数据
  • 数组中的元素在内存中是连续存放的。
  • 数组通过下标来访问元素,下标从0开始。

int arr[5]={1, 2, 3, 4, 5};

2、数组的声明和初始化

数组的声明

数组声明格式:数组类型 数组名[数组的大小]

数组的大小必须是正整数。

数组大小不能为负数,且数组一旦声明,大小就不能改变。

int a[10]; 合法,最创建的数组声明

int a[3+3]; 合法3+3的结果是一个确定的正整数

define X 10 int a[X]; 合法,X是一个符号常量。

int n=10, a[n]; 不合法,n是一个变量

数组的初始化:

全部初始化:

int arr[5]={1 ,2 ,3 ,4, 5,};

部分初始化:

int arr[5]={1, 2};

没有初始化时,数组的默认值(通常为未定义)。

  • int a[5]={1, 2, 3, 4, 5}; 合法,完全初始化
  • int a[5]={1, 2, 3}; 合法,部分初始化
  • int a[]={1, 2, 3, 4, 5, 6}; 合法,数组的大小由初始化元素个数决定
  • int a[5]=(1, 2, 3, 4, 5); 不合法,数组的大小由初始化完全初始化
  • int a[5]={1, 2, 3, 4, 5, 6}; 不合法,初始化的元素个数大于数组本身大小。

真题

以下能对一维数组a进行初始化的语句是:

A、int a[5]=(0, 1, 2, 3, 4,);

B、int a(a)={};

C、int a[3]={0, 1 ,2};

D、int a{5}={10*1};

正确答案:C

在c语言中对一维整形数组的正确定义为:

A、int a(10); B、int n=10,a[10]

C、int n;a[n]; D、#define N 10

int a[N];

正确答案是:D

3、数组元素的访问

  • 使用下标访问数组中的元素:array[下标]。
  • 下标是从0开始,并且下标是一个整数。
  • 下标越界将导致未定义行为。

真题

已知:int a[10]; 则对a数组元素的正确引用是:

A、a[10] B、a[3.5] C、a(5) D、a[0]

正确答案是:D

若有以下数组说明,则i=10;a[a[i]]元素数值是:

int a[12]={1, 4, 7, 10, 2, 5, 8, 11, 3, 6, 9, 12};

A、10 B、9 C、6 D、5

正确答案是:C

4、二维数组

二维数组可以看作是"数组的数组",即一个包含多个一维数组的数组。

它用来表示矩阵或表格等二位数据。

二维数组的声明格式:数据类型 数据名[行数][列数];

二维数组的初始化

  • int arr[2][3]={{1, 2, 3}, {4, 5, 6}}; 合法,第一行的元素是1,2,3,第二行的元素是4, 5, 6
  • int arr[2][3]={1, 2, 3,4, 5, 6}; 合法,第一行的元素是1,2,3,第二行的元素是4, 5, 6
  • int arr[2][3]={1, 2, 3, 4}; 合法,第一行的元素是1,2,3,第二行的元素是4, 0, 0
  • int arr[][3]={1, 2, 3, 4}; 合法,行数可以根据初始化元素的个数推断出来
  • int arr[2][]={1, 2, 3, 4, 5}; 不合法,列数必须指定

真题

求一维数组a[10]中各元素的平均值,并输出小于平均值的元素。

假定数组内容为:1.2 7 5 1.8 1.6 0.8 4 1.0 6 2.2

cpp 复制代码
#include <stdio.h>
int main()
{
        float a[10] = {1.2, 7, 5, 1.8, 1.6, 0.8, 4, 1.0, 6, 2.2};
        float sum = 0.0;
        float avg = 0.0;
        for (int i =0; i<10; i++)
        {
                sum += a[i];
        }
        avg=sum /10;
        printf("avg= %f\n", avg);

        for (int i =0; i<10; i++)
        {
                if (a[i] < avg)
                {
                        printf("%4.1f\n", a[i]);
                }
        }
        return 0;
}

输出:

avg= 3.060000

1.2

1.8

1.6

0.8

1.0

2.2

相关推荐
KeyPan2 小时前
【Ubuntu与Linux操作系统:十、C/C++编程】
linux·运维·服务器·c语言·c++·算法·ubuntu
Ckyeka4 小时前
Leetcode刷题笔记—栈与队列
数据结构·python·算法·leetcode
fqbqrr4 小时前
2501d,d作者,炮打C语言!
c语言·d
大丈夫立于天地间4 小时前
OSPF - 特殊报文与ospf的机制
网络·网络协议·学习·算法·智能路由器·信息与通信
夏末秋也凉4 小时前
力扣-数组-219 存在重复元素Ⅱ
算法·leetcode
Wang's Blog5 小时前
数据结构与算法之二叉树: LeetCode 543. 二叉树的直径 (Ts版)
算法·leetcode
我想学LINUX5 小时前
【2024年华为OD机试】 (C卷,100分)- 消消乐游戏(Java & JS & Python&C/C++)
java·c语言·javascript·c++·游戏·华为od
graceyun5 小时前
C语言初阶习题【23】输出数组的前5项之和
c语言·开发语言·算法
Wang's Blog5 小时前
数据结构与算法之二叉树: LeetCode 701. 二叉搜索树中的插入操作 (Ts版)
算法·leetcode
夏末秋也凉5 小时前
力扣-数组-169 多数元素
数据结构·算法·leetcode