一维数组
- 创建和初始化
type name [n]
//type 元素类型
//name 数组名称
//n 数组大小
– 创建时,[]中要给定常量才能成功创建,不能使用变量
int arr1[4] = {1,2,5};
int arr2[] = {1,2,3,4};
char arr3[3] = {'a','34',23};
char arr4[] = "asdfg";
- 使用
– 通过下标引用操作符[]进行数组访问 - 存储
– 一维数组在内存中是连续存放的
二维数组
- 创建和初始化
int arr[2][4] = {1,2,3,4};
int arr[3][5] = {{1,1},{2,2}};
int arr[][4] = {{1,1},{2,2}};
- 使用
– 通过下标引用操作符[]进行数组访问 - 存储
– 二维数组在内存中是连续存放的
数组应用
作为函数参数的应用
冒泡排序
//两两相邻的元素进行比较
void bubble_sort(int arr[],int sz)
{
int i =0;
for(i=0;i<sz-1;i++)
{
int flag =1;//有序标志
int j=0;
for(j=0;j<sz-1-i;j++)
{
if(arr[j]<arr[j+1])
{
int tep = arr[j];
arr[j]=arr[j+1];
arr[j+1]=tep;
flag = 0;
}
}
if(flag == 1)
break;
}
}
int main()
{
int arr[] = {8,5,0,23,4,7,4,6};
int sz = sizeof(arr)/sizeof(arr[0]);
int i =0;
//对arr进行升序排列
bubble_sort(arr,sz);//冒泡排序
for(i =0;i<sz;i++)
{
printf("%d ",arr[i]);
}
return 0;
}
PS:除了sizeof(数组名)以及&数组名的数组名表示的是整个数组之外,其他情况的所有数组名表示的都是数组首元素的地址。
三子棋
main.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "game.h"
void game()
{
char board[ROW][COL] ={0};
char ret = {0};
init_board(board,ROW,COL);
show_board(board,ROW,COL);
while(1)
{
player_move(board,ROW,COL);
show_board(board,ROW,COL);
ret =is_win(board,ROW,COL);
if(ret != 'C')
break;
machine_move(board,ROW,COL);
show_board(board,ROW,COL);
is_win(board,ROW,COL);
ret =is_win(board,ROW,COL);
if(ret != 'C')
break;
}
if(ret == '*')
printf("恭喜你赢啦!\n");
else if(ret == '#')
printf("抱歉机器赢了!\n");
else
printf("平局。\n");
}
int main()
{
begin();
return 0;
}
game.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "game.h"
//菜单页面
void menu()
{
printf("++++++++++++++++++++++++++++++++++++\n");
printf("+++++++++欢迎进入三子棋游戏+++++++++\n");
printf("++++++++++++++++++++++++++++++++++++\n");
printf("+++++++开始:按1 退出:按0+++++++\n");
printf("++++++++++++++++++++++++++++++++++++\n");
}
//开始游戏
void begin()
{
int choose = 0;
srand((unsigned int)time(NULL));
do
{
menu();
printf("请输入您的选择:");
scanf("%d",&choose);
switch(choose)
{
case 1:
printf("开始游戏\n");
game();
break;
case 0:
printf("退出游戏\n");
break;
default:
printf("输入错误,请重新输入!\n");
break;
}
}while(choose);
}
//初始化棋盘
void init_board(char board[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<ROW;i++)
{
for(j=0;j<COL;j++)
{
board[i][j] = ' ';
}
}
}
//打印棋盘
void show_board(char board[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
printf(" %c ",board[i][j]);
if(j<col-1)
printf("|");
}
printf("\n");
if(i<row-1)
{
for(j=0;j<col;j++)
{
printf("---");
if(j<col-1)
printf("|");
}
printf("\n");
}
}
}
//玩家移动
void player_move(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
while(1)
{
printf("请玩家输入要下的坐标:\n");
scanf("%d%d",&x,&y);
//判断坐标的合法性
if(x>=1 && x<=row && y>=1 && y<=col)
{
if(board[x-1][y-1] == ' ')
{
board[x-1][y-1] = '*';
break;
}
else
{
printf("该坐标已被占用!\n");
}
}
else
{
printf("非法坐标,请重新输入!\n");
}
}
}
//机器移动
void machine_move(char board[ROW][COL],int row,int col)
{
int x=0;
int y=0;
printf("机器走:\n");
while(1)
{
x = rand()%row;
y = rand()%col;
if(board[x][y] == ' ')
{
board[x][y] = '#';
break;
}
}
}
//判断是否满盘
int is_full(char board[ROW][COL],int row,int col)
{
int i=0;
int j=0;
for(i=0;i<row;i++)
{
for(j=0;j<col;j++)
{
if(board[i][j] == ' ')
return 0;
}
}
return 1;
}
//判断输赢
char is_win(char board[ROW][COL],int row,int col)
{
int i=0;
//判断横三列是否相等
for(i=0;i<row;i++)
{
if(board[i][0]==board[i][1] && board[i][1] ==board[i][2] && board[i][0]!= ' ')
{
return board[i][0];
}
}
//判断竖三列是否相等
for(i=0;i<col;i++)
{
if(board[0][i]==board[1][i] && board[1][i] ==board[2][i] && board[0][i]!= ' ')
{
return board[0][i];
}
}
//对角线判断
if(board[0][0] == board[1][1] && board[0][0] == board[2][2] && board[0][0]!= ' ')
{
return board[0][0];
}
if(board[0][2] == board[1][1] && board[0][2] == board[2][0] && board[0][2]!= ' ')
{
return board[0][2];
}
//判断是否平局
if(1 == is_full(board,ROW,COL))
{
return 'Q';
}
else
return 'C';
}
game.h
#define ROW 3
#define COL 3
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void menu();
void begin();
void init_board(char board[ROW][COL],int row,int col);
void show_board(char board[ROW][COL],int row,int col);
void game();
void player_move(char board[ROW][COL],int row,int col);
void machine_move(char board[ROW][COL],int row,int col);
int is_full(char board[ROW][COL],int row,int col);
char is_win(char board[ROW][COL],int row,int col);