超详细且附实例的一维数组(C语言)

超详细且附实例的一维数组(C语言)

数组:方便数据的管理和使用,便于完成大量的数据的处理,简化程序设计

1、一维数组

1.1、一维数组
1.1.1、一维数组的定义和引用
一批相同类型的变量使用同一个数组变量名,用下标来相互区分。
在这里插入图片描述

  • 数组名下标唯一地确定每个数组元素。
  • 每个元素都属于同一类型。
  • 表述简洁,可读性高。
  • 便于使用循环结构。
// i 从0到9,输出a[0]~a[9]
for(i = 0;i < n;i++)
printf("%d",a[i]);

1、定义
类型名 数组名[数组长度]
类型名:数组元素的类型
数组名:数组(变量)的名称,标识符

数组长度:常量表达式,给定数组的大小

int a[10];//定义一个含有10个整型元素的数组a
char c[200];//定义一个含有200个字符元素的数组C
double arr[5];//定义一个含有5个实型的数组arr

2、引用
(1)、先定义,后使用
(2)、只能引用单个的==数组元素,不能一次引用整个数组

下标:整型表达式
取值范围:[0,数组长度-1]

例如:

int a[10];10个元素:a[0],a[1]...a[9]
//下标不能越界,不能使用a[10]

数组元素的使用方法与同类型的变量相同,例如:

//从键盘读入一个整数,存入a[i]
scanf("%d",&a[i]);

//下标为index的元素与下标为k的元素互换内容
temp = a[index];
a[index] = a[k];
a[k] = temp;

//输出a[i]的值
printf("%d\n",a[i]);

3、区分数组的定义和数组元素的引用
(1)、定义数组

类型名 数组名[数组长度]
int a[10];//定义数组时,数组长度必须为常量

(2)、引用数组元素

数组名[下标]
a[0] = a[9] = 0;
a[k] = temp;

4、数组和循环:使用循环批量处理数组元素。数组下标作为循环变量,通过循环,逐个处理数组元素。

// i 从0到9,输出a[0]~a[9]
for(i = 0;i < 10;i++)
printf("%d",a[i]);

// i 从0到9,输出a[0]~a[9]
for(i = 0;i < 10;i++)
printf("%d",a[i]);

例1.1:逆序输出
n个整数的逆序输出。输入n(n <=10)和n个整数,逆序输出这n个整数。

思路分析:
(1)、读入n;2)、循环进行n次,依次将n个整数存入a[0],a[1]...a[n -1];3)、循环进行n次,依次输出a[n-1]...a[1],a[0];
#include<stdio.h>
int main(void)

{
     int n;
     int a[9];

     printf("请输入整数的个数:\n");
     scanf("%d",&n);

     printf("请输入%d个整数:\n",n);//依次将n个整数存入a[0],a[1]...a[n -1];
     for(int i = 0;i < n;i++)
          scanf("%d",&a[i]);

     printf("请逆序输出这几个数:\n");//依次输出a[n-1]...a[1],a[0];
     for(int i = n-1;i >= 0;i--)
          printf("%d ",a[i]);

     printf("\n");

     return 0;
}

1.1.2、一维数组初始化
(1)、可以定义数组时,对数组元素赋初值。
类型名 数组名[数组长度] = {初值表}
例如:

int a[10] = {1,2,3,4,5,6,7,8,9,10};
//定义数组a有10个int类型的元素,并为这些元素赋初值;
a[0]=1;...a[9]=10

(2)、部分元素初始化:一般数组如果没有初始化,所有元素为随机值;但如果对部分元素初始化,没有初始值的元素自动赋值为0

int fib[20]= {0,1};
fib[0]=0;
fib[1]=1;//其余的元素都为0

如果对全部元素赋值可以省略数组的长度

int a[10]={0,1,2,3,4,5,6,7,8,9};
可写成:int a[]={0,1,2,3,4,5,6,7,8,9};//建议不要省略数组的长度

例1.2:fibonacci数列的前n项:输入一个正整数n(1<n<=50),输出fibonacci数列的前n项:1,1,2,3,5…

思路分析:
(1)、先输入整数的个数;
     scanf("%d",&n);2)、使用一个循环完成计算数组的后一项;
     for(int i = 2;i <=n;i++)
     {
          a[i] = a[i-1] + a[i-2];
     }3)、使用循环输出数组元素;
     for(int i = 0;i < n;i++)
     {
          printf("%d\n",a[i]);
     }
#include<stdio.h>
#define N 50

int main(void)
{
     int n;
     int a[N]={1,1};


     printf("请输入整数的个数:\n");
     scanf("%d",&n);

     for(int i = 2;i <=n;i++)
     {
          a[i] = a[i-1] + a[i-2];
     }

     printf("请输出这个数列的前n项:\n");
     for(int i = 0;i < n;i++)
     {
          printf("%d\n",a[i]);
     }
     return 0;
}

例1.3、数组元素的查找:已知数组a中有如下元素:1,45,18,7,22,11,33,15,27,19;输入一个x,然后在数组中查找x,如果找到,输出相应的下标,否则,输出"Not Found”

思路分析:
(1)、对n个数依次循环进行查找;
for()
{
   if(a[i]==x)
}2)、if(i < n)则找到,否则没有找到。
#include<stdio.h>
#define N 10

