1.五子棋
test.c - 测试游戏的逻辑
game.c - 与游戏相关函数实现
game.h - 与游戏相关函数的声明,符号声明,头文件的包含。
- //test.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include "game.h"
- void menu() //打印菜单函数
- {
- printf("********************************\n");
- printf("********* 1.play **********\n");
- printf("********* 0.exit **********\n");
- printf("********************************\n");
- }
- void game()
- {
- char board[ROW][COL];
- char ret = 0;
- srand((unsigned int)time(NULL));
- InitBoard(board, ROW, COL); //棋盘的初始化
- DisplayBoard(board, ROW, COL); //打印棋盘
- while (1)
- {
- PlayerMove(board, ROW, COL); //玩家下棋
- DisplayBoard(board, ROW, COL); //显示当前棋盘状态
- ret = IsWin(board, ROW, COL); //判断胜负
- if (ret != 'C') //如果是* # Q ,那么游戏就结束了。
- {
- break;
- }
- ComputerMove(board, ROW, COL); //电脑下棋
- DisplayBoard(board, ROW, COL);
- ret = IsWin(board, ROW, COL);
- if (ret != 'C')
- {
- break;
- }
- }
- if (ret == '*')
- {
- printf("玩家获胜\n");
- }
- else if (ret == '#')
- {
- printf("电脑获胜\n");
- }
- else
- {
- printf("平局\n");
- }
- }
- int main()
- {
- int input = 0;
- do
- {
- menu();
- printf("请选择:");
- scanf("%d", &input);
- switch (input)
- {
- case 1:
- game();
- break;
- case 0 :
- printf("退出游戏\n");
- break;
- default:
- printf("输入错误\n");
- break;
- }
- } while (input);
- return 0;
- }
复制代码- //game.h
- #pragma once
- #define ROW 3
- #define COL 3
- #include <stdio.h>
- #include <stdlib.h> //使用rand时需要调用
- #include <time.h> //使用time时需要调用
- void InitBoard(char board[ROW][COL], int row, int col); //初始化函数的声明
- void DisplayBoard(char board[ROW][COL], int row, int col); //显示棋盘状态函数的声明
- void PlayerMove(char board[ROW][COL], int row, int col); //玩家下棋函数的声明
- void ComputerMove(char board[ROW][COL], int row, int col); //电脑下棋函数的声明
- char IsWin(char board[ROW][COL], int row, int col); //判断胜负函数的声明
- // * - 玩家获胜
- // # - 电脑获胜
- // Q - 平局
- // C - 继续
复制代码- //game.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include "game.h"
- void InitBoard(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 DisplayBoard(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 PlayerMove(char board[ROW][COL], int row, int col) //玩家下棋函数的定义
- {
- int x = 0;
- int y = 0;
- printf("玩家走:\n");
- while (1)
- {
- printf("请选择你要走的坐标:");
- 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 ComputerMove(char board[ROW][COL], int row, int col) //电脑下棋函数的定义
- {
- printf("电脑走:\n");
- while (1)
- {
- int x = rand() % row;
- int y = rand() % col;
- if (board[x][y] == ' ')
- {
- board[x][y] = '#';
- break;
- }
- }
- }
- int IsFull(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 IsWin(char board[ROW][COL], int row, int col) //判断胜负函数的定义
- {
- int x = 0;
- int y = 0;
- //三行
- for (x = 0;x < row;x++)
- {
- if (board[x][0] == board[x][1] && board[x][1] == board[x][2] && board[x][1] != ' ')
- {
- return board[x][1];
- }
- }
- //三列
- for (y = 0;y < col;y++)
- {
- if (board[0][y] == board[1][y] && board[1][y] == board[2][y] && board[1][y] != ' ')
- {
- return board[1][y];
- }
- }
- //右->左对角线
- if (board[0][2] == board[1][1] && board[1][1] == board[2][0] && board[1][1] != ' ')
- {
- return board[1][1];
- }
- //左->右对角线
- if (board[0][0] == board[1][1] && board[1][1] == board[2][2] && board[1][1] != ' ')
- {
- return board[1][1];
- }
- //判断棋盘是否满了
- //如果满了返回1,没满则返回0
- int ret = IsFull(board, ROW, COL);
- if (ret == 1)
- {
- return 'Q';
- }
- else
- {
- return 'C';
- }
- }
复制代码 2.扫雷游戏
- test.c — 与游戏相关的逻辑测试
- game.c — 与游戏相关的函数实现
- game.h — 与游戏相关的函数的声明
- //test.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include "game.h"
- void menu()
- {
- printf("******************************\n");
- printf("**********1.play**************\n");
- printf("**********0.exit**************\n");
- printf("******************************\n");
- }
- void game()
- {
- char mine[ROWS][COLS] = { 0 }; //存放部署好的雷的信息
- char show[ROWS][COLS] = { 0 }; //存放排查出的雷的信息
- InitBoard(mine, ROWS, COLS, '0'); //雷盘初始化
- DisplayBoard(mine, ROW, COL); //打印雷盘
- InitBoard(show, ROWS, COLS, '*');
- DisplayBoard(show, ROW, COL);
- Set_Mine(mine, ROW, COL); //部署雷
- DisplayBoard(mine, ROW, COL);
- Find_Mine(mine, show, ROW, COL); //排查雷
- }
- int main()
- {
- int input = 0;
- srand((unsigned int)time(NULL));
- do
- {
- menu(); //游戏菜单
- printf("请选择:");
- scanf("%d", &input);
- switch (input)
- {
- case 1:
- game(); //扫雷游戏
- break;
- case 0:
- printf("退出游戏\n");
- break;
- default:
- printf("输入错误,重新输入!\n");
- }
- } while (input);
- }
复制代码- //game.c
- #define _CRT_SECURE_NO_WARNINGS 1
- #include "game.h"
- void InitBoard(char board[ROW][COL], int rows, int cols, char set)
- {
- int i = 0;
- int j = 0;
- for (i = 0;i < rows;i++)
- {
- for (j = 0;j < cols;j++)
- {
- board[i][j] = set;
- }
- }
- }
- void DisplayBoard(char board[ROW][COL], int row, int col)
- {
- int x = 0;
- int y = 0;
- printf("------ 扫雷游戏 -------\n");
- for (x = 0;x <= row;x++)
- {
- printf("%d ", x);
- }
- printf("\n");
- for (x = 1;x <= row;x++)
- {
- printf("%d ", x);
- for (y = 1;y <= col;y++)
- {
- printf("%c ",board[x][y]);
- }
- printf("\n");
- }
- printf("------ 扫雷游戏 -------\n");
- }
- static int get_mine_count(char mine[ROW][COL], int x, int y)
- {
- return mine[x-1][y] +
- mine[x-1][y-1] +
- mine[x][y-1] +
- mine[x+1][y-1] +
- mine[x+1][y] +
- mine[x+1][y+1] +
- mine[x][y+1] +
- mine[x-1][y-1] - 8 * '0';
- }
- void Set_Mine(char mine[ROWS][COLS], int row, int col)
- {
- int count = 10;
- while (count)
- {
- int x = rand() % row + 1;
- int y = rand() % col + 1;
- if (mine[x][y] == '0')
- {
- mine[x][y] = '1';
- count--;
- }
- }
- }
- void Find_Mine(char mine[ROW][COL], char show[ROW][COL], int row, int col)
- {
- int x = 0;
- int y = 0;
- int win = 0;
- while (win < row * col - Count)
- {
- printf("请输入选择的坐标:");
- scanf("%d %d", &x, &y);
- if (x >= 1 && x <= row && y >= 1 && y <= col) //判断坐标的合理性
- {
- if (mine[x][y] == '1')
- {
- printf("失败");
- break;
- }
- else
- {
- int count = get_mine_count(mine, x, y); //不是雷的前提下,计算x,y坐标中周围有多少个雷
- show[x][y] = count + '0';
- DisplayBoard(show, ROW, COL); //打印排查出的信息
- win++;
- }
- }
- else
- {
- printf("错误,重新输入\n");
- }
- }
- if (win = row * col - Count)
- {
- printf("恭喜获胜\n");
- }
- }
复制代码- //game.h
- #pragma once
- #include <stdio.h>
- #include <stdlib.h>
- #include <time.h>
- #define ROW 9
- #define COL 9
- #define ROWS ROW+2
- #define COLS COL+2
- #define Count 10
- //初始化函数声明
- void InitBoard(char board[ROW][COL], int rows, int cols, char set);
- //打印函数声明
- void DisplayBoard(char board[ROW][COL], int row, int col);
- //部署函数声明
- void Set_Mine(char mine[ROWS][COLS], int row, int col);
- //排查函数声明
- void Find_Mine(char mine[ROW][COL], char show[ROW][COL], int row, int col);
复制代码 3.杨辉三角
在屏幕上打印杨辉三角。
1
1 1
1 2 1
1 3 3 1
…
- #include <stdio.h>
- int main()
- {
- int arr[10][10] = { 0 };
- int i = 0;
- int j = 0;
- for (i = 0; i < 10; i++)
- {
- for (j = 0; j <= i; j++)
- {
- if (j == 0)
- {
- arr[i][j] = 1;
- }
- if (i == j)
- {
- arr[i][j] = 1;
- }
- if (i >= 2 && j >= 1)
- {
- arr[i][j] = arr[i - 1][j - 1] + arr[i - 1][j];
- }
- }
- }
- for (i = 0; i < 10; i++)
- {
- for (j = 0; j <= i; j++)
- {
- printf("%d ", arr[i][j]);
- }
- printf("\n");
- }
- return 0;
- }
复制代码 4.通讯录
- test.c — 与通讯录相关的逻辑测试
- game.c — 与通讯录相关的函数实现
- game.h — 与通讯录相关的函数的声明
test.c:
- #define _CRT_SECURE_NO_WARNINGS 1
- //通讯录
- //1.能存放1000个人的信息
- //每个人信息:姓名+年龄+性别+电话+地址
- //2.增加人的信息
- //3.删除指定的人的信息
- //4.修改指定的人的信息
- //5.查找指定的人的信息
- //6.排序通讯录的信息
- #include "Contact.h"
- enum Option
- {
- EXIT,
- ADD,
- DEL,
- MODIFY,
- SEARCH,
- SORT,
- PRINT
- };
- void menu()
- {
- printf("********************************************************\n");
- printf("********** 1.add 2.del ****************\n");
- printf("********** 3.modify 4.search****************\n");
- printf("********** 5.sort 6.print ****************\n");
- printf("********** 0.exit *************\n");
- printf("********************************************************\n");
- }
- int main()
- {
- int input = 0;
- Contact con;
- Init_Contact(&con);
- do
- {
- menu();
- printf("请选择:>");
- scanf("%d", &input);
- switch (input)
- {
- case ADD:
- Add_Contact(&con);
- break;
- case DEL:
- Del_Contact(&con);
- break;
- case MODIFY:
- Modify_Contact(&con);
- break;
- case SEARCH:
- Search_Contact(&con);
- break;
- case SORT:
- break;
- case PRINT:
- Print_Contact(&con);
- break;
- case EXIT:
- return;
- break;
- default:
- printf("选择错误,请重新选择:>");
- break;
- }
- } while (input);
- }
复制代码 Contact.c:
- #include "Contact.h"
- static int Find_ByName(Contact* c,char name[])
- {
- int i = 0;
- for (i = 0; i < c->sz; i++)
- {
- if (strcmp(c->data[i].name ,name) == 0)
- {
- return i;
- }
- }
- return -1;
- }
- void Init_Contact(Contact* c)
- {
- c->sz = 0;
- memset(c->data, 0, sizeof(c->data));
- }
- void Add_Contact(Contact* c)
- {
- if (c->sz == 1000)
- {
- printf("通讯录已满,无法增加\n");
- return;
- }
- printf("请输入名字:>");
- scanf("%s",c->data[c->sz].name );
- printf("请输如年龄:>");
- scanf("%d", &(c->data[c->sz].age));
- printf("请输入性别:>");
- scanf("%s", c->data[c->sz].sex);
- printf("请输入电话:>");
- scanf("%s", c->data[c->sz].tele);
- printf("请输入地址:>");
- scanf("%s", c->data[c->sz].addr);
- c->sz++;
- printf("增加成功\n");
- }
- void Print_Contact(const Contact* c)
- {
- int i = 0;
- printf("%-10s\t%-5s\t%-8s\t%-15s\t%-20s\n", "姓名","年龄","性别","电话","地址");
- for (i = 0; i < c->sz; i++)
- {
- printf("%-10s\t%-5d\t%-8s\t%-15s\t%-20s\n",
- c->data[i].name,
- c->data[i].age,
- c->data[i].sex,
- c->data[i].tele,
- c->data[i].addr);
- }
- }
- void Del_Contact(Contact* c)
- {
- char name[MAX_NAME] = { 0 };
- if (c->sz == 0)
- {
- printf("通讯录为空,无法删除\n");
- }
- printf("请输入你要删除的信息:>");
- scanf("%s", name);
- int pos = Find_ByName(c, name);
- if (pos == -1)
- {
- printf("你要删除的信息不存在\n");
- }
- for (int i = 0; i < c->sz - 1; i++)
- {
- c->data[i] = c->data[i + 1];
- }
- c->sz--;
- printf("删除成功\n");
- }
- void Modify_Contact(Contact* c)
- {
- char name[MAX_NAME] = { 0 };
- printf("请输入你要修改的信息:>");
- scanf("%s", name);
- int pos = Find_ByName(c, name);
- if (pos == -1)
- {
- printf("你要修改的信息不存在\n");
- }
- else
- {
- printf("请输入名字:>");
- scanf("%s", c->data[pos].name);
- printf("请输如年龄:>");
- scanf("%d", &(c->data[pos].age));
- printf("请输入性别:>");
- scanf("%s", c->data[pos].sex);
- printf("请输入电话:>");
- scanf("%s", c->data[pos].tele);
- printf("请输入地址:>");
- scanf("%s", c->data[pos].addr);
- printf("修改成功\n");
- }
- }
- void Search_Contact(Contact* c)
- {
- char name[MAX_NAME] = { 0 };
- printf("请输入你要查找的信息:>");
- scanf("%s", name);
- int pos = Find_ByName(c, name);
- if (pos == -1)
- {
- printf("你要查找的信息不存在\n");
- }
- else
- {
- printf("%-10s\t%-5s\t%-8s\t%-15s\t%-20s\n", "姓名", "年龄", "性别", "电话", "地址");
- printf("%-10s\t%-5d\t%-8s\t%-15s\t%-20s\n",
- c->data[pos].name,
- c->data[pos].age,
- c->data[pos].sex,
- c->data[pos].tele,
- c->data[pos].addr);
- }
- }
复制代码 Contact.h:
- #define _CRT_SECURE_NO_WARNINGS 1
- #include <stdio.h>
- #define MAX_NAME 20
- #define MAX_SEX 8
- #define MAX_TELE 15
- #define MAX_ADDR 30
- #define MAX 1000
- typedef struct PeoInfo
- {
- char name[MAX_NAME];
- int age;
- char sex[MAX_SEX];
- char tele[MAX_TELE];
- char addr[MAX_ADDR];
- }PeoInfo;
- typedef struct Contact
- {
- PeoInfo data[MAX];
- int sz;
- }Contact;
- void Init_Contact(Contact* c);
- void Add_Contact(Contact* c);
- void Print_Contact(const Contact* c);
- void Del_Contact(Contact* c);
- void Modify_Contact(Contact* c);
- void Search_Contact(Contact* c);
复制代码 5.杨氏矩阵
题目内容:有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写步伐在这样的矩阵中查找某个数字是否存在。
要求:时间复杂度小于o(N);
- #include <stdio.h>
- int find_num(int arr[][3], int row, int col, int key)
- {
- int i = 0;
- int j = col-1;
- while (i<row && j>=0)
- {
- if (arr[i][j] > key)
- {
- j--;
- }
- else if (arr[i][j] < key)
- {
- i++;
- }
- else
- {
- return 1;
- }
- }
- return 0;
- }
- int main()
- {
- int arr[3][3] = { 1,2,3,4,5,6,7,8,9 };
- int k = 12;
- int ret = find_num(arr,3,3,k);
- if (ret == 1)
- {
- printf("找到了\n");
- }
- else
- {
- printf("没找到\n");
- }
- return 0;
- }
复制代码 免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |