C语言学习日记—— 一维数组的定义和引用


前言

C语言提供除了基本类型(整型、字符型、实型)以外的构造类型数据,它们有数组类型、结构体类型和共用体类型。构造类型数据是由基本类型数据按一定规则组成的,因此它们又被称为“导出类型”。将数组与循环结合起来,可以有效地处理大批量的数据,大大提高了工作效率,十分方便。
本篇介绍在C语言中怎样定义和使用一维数组。


 一、一维数组的定义和引用 

数组是有序数据的集合。数组中的每一个元素都属于同一个数据类型。用一个统一的数组名和下标来唯一地确定数组中的元素。

1.1一维数组的定义 

一维数组的定义方式为

类型说明符 数组名[常量表达式]:

注意:
(1)数组名的命名规则和变量名相同,遵循标识符命名规则
(2)在定义数组时,需要指定数组中元素的个数,方括号中的常量表达式用来表示元素的个数,即数组长度。例如,指定a[10],表示a数组有10个元素。下标是从0开始的,这10个元素是:a[0],a[1],a[2],a[3],a[4],a[5],a[6],a[7],a[8],a[9]。不存在数组元素a[10]。
(3)常量表达式中可以包括常量和符号常量,不能包含变量。也就是说,C语言不允
许对数组的大小作动态定义,即数组的大小不依赖于程序运行过程中变量的值。例如,下
面这样定义数组是不行的: 

int n;
scanf("%d",&n); /在程序中临时输人数组的大小*/
int a[n];

1.2一维数组元素的引用 

 数组必须先定义,然后使用。C语言规定只能逐个引用数组元素而不能一次引用整
个数组。

1.3一维数组的初始化 

对数组元素的初始化可以用以下方法实现。
(1)在定义数组时对数组元素赋予初值。例如:

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

将数组元素的初值依次放在一对花括号内。
(2)可以只给一部分元素赋值。例如:

int a[10]={0,1,2,3,4};

定义数组有10个元素,但花括号内只提供5个初值,这表示只给前面5个元素赋初值,
后5个元素值为0。
(3)如果想使一个数组中全部元素值为0,可以写成:

int a[10]={0,0,0,0,0,0,0,0,0,0};

int a[10] = {0};

不能写成

int a[10] = {0 * 10};

不能给数组整体赋初值
(4)在对全部数组元素赋初值时,由于数据的个数已经确定,因此可以不指定数组长
度。例如:

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

可以写成

int a[]={1,2,3,4,5}:

 二、一维数组的应用举例

 2.1.求数组元素和

代码如下(示例):

#include<stdio.h>
int main(void)
[
    int i = 0;
    int a[]=[1,2,3,4,5,6,7,8,9]:
    int len = sizeof(a)/sizeof(a[0]);
    int sum = 0;
    for (i = 0;i < len;++i)
    {
        sum += a[i];
    }
        printf("数组的元素和为%dn",sun);
        return 0;
}

2.2.求数组元素极大值和次大值

代码如下(示例):

#include<stdio.h>
#include<limits.h>
int main(void)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int a[]=[100,2,3,4,5,6,7,8,9,32,12};
    int max =  a[0];
    int mid INT_MIN;
    int len sizeof(a)/sizeof(a[]);
    for (i = 1;i < len;++i)
    {
        if(a[i] >max)
        {
            max = a[i];
        }
        for (j = 1;j<len;++j)
        {
            if(a[j]mid && a[j] != max)
            {
                mid = a[j];
            }
       }
        printf("最大值为%d小n",max);
        printf("次大值为%d小n",mid);
    return 0;
}

 2.3.斐波那契数列

代码如下(示例):

#include<stdio.h>
int main(void)
{
    int i = 0;
    int k = 0;
    int a[10]=[1,1]:
    int len = sizeof(a)/sizeof(a[0]);
    for(i = 2;i<len;++i)
    {
        (a[i]=a[i-1]+a[i-2]);
    }    
    for(k=0;k < len;++k)
    {
        printf("%d ",a[k]);
    }
    printf("\n");
    return 0;
}

 2.4.逆序输出

代码如下(示例):

  1 #include<stdio.h>
  2 
  3 int main(void)
  4 {
  5     int i = 0;
  6     int j = 0;
  7     int k = 0;
  8     int a[5] = {1,2,5,4,6};                                                                                                                                                      
  9     int len = sizeof(a) / sizeof(a[0]);
 10     for(i = 0 ; i < len / 2 ; ++i)
 11     {
 12         k = a[i];
 13         a[i] = a[len - i - 1];
 14         a[len - i - 1] = k;
 15     }
 16 
 17     for(j = 0 ;j < len ; ++j)
 18     {
 19         printf("%d ",a[j]);
 20     }
 21         printf("\n");
 22     return 0;
 23 
 24 }
~         

 2.5.选择排序

代码如下(示例):

#include <stdio.h>

int main(void)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int home = 0;
    int a[] = {1,2,3,4,9,8,7,5,6};
    int len = sizeof(a) / sizeof(a[0]);
    for (i = 0;i< len - 1;++i)
    {
        for(k = i + 1;k < len; ++k)
        {
            if (a[i] > a[k])
            {
                home = a[k];
                a[k] = a[i];
                a[i] = home;
            }
        }
    for(j = 0;j < len;++j)
    {
        printf("%d ",a[j]);
        printf("\n");
     }
   return 0;
}

 2.6.冒泡排序

代码如下(示例):

#include<stdio.h>
int main(void)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int temp = 0;
    inta[]=[1,2,3,4,9,8,7,5,6];
    int len = sizeof(a)/sizeof(a[0]);
    for(i=len-1;i>0;--i)
    {
            
        for(k = 0;k<i;++k)
        {
            if(a[k]>a[k+1])
            {
                temp a[k];
                a[k]=a[k+1];
                a[k +1]temp;
            }
        }
    }
    for(i=0:i<len;++i)
    { 
        printf("%d ",a[j]);
    }
    printf("\n");
    return 0;
}

 2.7.插入排序

代码如下(示例):

#include<stdio.h>
int main(void)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int n = 0;
    int a[]=[1,2,3,4,5,6,7,8,9}:
    int len = sizeof(a)/sizeof(a[0]);
    for(i = 1;i < len;++i)
    {
         int temp = a[i];
         k = i - 1;
         while(k >=0 && a[k]>temp)
         {
             a[k+1]=a[k];
             --k;
         }
         a[k +1] = temp;
    for(n = 0;n < len;++n)
    {
        printf("%d ",a[n]);
    }
    printf("\n");
    return 0;
}

 2.8.二分查找

代码如下(示例):

int a[10] = {0,1,2,3,4,5,6,7,8,9};
int len = sizeof(a) / sizeof(a[0]);
int num ;
scanf("%d", &num);
int begin = 0;
int end = len - 1 ;
int mid;
while(begin <= end)
{
    mid = (begin + end) / 2;
    if(a[mid] > num)
    {
        end = mid - 1 ;
    }
    else if(a[mid] < num)
    {
        begin = mid + 1 ;
    }
    else
    {
        break;
    }
}
if(begin <= end)
{
    printf("found!");
}
else
{
    printf("not found!");
}
return 0;

总结

以上就是今天要讲的内容,详细地介绍了如何在C语言中定义和使用一维数组。通过一系列的实例,我学习了如何进行一维数组的定义、引用和初始化,以及一些常见的操作如求数组元素和、求数组的极值、斐波那契数列、逆序输出、选择排序、冒泡排序、插入排序以及二分查找等。这些知识为我进一步学习更复杂的数据结构和算法打下了基础。

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值