C语言-数组

本文介绍了数组的基本概念,包括一维数组的创建、初始化、类型和使用方法,如数组下标的规则和元素的打印。同时,讲解了如何通过`sizeof`计算数组元素个数。接着,文章涉及了二维数组的创建、初始化及使用,强调了下标的规则。最后,提供了两个编程练习,一个是字符汇聚,另一个是二分查找算法的应用。
摘要由CSDN通过智能技术生成

1.数组的概念

数组是一组相同类型的集合,元素个数不能为0。

2.一维数组的创建和初始化

2.1数组创建

一维数组创建的语法:

1 type arr_name[常量值];

存放在数组的值被称为数组的元素,数组在创建的时候可以指定数组的大小和数组的元素类型。

type指定的是数组中存放数据的类型,如:char、short、int、float等,也可以是自定义类型。

arr_name指的是数组名。

[  ] 中的常量值是用来指定数组的大小。

2.2数组的初始化

一般使用大括号,将数据放在大括号中。

//完成初始化
int arr[5]={1,2,3,4,5};

//不完全初始化
int arr2[6]={1};//第一个元素初始化为1,剩下元素默认为0

//错误初始化
int arr3[3]={1,2,3,4};
2.3数组的类型
int arr1[10];
int arr2[12];

char ch[5];

arr1数组的类型是int [10]

arr2数组的类型是int [12]

ch数组的类型是char[5]

3.一维数组的使用

3.1数组下标

下标是从0开始,假设数组有10个元素,最后一个元素的下标是9,下标相当于数组元素的编号。

int arr[10]={1,2,3,4,5,6,7,8,9,10};
数组12345678910
下标0123456789

数组的访问提供了一个操作符[  ] ,这个叫:下标引用操作符。

3.2数组元素的打印

想访问整个数组的元素,可以使用for循环产生0~9的下标,再使用下标访问。

如:

#include <stdio.h>
int main()
{
     int arr[10]={1,2,3,4,5,6,7,8,9,10};
     int i=0;
     for(i=0;i<10;i++)
     {
         printf("%d",arr[i]);
     }
    return 0;
 }

4.sizeof计算数组元素个数

#include<stdio.h>
int main()
{
     int arr[10]=0;
     printf("%d\n",sizeof(arr));
     return 0;
}

这里输出的结果是40,计算的是数组所占内存空间的总大小,单位是字节。而数组中元素的类型都是相同的,只要计算一个元素所占字节的个数,数组的元素个数就能算出来。

#include<stdio.h>
int main()
{
   int arr[10]={0};
   printf("%d\n",sizeof(arr[0]));//计算一个元素大小,单位是字节
   return 0;
}

接下来就能计算出数组的元素个数

#include<stdio.h>
int main()
{
    int arr[10]={0};
    int sz=sizeof(arr)/sizeof(arr[0]);
    printf("%d\n",sz);
    return 0;
}

这里的结果是10,表示数组有10个元素。

5.二维数组的创建

5.1二维数组的概念

把一维数组做为数组的元素,就是二维数组了。

5.2二维数组的创建

语句如下:

type arr_name[常量1][常量2];

例如
int arr[3][5];
double data[2][8];

3表示有3行,5表示每行有5个元素。

6.二维数组的初始化

也是使用大括号初始化的。同样包括完全初始化和不完全初始化。

6.1按行初始化
int arr4[3][5]={{1,2},{3,4},{5,6}};
 
按行初始化
int arr5[][5]={1,2,3};

int arr6[][5]={1,2,3,4,5,6,7};

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

  省略行,不能省略列

7.二维数组的使用

7.1二维数组的下标

规定行是从0开始,列也是一样。如:

int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
12345
23456
34567
#include<stdio.h>
int main()
{
   int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
   printf("%d\n",arr[2][4]);
   return 0;
}

第二行,第四列,很快定位到七。

7.2二维数组的输入和输出

访问单个元素已经知道了,但是要访问整个二维数组呢?

#include <stdio.h>
int main()
{
   int arr[3][5]={1,2,3,4,5, 2,3,4,5,6, 3,4,5,6,7};
   int i=0;
   //输入
   for(i=0;i<3;i++)//产生行
   {
       int j=0;
       for(j=0;j<5;j++)//产生列
       {
          scanf("%d",&arr[i][j]);//输入数据
       }
   }
   //输出
   for(i=0;i<3;i++)//产生行
   {
       int j=0;
       for(j=0;j<5;j++)//产生列
       {
         printf("%d",arr[i][j]);//输出数据
       }
       printf("\n");
    }
  return 0;
 }

8.数组练习

1.练习:多个字符从两端移动,向中间汇聚。

#include <stdio.h>
int main()
{
   char arr1[]="welcome to here...";
   char arr2[]="##################";
   int left=0;
   int right=strlen(arr)-1;
   printf("%s\n",arr2);
   while(left<=right)
   {
       sleep(1000);
       arr2[left]=arr1[left];
       arr2[right]=arr1[right];
       left++;
       right--;
       printf("%s\n",arr2);
    }
   return 0;
 }

2.练习:二分查找(折半查找)

#include <stdio.h>

int main()
{
    int arr[]={1,2,3,4,5,6,7,8,9,10};
    int left=0;
    int right=sizeof(arr)/sizeof(arr[0])-1;
    int key=7;//要找的数字
    int mid=0;//记录中间元素的下标
    int find=0;
    while(left<=right)
    {
        mid=(left<=right)/2;
        if(arr[mid]>key)
        {
            right=mid-1;
        }
        else if(arr[mid]<key)
        {
           left=mid+1;
        }
        else
        {
            find=1;
            break;
        }
    }
    if(1==find)
        printf("找到了,下标是%d\n",mid);
    else
        printf("找不到\n");
 }

求中间元素的下标,使用mid=(left+right)/2,如果left和right比较大的时候可能存在问题,可以使用下面的方式。

mid=left+(right-left)/2;

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值