当前位置:编程学习 > C/C++ >>

C语言学习笔记(八)--数组

1数组

 

在程序设计过程中我们往往需要处理一批相同类型的数据,如果使用基本类型定义变量来储存,显然是不方便的,这是我们就需要使用数组了。

 

2数组特点

 

1.数组大小必须是确定的,不能随机改变的。

 

2.数组的元素必须是相同类型的,不允许出现混合类型。

 

3一维数组

 

3.1一维数组的定义:

 

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

 

例如:

 

int a[10]

 

数组的生命需要注意以下几个问题:

 

1.数组的命名规则与变量相同;

 

2.常量表达式代表的是数组元素的个数,也就是数组的长度;

 

3.数组的下标是从0开始的,最后一个元素的下标是数组长度减1;

 

4.数组的定义可以和普通变量一起声明和定义

 

Float i,j[];

 

3.2一维数组的引用:数组名[下标表达式];

 

例如:int a[5]; a[3]=10;

 

其中下标表达式可以是任意类型的表达式,但值必须是非负整型的。

 

数组分配内存空间是连续的空间,地址从低地址到高地址。

 

例子代码:

 

 

<span style="font-size:18px;">#include "stdio.h" 

main() {  

   float score[10]; 

   int i; 

   printf("please input scores:\n"); 

   for (i=0;i<10;i++)               /*数组下标为0~9*/ 

      scanf("%f",&score[i]);       /*依次输入每个数组元素*/ 

   printf("\n"); 

   for(i=0;i<10;i++) 

   printf("the %d score %f\n",i+1,score[i]); 

}</span> 

一般需要一次访问数组元素时,往往使用循环来实现,在循环时应特别注意数组的下标和循环的次数等问题,防止出现下标越界的错误。

 

3.3一维数组的初始化:数组类型 数组名[数组长度]={数组元素值};

 

例如下面的语句:

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

 

注意:

 

1.定义是可以给数组全部元素赋初值,例如:

 

float f[3]={1,2,3};

 

2.也可以只给一部分赋值:

 

float f[3]={1,2};

 

这样的话,程序自动从低到高给数组元素赋值,其余的元素值为0.

 

3.在对数组的全部元素赋值时,可以不指定数组的长度,但[]不能省略:

 

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

 

4.特别注意的是,数组初始化的赋值方式只能用于数组在定义的同时赋值,在定义之后只能一个一个的赋值,例如下面就是错误的:

int a[4];

 

a={1,2,3,4}

 

例子代码:

 

 

<span style="font-size:18px;">#include "stdio.h" 

main() { 

  int i; 

  int a[10]={1,2,3,4,5,6,7,8,9,10};              /*全部初始化*/ 

  int b[]={1,2,3,4,5,6,7,8,9,10};                /*全部初始化时,可省略元素的个数*/ 

  int c[10]={1,2,3,4,5};            /*部分初始化,其余元素的个数为0,数组的长度不可以省略*/ 

  int d[10];                    /*没有赋初值,则数组元素的值不定,同样的数组的长度不可省略*/ 

  for (i=0;i<10;i++) 

    printf("%d  ",a[i]); 

  printf("\n"); 

  for (i=0;i<10;i++) 

    printf("%d  ",b[i]); 

  printf("\n"); 

  for (i=0;i<10;i++) 

    printf("%d  ",c[i]); 

  printf("\n"); 

  for (i=0;i<10;i++) 

    printf("%d  ",d[i]); 

  printf("\n"); 

}</span> 

3.4一维数组的使用实例

 

保存30个学生的成绩,查看各分数段人数,计算出优秀率和及格率,同时输出所有学生的成绩,并对不及格的做出标记。

 

代码:

 

<span style="font-size:18px;">#define  N  30 

#include "stdio.h" 

main() {  

float score[N]; 

int count[4]={0,0,0,0}; 

int i; 

float rate1,rate2; 

for(i=0;i<N;i++){    /*输入成绩同时统计成绩的等级*/ 

  scanf("%f",&score[i]); 

  if (score[i]>=85 &&score[i]<=100)  

    count[0]++; 

  else if (score[i]>=70) 

   count[1]++; 

  else if (score[i]>=60) 

    count[2]++; 

  else 

  count[3]++; 

  } 

rate1=(float)count[0]/N;    /*计算优秀率和及格率,注意强制类型转换*/ 

rate2=(float)(N-count[3])/N; 

printf("the number 85-100 %d\n",count[0]);  /*输出个分数段的人数*/ 

printf("the number 70-84 %d\n",count[1]); 

printf("the number over 60 %d\n",count[2]); 

printf("the number under 60 %d\n",count[3]); 

printf("the good rate %.2f,the fail rate %.2f\n",rate1,rate2);  /*输出优秀率和及格率*/ 

for (i=0;i<N;i++){  /*输出分数,以及不及格的提示*/ 

  if (score[i]<60)    

       printf(" %d  fail,socre is %.1f\n",i+1,score[i]);  /*学号和相应的成绩下标之间差1*/ 

   else  

 printf("%d score is %.1f\n",i+1,score[i]); 

}</span> 

思考练习:

 

处理20个斐波那契数列;

 

求数组的最大值;

 

冒泡排序;

 

选择排序;

 

二分查找:

 

4二维数组

 

4.1二维数组的定义:

 

数据类型 数组名[常量表达式1][常量表达式2];

 

例如:int [30][4];

 

4.2二维数组的引用:

 

数组名[行下标][列下标];

 

二维数组的输入输出例子代码:

 

 

<span style="font-size:18px;">#include "stdio.h" 

#define M  3 

#define N 4 

main( ){ 

    int  i , j , a[M][N] ; 

    for(i=0 ;  i<M ;  i++)                  /*外循环控制行*/ 

       for(j=0 ;  j<N;  j++)               /*内循环控制列*/ 

         scanf("%d" , &a[i][j]); 

   printf("array a is :\n"); 

   for(i=0

补充:软件开发 , C语言 ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,