数组篇

  • 一:什么是数组?
  • 二:如何定义数组?
  • 三:如何访问数组
  • 四:如何计算一个数组的大小
  • 五:数组和函数
  • 六:数组和函数之成绩判断例
  • 七:思维导图总结


一:什么是数组?

1:数组是数据的集合。
2:数组的数据是同类型的,1-100都是整数,不能是1.1, 1.2,1.3
3:数组的地址是连续的

二:如何定义数组?

int array[10]; //1.没有初始化的数组,仅仅申请了10个整形数的内存空间,最好要初始化: int array[10] = {0};
int array[10] = {1,2,3,4,5,6,7,8,9,10}; //2.有初始化的数组,完整初始化,该数组申请了十个整型数的内存空间,并赋值十个数 1 2 3 4 5 6 7 8 9 10
int array[10] = {1,2,3}; //3.有初始化的数组,不完整初始化,该数组申请了10个整型数的内存空间,但只赋值三个数1 2 3,放在数组的前三个位置

三:如何访问数组

#include<stdio.h>

int main(){
           int array[3] = {1,2,3};
           printf("数组的第二个元素是:%d",array[2]);
return 0;
}

1.运行结果:数组的第二个元素是:3
2.数组是通过下标来引用当中的某个元素
3.为什么是3而不是2?是因为外国人喜欢从0开始计算,毕竟这玩意是外国人发明的

  • 注意:数组的中括号只有在定义一个数组的时候才表示数组的大小,其余任何情况,都表示用下标来访问数组

四:如何计算一个数组的大小

#include<stdio.h>
int main(){

    int a[3];//一个整数型占用空间4个字节,三个占用空间12个字节
    char b[3];//一个字符型占用空间1个字节,三个占用空间3个字节
       
    printf("a数组的大小是:%ld\n",sizeof(a)); 
    printf("b数组的大小是:%ld\n",sizeof(b));
    printf("一个整型数的空间是:%ld\n",sizeof(int));
    printf("一个字符型数的空间是:%ld\n",sizeof(char));
    
    return 0;
}

问:两个数组有什么相同,有什么不同?

相同:元素个数都是3
不同:1.数组的类型不同 2.数组的大小不同

问:如何计算数组中元素的个数?

1)根据数组的总大小 / 一个类型的大小

2)a数组的元素个数为:sizeof(a) / sizeof(a[0]) 或者 sizeof(a) / sizeof(int)

3)b数组的元素个数为:sizeof(b) / sizeof(b[0]) 或者 sizeof(b) / sizeof(char)

五:数组和函数

1.看代码

#include<stdio.h>

void arrayPrint(int datas[5] , int cnt)
{
        int i;

        printf("调用函数中数组的大小:%ld\n",sizeof(datas));
        printf("调用函数中一个int数据的大小是:%ld\n",sizeof(int));
        printf("调用函数中数组的元素个数是:%ld\n",sizeof(datas) / sizeof(datas[0]));

        for(i=0;i<cnt;i++){
                printf("%d ",datas[i]);
                putchar('\n');//purchar 输出一个字符 , getchar 获取一个字符的输入

        }

}
int main()
{
        int array[5] = {11,22,33,44,55};

        printf("主函数数组的大小是:%ld\n",sizeof(array));
        printf("主函数数组的元素是:%ld\n",sizeof(array) / sizeof(array[0]));

        arrayPrint(array,sizeof(array) / sizeof(array[0]));

        return 0;
}

2.看运行结果

数组只有一个数不重复Java_数组


3.问:为啥主函数数组传参给调用函数得到的数组大小和数组元素不一样?

void arrayPrintf(int datas[5],int cnt)

1)形式参数中,虽然写了一个数组的样子,中括号中数组的大小是无效的!!!

2)这里不管中括号中写多少,都不能代表形参数组有多大,所以可以不用写,直接写 int datas[]

3)这里的中括号的作用仅仅用来表示,该参数是一个(地址!!!)

  • 注意:1. 主函数传过来的第一个参数是数组的首地址,第二个参数是数组的大小
  • 2. 数组名 = 地址 = 数组的首地址,所以主函数的把数组 &array[0] 传过来也可以!!!

4.还有

数组只有一个数不重复Java_数组只有一个数不重复Java_02

这里输出数组不用担心是地址需要 * 键取内容,不冲突,所以可以用数组的下标法直接遍历。

六:数组和函数之成绩判断例

#include<stdio.h>
#include<stdlib.h>
//提示用户输入10个成绩,找最高分,找最低分,算出平均分


void initScores(int datas[],int size)
{
     int i;
     for(i=0;i<size;i++){
         printf("请输入第%d个分数:\n",i+1);
         scanf("%d",&datas[i]);

         if(datas[i] > 100 || datas[i] < 0){
            printf("请输入0-100的分数成绩!\n");
            exit(-1);
         }
     }
}

void printScores(int datas[],int size)
{
     int i;
     for(i=0;i<size;i++){
         printf("你输入的第%d个成绩是:%d\n",i+1,datas[i]);
     }
}

int getMax(int datas[],int size)
{
    int i;
    int max;
    max = datas[0];

    for(i=0;i<size;i++){
        if(max < datas[i]){
           max = datas[i];
        }
    }

    return max;
}

int getMin(int datas[],int size)
{
    int i;
    int min;
    min = datas[0];

    for(i=0;i<size;i++){
        if(min > datas[i]){
           min = datas[i];
        }
    }

     return min;
}

float getAverage(int datas[],int size)
{
      int i;
      float average;
      int total = 0;
      for(i=0;i<size;i++){
          total += datas[i];//total = total + datas[i];
      }
      average = (float)total / size;
      return average;
}

void printRet(int max,int min,float average)
{
     printf("最高分是:%d 最低分是:%d 平均分是:%f\n",max,min,average);
}
int main()
{
    int scores[10];
    int len;
    int max;
    int min;
    float average;

    len = sizeof(scores) / sizeof(scores[0]);

    initScores(scores,len);
    printScores(scores,len);
    max = getMax(scores,len);
    min = getMin(scores,len);
    average = getAverage(scores,len);

    printRet(max,min,average);

    return 0;
}

七:思维导图总结

数组只有一个数不重复Java_数组_03