【c语言】五子棋(EasyX图形库+背景音乐)
大家好,有没有觉得写了好多c语言代码,面对的都是黑框框控制台,当我们学习了基础的c语言知识,和EasyX图形库后,终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋,跟着小张一起学习吧
EasyX图形库安装
图形库链接
1.点击下载
2.安装你对应集成开发环境对应的安装包,我用的是vs2019
3.ok,我们使用库函数,加上头文件即可
棋盘的绘制
注意创建必须是.cpp,要不然图形库用不了
棋盘大小我们搞成15*15的格子,每个格子长宽为30,每个棋子半径搞成13,棋盘格长450,宽450,为了防止边界下的棋子显示不完全,每个边在向外延申15,界面总大小为480×480
1.棋盘木板
initgraph(480, 480);//初始化一个窗口(窗口大小480*480);
此时窗口闪一下就消失了,尝试加一个while循环
#include<graphics.h>//包含图形库头文件
int main()
{initgraph(480, 480);while (1){}}
编译运行:
这个并非控制台的黑框框
五子棋背景一般是棕色,我们需要自己画一个棕色背景图片贴上去,大小和界面大小480*480一样大
IMAGE p;//定义一个图片变量
loadimage(&p, "./background.png", 480, 480);//加载图片函数,(参数1图片地址,参数2图片的位置,图片大小)
./为当前目录下,和.c文件放在一个目录下面
putimage(0, 0, &p);//贴图片到界面上去(参数1,2为图片从界面的哪个位置开始贴)
#include<graphics.h>//包含图形库头文件
IMAGE p;
int main()
{initgraph(480, 480);loadimage(&p, "./background.png", 480, 480);putimage(0, 0, &p);while (1){}}
如果出现该问题,调试>属性>高级>字符集改为多字符集就行了
编译运行:
2.开始画线
setlinecolor(BLACK);//设置线颜色的函数(黑线)
for (int x = 15; x < 480; x += 30)//循环画竖线{line(x, 15, x, 465);//画线函数,前两个参数为起始点x,y,后两个参数为终点x,y}for (int y= 15; y < 480; y+= 30)//循环画横线{line(15, y, 465,y);}
#include<graphics.h>//包含图形库头文件
IMAGE p;
int main()
{initgraph(480, 480);loadimage(&p, "./background.png", 480, 480);putimage(0, 0, &p);setlinecolor(BLACK);for (int x = 15; x < 480; x += 30){line(x, 15, x, 465);}for (int y = 15; y < 480; y += 30){line(15, y, 465, y);}while (1){}}
编译运行
3.专业棋盘好像有5个黑点点(圆)
对应五个点的坐标
setfillcolor(BLACK);//设置圆的颜色fillcircle(15 + 3 * 30, 15 + 3 * 30, 3);前两个参数为圆的圆心坐标,第三个参数为圆的半径fillcircle(15 + 3 * 30, 15 + 11 * 30, 3);fillcircle(15 + 11 * 30, 15 + 3 * 30, 3);fillcircle(15 + 7 * 30, 15 + 7 * 30, 3);fillcircle(15 + 11 * 30, 15 + 11 * 30, 3);
编译运行
#include<graphics.h>//包含图形库头文件
IMAGE p;
int main()
{initgraph(480, 480);loadimage(&p, "./background.png", 480, 480);putimage(0, 0, &p);setlinecolor(BLACK);for (int x = 15; x < 480; x += 30){line(x, 15, x, 465);}for (int y = 15; y < 480; y += 30){line(15, y, 465, y);}setfillcolor(BLACK);fillcircle(15 + 3 * 30, 15 + 3 * 30, 3);fillcircle(15 + 3 * 30, 15 + 11 * 30, 3);fillcircle(15 + 11 * 30, 15 + 3 * 30, 3);fillcircle(15 + 7 * 30, 15 + 7 * 30, 3);fillcircle(15 + 11 * 30, 15 + 11 * 30, 3);while (1){}}
获取鼠标点击
ExMessage msg;//消息结构体变量
if (peekmessage(&msg, EX_MOUSE)) //偷瞄消息,第一个消息结构体地址,第二个参数,鼠标消息{switch (msg.message) //鼠标消息{case WM_LBUTTONDOWN: //左键draw(msg.x, msg.y);//鼠标光标位置坐标break;}}
当鼠标左键按下时,将此时的鼠标在对应界面的坐标传递给draw函数,需要随时获取鼠标的消息,将上述代码放在循环里面
while (1){if (peekmessage(&msg, EX_MOUSE)) //偷瞄消息,第一个消息结构体地址,鼠标消息{switch (msg.message) //鼠标消息{case WM_LBUTTONDOWN: //左键draw(msg.x, msg.y);break;}}}
画棋子
将鼠标点击的坐标传到draw函数中来,定义一个全局变量num,判断是黑子,还是白子,num=1,黑子下,num=-1,白子下。
int num = 1;
void draw(int m, int n)
{if (num == -1){setfillcolor(WHITE);//设置圆的填充色(白色)白棋}else if (num == 1){setfillcolor(BLACK);//设置圆的填充色(黑色)黑棋}fillcircle(m - m % 30 + 15, n - n % 30 + 15, 13);//画圆,圆的x,y,半径,棋子的绘制num *= -1;//黑白棋轮着下,每次调用draw,改变num值,实现黑白黑白黑白}
为什么棋子坐标是(m - m % 30 + 15, n - n % 30 + 15),因为鼠标不可能一点就是要下的坐标,只能鼠标点在某一个范围,就把该棋子落在离鼠标点的位置最近的位置,如果鼠标的坐标为48,48传给draw时,
我们知道应该下在这个位置,经过处理后是45,45,刚好是要下的位置,避免棋子落在不该落的位置。
编译运行
解决棋子可以下在棋子上面的问题
>在点一次黑色棋子被覆盖
我们可以定义一个二维数组,15*15,刚开始初始化为0,如果数组下标对应棋盘的地方有黑棋,把对应二维数组中的值放1,如果数组下标对应棋盘的地方有白棋,把对应二维数组中的值放-1;如果鼠标点击的位置有棋子的话,直接return掉,不进行绘制棋子
二维数组的初始化:
int arr[15][15];//全局变量好操作
void initboard()
{for (int i = 0; i < 15; i++){for (int j = 0; j < 15; j++){arr[i][j] = 0;//循环初始化二维数组}}
}
int full(int x, int y)
{if (arr[x][y] != 0)//如果不等于0,表示下过棋了return 0;return 0;else//如果等于0,表示没下过棋了,将该数组对应位置放num,return 1;arr[x][y] = num;return 1;
}
void draw(int m,int n)
{if (num == -1){ setfillcolor(WHITE);}else if (num == 1){ setfillcolor(BLACK);}int x;int y;yx = m / 30;//二维数组横坐标,m鼠标横坐标,如果m=48,x就是1,y = n / 30;//二维数组纵坐标n鼠标纵坐标,如果n=48,y就是1,if (full(x,y) == 0)//等于0表示下过棋了,直接return;跳出draw,如果=1,跳过这个条件判断语句,开始下棋return;fillcircle(m - m % 30 + 15, n - n % 30 + 15, 13);//下棋num *= -1;}
此时不能下下过的位置
判断输赢
int check_over()
{for (int i = 0; i < 15; i++){for (int j = 0; j < 15; j++){if (arr[i][j] == 0)continue;if (check_five(i, j) == 1){q = arr[i][j];return 1;}}}}
因为二维数组记录了下棋的状况,对应位置为1则是黑棋,-1为白棋,0是未下,循环遍历每个数组元素,先是找到下过棋的位置,没下过棋的位置直接跳过,因为我们是通过这个函数将下过棋的坐标传给
check_five(int x, int y),然后根据下x,y坐标相邻的五个是否一样,如果没下的话直接跳过,防止五个相邻位置没下棋都是0,进入check_five(int x, int y),五个0也是一样,然后游戏就结束了
int check_five(int x, int y)
{//检查一个下过棋的坐标相邻五个是否一样if (arr[x][y] == arr[x - 1][y] && arr[x][y] == arr[x - 2][y] && arr[x][y] == arr[x + 1][y] && arr[x][y] == arr[x + 2][y])//横行判断return 1;if (arr[x][y] == arr[x][y-1] && arr[x][y] == arr[x][y-2] && arr[x][y] == arr[x][y+1] && arr[x][y] == arr[x][y+2])//纵行判断return 1;if (arr[x][y] == arr[x - 1][y-1] && arr[x][y] == arr[x - 2][y-2] && arr[x][y] == arr[x + 1][y+1] && arr[x][y] == arr[x + 2][y+2])以该坐标为中心,主对角线判断return 1;if (arr[x][y] == arr[x - 1][y+1] && arr[x][y] == arr[x+2][y-2] && arr[x][y] == arr[x + 1][y-1] && arr[x][y] == arr[x-2][y+2])以该坐标为中心,副对角线判断return 1;
//相同则返回1
//不同返回0return 0;
}
在check_over()中如果check_five(i, j) 返回一,则有五个连成,将该坐标对应二维数组中的值保存在q全局变量中,然后check_over()返回1
if (check_over() == 1){outtextxy(180, 180, "游戏结束");//输出文字,参数一参数二为文字左上角坐标,参数三为文字内容//change();//消息盒子函数,提示谁赢了system("pause");//退出程序,头文件windows.h}
在调用之前必须
settextstyle(40, 20, "隶书");//设置字体高度,宽度,字体的格式setbkmode(TRANSPARENT);//字体后面设置透明,背景模式
编译运行
提示输赢
void change()//消息盒子函数,提示谁赢了
{HWND hnd = GetHWnd(); //获取窗口句柄(相当于窗口的指针)SetWindowText(hnd, "五子棋"); //设置窗口标题int isok;if(q==1)//q获取的是赢家对应二维数组的消息,黑子为1 //isok = MessageBox(NULL, "黑子胜", "提示", MB_OKCANCEL); //弹出消息盒子,提示用户操作else if(q==-1)isok = MessageBox(NULL, "白子胜", "提示", MB_OKCANCEL);if (IDOK== isok) //返回点了哪里{ //点了ok}else if (IDCANCEL == isok) //点了取消{}
}
编译运行
背景音乐函数
这里可以去看动态通讯录那一篇,加音乐有具体步骤
#include<graphics.h>//包含图形库头文件
#include<mmsystem.h>//包含多媒体设备接口头文件#pragma comment(lib,"winmm.lib")//加载静态库
void bgm()
{ //打开音乐mciSendString("open ./music.MP3", 0, 0, 0);//后面参数不用管//播放音乐mciSendString("play ./music.MP3", 0, 0, 0);//后面参数不用管
}
整体代码展示
#include <windows.h>
#include<graphics.h>//包含图形库头文件
#include<mmsystem.h>//包含多媒体设备接口头文件#pragma comment(lib,"winmm.lib")//加载静态库
IMAGE p;
int num = 1;
int q;
int arr[15][15];
void change()
{HWND hnd = GetHWnd(); //获取窗口句柄(相当于窗口的指针)SetWindowText(hnd, "五子棋"); int isok;//设置窗口标题if(q==1) //isok = MessageBox(NULL, "黑子胜", "提示", MB_OKCANCEL); //弹出消息盒子,提示用户操作else if(q==-1)isok = MessageBox(NULL, "白子胜", "提示", MB_OKCANCEL);if (IDOK== isok) //返回点了哪里{ //点了ok}else if (IDCANCEL == isok) //点了取消{}
}
void bgm()
{ //打开音乐mciSendString("open ./music.MP3", 0, 0, 0);//后面参数不用管//播放音乐mciSendString("play ./music.MP3", 0, 0, 0);//后面参数不用管
}
void initboard()
{for (int i = 0; i < 15; i++){for (int j = 0; j < 15; j++){arr[i][j] = 0;}}
}
int full(int x, int y)
{if (arr[x][y] != 0)return 0;elsearr[x][y] = num;return 1;
}
void draw(int m,int n)
{if (num == -1){ setfillcolor(WHITE);}else if (num == 1){ setfillcolor(BLACK);}int x;int y;x = m / 30;y = n / 30;if (full(x,y) == 0)return;fillcircle(m - m % 30 + 15, n - n % 30 + 15, 13);num *= -1;}
int check_five(int x, int y)
{//if (x < 2 || y < 2 || x>12 || y>12)//return 0;if (arr[x][y] == arr[x - 1][y] && arr[x][y] == arr[x - 2][y] && arr[x][y] == arr[x + 1][y] && arr[x][y] == arr[x + 2][y])return 1;if (arr[x][y] == arr[x][y-1] && arr[x][y] == arr[x][y-2] && arr[x][y] == arr[x][y+1] && arr[x][y] == arr[x][y+2])return 1;if (arr[x][y] == arr[x - 1][y-1] && arr[x][y] == arr[x - 2][y-2] && arr[x][y] == arr[x + 1][y+1] && arr[x][y] == arr[x + 2][y+2])return 1;if (arr[x][y] == arr[x - 1][y+1] && arr[x][y] == arr[x+2][y-2] && arr[x][y] == arr[x + 1][y-1] && arr[x][y] == arr[x-2][y+2])return 1;return 0;
}
int check_over()
{for (int i = 0; i < 15; i++){for (int j = 0; j < 15; j++){if (arr[i][j] == 0)continue;if (check_five(i, j) == 1){q = arr[i][j];return 1;}}}}
int main()
{bgm();ExMessage msg;initgraph(480, 480);loadimage(&p,"./background.png",480,480);putimage(0, 0, &p);setlinecolor(BLACK);for (int x = 15; x < 480; x += 30){line(x, 15, x, 465);}for (int y= 15; y < 480; y+= 30){line(15, y, 465,y);}setfillcolor(BLACK);fillcircle(15 + 3 * 30, 15 + 3 * 30, 3);fillcircle(15 + 3 * 30, 15 + 11 * 30, 3);fillcircle(15 + 11 * 30, 15 + 3 * 30, 3);fillcircle(15 + 7 * 30, 15 + 7 * 30, 3);fillcircle(15 + 11 * 30, 15 + 11 * 30, 3);settextstyle(40, 20, "隶书");setbkmode(TRANSPARENT);while (1){if (peekmessage(&msg, EX_MOUSE)) //偷瞄消息,第一个消息结构体地址,鼠标消息{switch (msg.message) //鼠标消息{case WM_LBUTTONDOWN: //左键draw(msg.x, msg.y);break;}}if (check_over() == 1){outtextxy(180, 180, "游戏结束");change();system("pause");}}
}
效果展示
20230821_194813
相关文章:
【c语言】五子棋(EasyX图形库+背景音乐)
大家好,有没有觉得写了好多c语言代码,面对的都是黑框框控制台,当我们学习了基础的c语言知识,和EasyX图形库后,终于可以和黑框框saygoodbye,今天要分享给大家的是小游戏五子棋,跟着小张一起学习吧 EasyX图形…...
【OpenCV 】对极几何标定质量验证
标定质量验证: 寻找一对对应点,已经知道对应关系及其详细坐标,根据对极几何推导实现 ///get the camera intrinsics and T_Ci_Bstd::vector<Eigen::Matrix3d> M_K;std::vector<Eigen::Matrix4d> T_Ci_B;for (int i 0; i < ne…...
Netty:ByteBuf的清空操作
说明 io.netty.buffer.ByteBuf有个函数clear(),它可以将ByteBuf的readerIndex和writerIndex都设置为0。 代码示例 package com.thb;import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled;public class Demo {public static void main(String[] args…...
SpringCloud最新最全面试题
目录 一、简单说一说什么是微服务? 二、微服务有哪些优缺点? 三、微服务、分布式、集群的区别? 四、什么是Eureka? 五、Eureka有那两大组件? 六、actuator是什么? 七、Discovery是什么? …...
leetcode359周赛
2828. 判别首字母缩略词 核心思想:枚举。只需要枚举首字母和s是否一一对应即可。 2829. k-avoiding 数组的最小总和 核心思想:自己的方法就是哈希表,枚举i的时候,将k-i统计起来,如果出现了那么就跳过。灵神的方法是数学法&#…...
nginx代理webSocket链接响应403
一、场景 使用nginx代理webSocket链接,nginx响应403 1、nginx访问日志响应403 [18/Aug/2023:09:56:36 0800] "GET /FS_WEB_ASS/webim_api/socket/message HTTP/1.1" 403 5 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit…...
websocker无法注入依赖
在公司中准备用websocker统计在线人数,在WebSocketServer使用StringRedisTemplate保存数据到redis中去,但是在保存的时候显示 StringRedisTemplate变量为null 详细问题 2023-08-20 10:37:14.109 ERROR 28240 --- [nio-7125-exec-1] o.a.t.websocket.po…...
如何进行无线网络渗透测试?
我们将重点介绍如何使用Kali Linux进行无线网络渗透测试。无线网络渗透测试是评估无线网络安全性的重要步骤,而Kali Linux作为一款专业的渗透测试发行版,提供了丰富的工具来进行这项任务。 1. 准备工作 在开始无线网络渗透测试之前,有一些准…...
【Python机器学习】实验15 将Lenet5应用于Cifar10数据集(PyTorch实现)
文章目录 CIFAR10数据集介绍1. 数据的下载2.修改模型与前面的参数设置保持一致3. 新建模型4. 从数据集中分批量读取数据5. 定义损失函数6. 定义优化器7. 开始训练8.测试模型 9. 手写体图片的可视化10. 多幅图片的可视化 思考题11. 读取测试集的图片预测值(神经网络的…...
Jeep车型数据源:提供Jeep品牌车系、车型、价格、配置等信息
Jeep是一个极具特色的汽车品牌,它的所有车型都注重实用性,具有越野性能和高性能。Jeep品牌在汽车行业中的口碑一直是非常不错的。如果你想要了解Jeep品牌车系、车型、价格、配置等信息,就可以通过挖数据平台Jeep车型数据源API接口…...
clickhouse-备份恢复
一、简介 备份恢复是数据库常用的手段,可能大多数公司很少会对大数据所使用的数据进行备份,这里还是了解下比较好,下面做了一些简单的介绍,详细情况可以通过官网来查看,经过测试发现Disk中增量备份并不好用࿰…...
(2018,ProGAN)渐进式发展 GAN 以提高质量、稳定性和变化
Progressive Growing of GANs for Improved Quality, Stability, and Variation 公众号:EDPJ 目录 0. 摘要 1. 简介 2. GAN 的渐进式发展 3. 使用小批量标准差增加变化 4. 生成器和判别器的归一化 4.1 均衡学习率 4.2 生成器中的像素特征向量归一化 5. 评…...
负载均衡下的 WebShell 连接
目录 负载均衡简介负载均衡的分类网络通信分类 负载均衡下的 WebShell 连接场景描述难点介绍解决方法**Plan A** **关掉其中一台机器**(作死)**Plan B** **执行前先判断要不要执行****Plan C** 在Web 层做一次 HTTP 流量转发 (重点࿰…...
Postman的高级用法—Runner的使用
1.首先在postman新建要批量运行的接口文件夹,新建一个接口,并设置好全局变量。 2.然后在Test里面设置好要断言的方法 如: tests["Status code is 200"] responseCode.code 200; tests["Response time is less than 10000…...
spring如何进行依赖注入,通过set方法把Dao注入到serves
1、选择Generate右键鼠标 你在service层后面方法的这些: 2、UserService配置文件的写法是怎样的: 3、我们在UserController中执行一下具体写法: 最后我们执行一下 : 4、这里可能出现空指针,因为你当前web层,因为你new这个对象根…...
Python使用图像处理库PIL(Python Imaging Library)和NumPy库来比较两副图像的相似度
目录 1、解释说明: 2、使用示例: 3、注意事项: 1、解释说明: 在Python中,我们可以使用图像处理库PIL(Python Imaging Library)和NumPy库来比较两副图像的相似度。常用的图像相似度计算方法有…...
clickhouse扩缩容
一、背景 我们之前已经学会了搭建clickhouse集群,我们搭建的是一套单分片两副本的集群,接下来我们来测试下clickhouse的扩缩容情况 二、扩容 扩容相对来说比较简单,我们原来的架构如下 hostshardreplica192.169.1.111192.169.1.212 现在…...
动漫3D虚拟人物制作为企业数字化转型提供强大动力
一个 3D 虚拟数字人角色的制作流程,可以分为概念设定-3D 建模-贴图-蒙皮-动画-引擎测试六个步骤,涉及到的岗位有原画师、模型师、动画师等。角色概念设定、贴图绘制一般是由视觉设计师来完成;而建模、装配(骨骼绑定)、渲染动画是由三维设计师来制作完成。…...
数据同步工具比较:选择适合您业务需求的解决方案
在当今数字化时代,数据已经成为企业的核心资产。然而,随着业务的扩展和设备的增多,如何实现数据的高效管理和同步成为了一个亟待解决的问题。本文将介绍几种常见的数据同步工具,并对比它们的功能、性能和适用场景,帮助…...
Python中数据结构列表详解
列表是最常用的 Python 数据类型,它用一个方括号内的逗号分隔值出现,列表的数据项不需要具有相同的类型。 列表中的每个值都有对应的位置值,称之为索引,第一个索引是 0,第二个索引是 1,依此类推。列表都可…...
引领行业高质量发展|云畅科技参编《低代码开发平台创新发展路线图(2023)》
8月8日-9日,中国电子技术标准化研究院于北京顺利召开《低代码开发平台创新发展路线图(2023)》封闭编制会。云畅科技、浪潮、百度、广域铭岛等来自低代码开发平台解决方案供应商、用户方、科研院所等近30家相关单位的40余位专家参与了现场编制…...
Ubuntu22.04编译Nginx源码
执行如下命令 # ./configure --sbin-path/usr/local/nginx/nginx --conf-path/usr/local/nginx/nginx.conf --pid-path/usr/local/nginx/nginx.pid输出结果,出现如下: Configuration summary using system PCRE2 library OpenSSL library is not used …...
视频上传,限制时长,获取视频时长
使用element的upload上传文件时,除了类型和大小,需求需要限制只能长传18秒内的视频,这里通过upload的before-upload,以及创建一个音频元素对象拿到durtaion时长属性来实现。 getVideoTime(file) {return new Promise(async (resol…...
Open3D 进阶(5)变分贝叶斯高斯混合点云聚类
目录 一、算法原理二、代码实现三、结果展示四、测试数据本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫。 系列文章(连载中。。。爬虫,你倒是爬个完整的呀?): Open3D 进阶(1) MeanShift点云聚类Open3D 进阶(2)DB…...
5、css学习5(链接、列表)
1、css可以设置链接的四种状态样式。 a:link - 正常,未访问过的链接a:visited - 用户已访问过的链接a:hover - 当用户鼠标放在链接上时a:active - 链接被点击的那一刻 2、 a:hover 必须在 a:link 和 a:visited 之后, a:active 必须在 a:hover 之后&…...
Synchronized与Java线程的关系
前言 Java多线程处理任务时,为了线程安全,通常会对共享资源进行加锁,拿到锁的线程才能进行访问共享资源。而加锁方式通过都是Synchronized锁或者Lock锁。 那么多线程在协同工作的时候,线程状态的变化都与锁对象有关系。 …...
使用本地电脑搭建可以远程访问的SFTP服务器
文章目录 1. 搭建SFTP服务器1.1 下载 freesshd 服务器软件1.3 启动SFTP服务1.4 添加用户1.5 保存所有配置 2. 安装SFTP客户端FileZilla测试2.1 配置一个本地SFTP站点2.2 内网连接测试成功 3. 使用cpolar内网穿透3.1 创建SFTP隧道3.2 查看在线隧道列表 4. 使用SFTP客户端&#x…...
批量修改文件名怎么操作?
批量修改文件名怎么操作?不管你使用电脑处理工作还是进行学习,都会在电脑中产生很多的文件,时间一久电脑里的文件更加杂乱无章,这时候如果不对电脑中的文件进行及时的管理,那么很可能出现文件丢失而你自己还发现不了的…...
【LeetCode】538.把二叉搜索树转换为累加树
题目 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下,二叉搜索树满足下列约束条件…...
linux 安装 kibana
首先下载 kibana https://www.elastic.co/cn/downloads/kibana 然后上传到linux /usr/local 目录下解压安装 修改config/kibana.yml 配置文件,将elasticsearch.hosts 然后再nginx 中做一个端口映射,实现在浏览器中输入后xxxx:5602 nginx 可以将请求转发…...
国内酒店网站建设/搜狐酒业峰会
在数组中保存一组函数名,可以这样写: replies[] {dump,second_chance,marriage};声明一个函数指针数组: void (*replies[])(response){dump,second_chance,marriage};参考:嗨翻C语言...
企业网站建设制作/360优化大师最新版下载
第四章 对象与类 面向对象程序设计简称OOP,面向对象的程序是由对象组成的。 类是构造对象的模板或蓝图,对象中的数据称为实例域,操纵数据的过程称为方法。 对象有三个主要特性:1.对象的行为—可以对对象施加哪些操作,…...
县市区科普网站建设/搭建网站的软件
Enrollment has no customer. 转载于:https://www.cnblogs.com/LYliangying/p/9754291.html...
网站建设模板源代码/短视频运营培训学费多少
文章目录Q11.1 题目1.2 思路1.3 代码Q22.1 题目2.2 思路2.3 代码Q33.1 题目3.2 思路3.3 代码Q44.1 题目4.2 思路4.3 代码Q55.1 题目5.2 思路5.3 代码Q1 1.1 题目 利用递归方法求5!。 1.2 思路 递归公式:fnfn_1*4! 1.3 代码 def fact(j):sum 0if j 0:sum 1e…...
秦皇岛黄金海岸/武汉网站seo
本题要求将输入的任意3个整数从小到大输出。 输入格式: 输入在一行中给出3个整数,其间以空格分隔。 输出格式: 在一行中将3个整数从小到大输出,其间以“->”相连。 输入样例: 4 2 8输出样例: 2->4->8运行代码: #include<st…...
电子商务网站建设任务分解/seo外包方法
快速傅里叶变换C语言实现 模拟采样进行频谱分析 FFT是DFT的快速算法用于分析确定信号(时间连续可积信号、不一定是周期信号)的频率(或相位、此处不研究相位)成分,且傅里叶变换对应的ω\omegaω是连续的,从而达到分析信号成分的目的。 具体理论参考FFT百…...