int main()
{
     int i,x;
     int a[N]={1,45,18,7,22,11,33,15,27,19};

     printf("请输入要查找的数字:\n");
     scanf("%d",&x);

     for(i=0;i<N;i++)
     {
          if(a[i]==x)//若找到,提前循环
            break;
     }

     if(i<N)//若循环提前结束,说明找到x,输出下标;
          printf("%d\n",i);

     else
          printf("Not Found");

     return 0;
}

例1.4:在有序序列里面插入新元素:已知如下有序序列,有9个元素:1,2,4,7,8,11,16,21,35 输入一个数,该数插入到数组的适当位置,是的数组仍保持升序序列,输出插入新元素之后的数组。

思路分析:
(1)、从后往前开始遍历,遇到比自己大的元素就往后移一位;
for(i = N-1;i >= 0;i--)
{ 
   if(a[i] > n)
   a[i+1] = a[i];
   else
   break;
}2)、将插入的元素赋值给a[i+1];
a[i+1] = n;
#include<stdio.h>
#define N 20

int main()
{
     int n,i;
     int a[N]={1,2,4,7,8,11,16,21,35};

     printf("请输入要插入的整数:\n");
     scanf("%d",&n);

     for( i = N-1;i >= 0;i--)      //从后往前遍历,遇到大的往后移一位
     {
          if(a[i]>n)
             a[i+1]=a[i];
          else
             break;
     }
     a[i+1]=n;       //将插入的元素赋给a[i+1]

     printf("插入后按升序输出 :\n");
     for(i = 0;i <=N;i++)
          printf("%d ",a[i]);
     printf("\n");

     return 0;
}

例1.5:交换最小值:输入n,再输入n个数
(1)、求最小值
(2)、求最小值及其所对应的下标
(3)、将最小值与第一个数交换,输出交换后的n个数

(1)、求最小值

思路分析:
a[0]为临时最小值
  min = a[0];     
      for(i = 0;i < n;i++)
          {
          if(a[i] < a[0])
          min = a[i];
          }
#include<stdio.h>
#define N 20

int main()
{
     int n,i;
     int min;
     int a[N];

     printf("请输入整数的个数:\n");
     scanf("%d",&n);      //输入整数的个数

     printf("请分别输入这几个整数 :\n");
     for(i = 0;i < n;i++)
     scanf("%d",&a[i]);    //输入的元素依次存入数组

          min = a[0];      //a[0]为临时最小值
      for(i = 0;i < n;i++)
          {
          if(a[i] < min)
          min = a[i];
          }

     printf("最小值为:\n");
     printf("%d\n",min);

     return 0;
}

(2)、求最小值及其所对应的下标

#include<stdio.h>
#define N 20

int main()
{
     int n,i;
     int index;      //记录下标
     int min;
     int a[N];

     printf("请输入整数的个数:\n");
     scanf("%d",&n);      //输入整数的个数

     printf("请分别输入这几个整数 :\n");
     for(i = 0;i < n;i++)
     scanf("%d",&a[i]);    //输入的元素依次存入数组

          min = a[0];      //a[0]为临时最小值
      for(i = 0;i < n;i++)
          {
          if(a[i] < min)
          min = a[i];
          index = i;     //下标赋为i
          }

     printf("最小值为:\n");
     printf("%d\n",min);

     printf("最小值的下标为:\n");
     printf("%d\n",index);

     return 0;
}

(3)、将最小值与第一个数交换,输出交换后的n个数

思路分析:
交换的操作:
          t = a[0];     
          a[0] = min;
          min = t;
#include<stdio.h>
#define N 20

int main()
{
     int n,i;
     int t;
     int min;
     int a[N];

     printf("请输入整数的个数:\n");
     scanf("%d",&n);      //输入整数的个数

     printf("请分别输入这几个整数 :\n");
     for(i = 0;i < n;i++)
     scanf("%d",&a[i]);    //输入的元素依次存入数组


      for(i = 0;i < n;i++)
          {
          min = a[0];     //初始化在for循环内
          if(a[i] < min)
               min = a[i];
          }

          t = a[0];      //进行交换操作
          a[0] = min;
          min = t;

     printf("最小值与第一个数交换后输出n个数:\n");
     for(i = 0;i < n;i++)
          printf("%d\n",a[i]);

     return 0;
}

例1.6:排序:输入n(n<10),再输入n个数,将它们从小到大的顺序输出。

思路分析:
比较交换排序的实现:
    for(i = 0;i < n -1;i++)      //交换排序
      {//a[i]与其后元素比较,若a[j]<a[i].则交换
           for(j = i+1;j < n;j++)
               if(a[i] >a[j])
           {
                 index = a[i];
                 a[i] = a[j];
                 a[j] = index;
           }
      }
#include<stdio.h>
#define N 20

int main()
{
     int n,i,j;
     int index;
     int min;
     int a[N];

     printf("请输入整数的个数:\n");
     scanf("%d",&n);      //输入整数的个数

     printf("请分别输入这几个整数 :\n");
     for(i = 0;i < n;i++)
     scanf("%d",&a[i]);    //输入的元素依次存入数组

      for(i = 0;i < n -1;i++)      //交换排序
      {//a[i]与其后元素比较,若a[j]<a[i].则交换
           for(j = i+1;j < n;j++)
               if(a[i] >a[j])
           {
                 index = a[i];
                 a[i] = a[j];
                 a[j] = index;
           }
      }

     printf("排序后输出n个数:\n");
     for(i = 0;i < n;i++)
          printf("%d\n",a[i]);

     return 0;
}

原创文章 15 获赞 369 访问量 8051

猜你喜欢

转载自blog.csdn.net/m0_46518461/article/details/106096540