数组

数组是把具有相同数据类型的若干变量有序的组织起来的集合。

数组属于构造数据类型

编译器给数组分配空间的时候,按照数组长度给数组分配一片连续的内存空间

 

声明数组:

long numbers[10];

中括号中的数字定义了要存放在数组中的元素的个数,也就是数组的长度,称为数组维

 

如何区分数组中的变量?

数组中的每个值都由索引值来识别。索引值是一个整数,放在数组名称后的方括号内。是从0开始的连续整数。所以取读数组里的元素例如: numbers[2];就是取读的在numbers数组中索引为2的元素

 

使用数组:

#include <stdio.h>

int main(void)
{
    /* 计算10个分数的平均值 */
    double scores[10];
    printf("\nInput ten number as student score:\n");
    for(int i=0;i<10;i++)
    {
        scanf("%lf",&scores[i]);
    } 
    double result=0.0;
    for(int i=0;i<10;i++)
    {
        result+=scores[i];
    }
    double avg=result/10;
    printf("coun t= %.2lf , avg= %.2lf ",result,avg);
    return 0;
}
View Code

 

内存:

计算机的内存可以看作一排很整齐的盒子,每个盒子都有两个状态(满为1,空为0)。每一个盒子都包含一个二进制数,被称为位。

字节的标记被称为地址

 

寻址运算符

在前面的scanf()函数中广泛使用。

它放在变量名前,它返回的是变量的地址

%p 输出16进制。

输出变量的地址:

printf("\n%p",&value);

 

数组的初始化:

1、直接确定的给数组指定元素赋初值

2、

double values[5]={1.5,2.5,3.5,4.5,5.5};

,也可以有选择的给数组初始化,那样的话没有初始化的元素的值为默认值

double values[5]={1.5,2.5,3.5};

3、这种数组的大小由元素的初始值来确定

int primes[]={2,3,5,7,9,22,13};

 

确定数组的大小:

我们前面学过使用sizeof确定变量的所占字节数,在同一数组中,所有元素的所占字节相等。

计算数组大小:

#include <stdio.h>

int main(void)
{
    /* 使用sizeof确定数组的大小 */
    printf("\nThe size of a variable of type long is %d bytes.",sizeof(long));
    double value=1.0;
    printf("\nThe size of value is %d bytes." ,sizeof value);
    int numbers[]={
        12,45,23,66,34,243,98
    } ;
    int count=0;
    count=(sizeof numbers)/(sizeof numbers[0]);
    printf("the array has %d element.",count);
    return 0;
}

 

多维数组

二维数组的声明:

demo: float carrots[25][50];

 

多维数组的初始化

demo: int numbers[3][4]={

     {10,20,30,40},{15,25,35,45},{47,48,49,50}

}

如果提供的初始值少于行中的元素数,就必须给每一行的值加上括号。

 

九宫格:

#include <stdio.h>

int main(void)
{
    int player=0; /* player number - 1 or 2*/
    int winner=0; /* the winning player */
    int choice=0;
    int row=0; /* Row index for a square */
    int column=0; /* Column index for a square */
    int line=0;
        
    char board[3][3]={
        {'1','2','3'},
        {'4','5','6'},
        {'7','8','9'}
    };
    for(int i=0;i<9&&winner==0;i++)
    {
        printf("\n\n");
        printf("%c | %c | %c\n",board[0][0],board[0][1],board[0][2]);
        printf("---+---+---\n");
        printf("%c | %c | %c\n",board[1][0],board[1][1],board[1][2]);
        printf("---+---+---\n");
        printf("%c | %c | %c\n",board[2][0],board[2][1],board[2][2]);
        printf("---+---+---\n");
        
        player=i%2+1; /* Stect player */
        
        do{
            printf("\nPlayer %d,please enter the number of the square where you want to place your %c:",player,(player==1)?'X':'O');
            scanf("%d",&choice);
            
            row=--choice/3;
            column=choice%3;
            
        }while(choice<0||choice>9||board[row][column]>'9');
        
        board[row][column]=(player==1)?'X':'O';
        
        if((board[0][0]==board[1][1]&&board[0][0]==board[2][2])||
           (board[0][2]==board[1][1]&&board[0][2]==board[2][0]))
        {
               winner =player;
        }else{
            for(line=0;line<=2;line++)
            {
                if((board[line][0]==board[line][1]&&board[line][0]==board[line][2])||
                   (board[0][line]==board[1][line]&&board[0][line]==board[2][line]))
                {
                       winner =player;
                }
            }
        }
        
    }
    
    if(winner==0)
    {
        printf("\nHow boring,it is a draw\n");
    }else
    {
        printf("\nCongratulations, player %d,YOU ARE THE WINNER!\n",winner);
    }
    return 0;
}

 

posted @ 2016-04-26 18:59  guodaxia  阅读(281)  评论(0编辑  收藏  举报