C语言在坐标轴上输出曲线,C语言控制台绘制曲线的实现代码

本文实例为大家分享了C语言控制台绘制曲线的具体代码,供大家参考,具体内容如下

首先我们应该要知道曲线的方程,这里以直角坐标为例

设我们曲线方程为 y = f(x)

然后我们把它化成 y - f(x) = 0的形式

在程序中,我们检测每一个(x, y)位置,只要满足 y - f(x) = 0我们就画出这个点,反之就用空格填充

而在实际中为了减小误差,只要 | y - f(x) | < exp, 其中exp是一个误差范围,取10^-5就可以了

但是还是因为误差,只画曲线的轮廓的话,看起来就不太连续,断断续续的(把exp调大一点可能是一个方法)

但对于封闭的曲线我们可以画成实心的,这样只需要 y - f(x) (=) 0

比如我要画一个心形线,百度到它的方程为

297894fddf6b9e1ec433acd7178766e7.gif

然后就可以开始写代码了。

把其中的注释去掉就可以输出到文件中了

#include

#include

int main()

{

//FILE *fp = fopen("graph.txt", "w+");

float x, y, f;

for(y = 1.6; y >= -1.6; y -= 0.15){

for(x = -1.1; x <= 1.1; x += 0.05){

f = x*x + pow(y - pow(x*x, 1.0/3), 2) - 1; //函数方程

//fputc(f <= 1E-5 ? '*' : ' ', fp);

putchar(f <= 1E-5 ? '*' : ' ');

}

//fputc('\n', fp);

putchar('\n');

}

for(y = 1.6; y >= -1.6; y -= 0.15){

for(x = -1.1; x <= 1.1; x += 0.05){

f = x*x + pow(y - pow(x*x, 1.0/3), 2) - 1; //函数方程

//fputc(f > 1E-5 ? '*' : ' ', fp);

putchar(f > 1E-5 ? '*' : ' ');

}

//fputc('\n', fp);

putchar('\n');

}

//fclose(fp);

return 0;

}

bb34c5e7019ddd97ad4d61b0b199590f.png

c994f33d15d847fb20fca52b28b6eb42.png

再来一个四叶玫瑰线的代码:

#include

#include

int main()

{

//FILE *fp = fopen("graph.txt", "w+");

float x, y, a = 1.0, f;

for(y = a + 0.3; y >= -a - 0.3; y -= 0.1){

for(x = -a - 0.3; x <= a + 0.3; x += 0.05){

f = pow(x*x + y*y, 3) - a*a * pow(x*x - y*y, 2); //函数方程

//fputc(f <= 1E-5 ? '*' : ' ', fp);

putchar(f <= 1E-5 ? '*' : ' ');

}

//fputc('\n', fp);

putchar('\n');

}

for(y = a + 0.3; y >= -a - 0.3; y -= 0.1){

for(x = -a - 0.3; x <= a + 0.3; x += 0.05){

f = pow(x*x + y*y, 3) - a*a * pow(x*x - y*y, 2); //函数方程

//fputc(f > 1E-5 ? '*' : ' ', fp);

putchar(f > 1E-5 ? '*' : ' ');

}

//fputc('\n', fp);

putchar('\n');

}

//fclose(fp);

return 0;

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

时间: 2019-05-30

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 很高兴为您服务!我可以给您一些参考代码,只需要您做一些调整即可实现五子棋人机对战:#include<stdio.h> #include<stdlib.h> #define row 9 #define col 9 //定义棋盘数组 int chessBoard[row][col];//游戏开始函数 void startGame(); //人机交互函数 void playerAndComputer(); //下棋函数 void playerDown(int x, int y); //计算机下棋函数 void computerDown(); //计算机判断胜负函数 int judge(); //输出棋盘函数 void display(); int main() { startGame(); return 0; } //游戏开始函数 void startGame() { int x, y; //初始化棋盘 for(x = 0; x < row; x++) { for(y = 0; y < col; y++) { chessBoard[x][y] = 0; } } //输出棋盘 display(); //人机交互 playerAndComputer(); } //人机交互函数 void playerAndComputer() { int x, y; while(1) { printf("请输入落子的坐标(x,y):\n"); scanf("%d,%d", &x, &y); playerDown(x, y); //判断胜负 if(judge() == 1) { printf("你赢了!\n"); break; } else if(judge() == -1) { printf("你输了!\n"); break; } computerDown(); //判断胜负 if(judge() == 1) { printf("你输了!\n"); break; } else if(judge() == -1) { printf("你赢了!\n"); break; } } printf("游戏结束!\n"); } //下棋函数 void playerDown(int x, int y) { if(chessBoard[x][y] == 0) { chessBoard[x][y] = 1; } else { printf("该位置已经有棋子,请重新输入!\n"); } display(); } //计算机下棋函数 void computerDown() { int x, y; while(1) { x = rand() % row; y = rand() % col; if(chessBoard[x][y] == 0) { chessBoard[x][y] = -1; break; } } display(); } //计算机判断胜负函数 int judge() { int x, y; //判断横向胜负 for(x = 0; x < row; x++) { for(y = 0; y < col - 4; y++) { if(chessBoard[x][y] != 0 && chessBoard[x][y] == chessBoard[x][y + 1] && chessBoard[x][y] == chessBoard[x][y + 2] && chessBoard[x][y] == chessBoard[x][y + 3] && chessBoard[x][y] == chessBoard[x][y + 4]) { return chessBoard[x][y]; } } } //判断纵向胜负 for(x = 0; x < row - 4; x++) { for(y = 0; y < col; y++) { if(chessBoard[x][y] != 0 && chessBoard[x][y] == chessBoard[x + 1][y] && chessBoard[x][y] == chessBoard[x + 2][y] && chessBoard[x][y] == chessBoard[x + 3][y] && chessBoard[x][y] == chessBoard[x + 4][y]) { return chessBoard[x][y]; } } } //判断左上到右下胜负 for(x = 0; x < row - 4; x++) { for(y = 0; y < col - 4; y++) { if(chessBoard[x][y] != 0 && chessBoard[x][y] == chessBoard[x + 1][y + 1] && chessBoard[x][y] == chessBoard[x + 2][y + 2] && chessBoard[x][y] == chessBoard[x + 3][y + 3] && chessBoard[x][y] == chessBoard[x + 4][y + 4]) { return chessBoard[x][y]; } } } //判断右上到左下胜负 for(x = 0; x < row - 4; x++) { for(y = col - 1; y >= 4; y--) { if(chessBoard[x][y] != 0 && chessBoard[x][y] == chessBoard[x + 1][y - 1] && chessBoard[x][y] == chessBoard[x + 2][y - 2] && chessBoard[x][y] == chessBoard[x + 3][y - 3] && chessBoard[x][y] == chessBoard[x + 4][y - 4]) { return chessBoard[x][y]; } } } return 0; } //输出棋盘函数 void display() { int x, y; printf(" "); for(y = 0; y < col; y++) { printf("%d ", y); } printf("\n"); for(x = 0; x < row; x++) { printf("%d ", x); for(y = 0; y < col; y++) { if(chessBoard[x][y] == 0) { printf("+ "); } else if(chessBoard[x][y] == 1) { printf("* "); } else if(chessBoard[x][y] == -1) { printf("# "); } } printf("\n"); } printf("\n"); } ### 回答2: 要实现一个C语言控制台系统,实现五子棋的人机对战,我们需要考虑以下几个步骤: 1. 创建棋盘:首先,我们需要创建一个二维数组来表示棋盘,每个元素代表一个位置。可以选择使用简单的字符来表示空位、玩家的棋子和电脑的棋子。 2. 初始化棋盘:在开始游戏之前,我们需要将棋盘的所有位置都初始化为空位。 3. 绘制棋盘:在每一轮游戏更新棋盘后,我们需要将棋盘打印到控制台上,让玩家和电脑能够看到当前的棋局。 4. 玩家落子:通过读取玩家从控制台输入的命令,确定玩家的下一步操作。玩家需要指定所下棋子的坐标,然后将对应位置的棋盘元素设置为玩家的棋子。 5. 判断胜负:每次玩家落子或电脑落子后,我们需要判断是否有任意一方取胜。这可以通过检查连续的五个棋子是否在水平、垂直或对角线上连成一线来实现。 6. 电脑落子:实现一个简单的AI算法,让电脑能够根据当前的棋局情况做出最佳的选择。可以考虑采用极小化极大算法来搜索最优解。 7. 游戏流程控制:使用循环结构来控制游戏的进行。在每一轮中,玩家和电脑轮流落子,直到有一方胜出或棋盘下满为止。 8. 结束游戏:当游戏结束时,我们需要输出胜方或平局的信息,并询问玩家是否继续游戏。 通过以上步骤,我们可以实现一个简单的C语言控制台系统,实现了五子棋人机对战的功能。请注意,以上步骤只是一个简单的实现思路,具体的代码实现还需要根据具体情况进行完善。 ### 回答3: 五子棋是一种常见的策略棋类游戏,以下是一个简单的C语言控制台系统实现五子棋人机对战的示例代码。 ```c #include <stdio.h> #define SIZE 15 #define EMPTY 0 #define PLAYER 1 #define COMPUTER 2 int board[SIZE][SIZE]; int currentPlayer; void drawBoard() { for(int i = 0; i < SIZE; i++) { for(int j = 0; j < SIZE; j++) { switch(board[i][j]) { case EMPTY: printf(" . "); break; case PLAYER: printf(" O "); break; case COMPUTER: printf(" X "); break; } } printf("\n"); } } int isMoveValid(int x, int y) { if (x < 0 || x >= SIZE || y < 0 || y >= SIZE) { return 0; // 超出棋盘范围 } if (board[x][y] != EMPTY) { return 0; // 该位置已经有棋子了 } return 1; } int checkWin(int player) { int count; // 检查横向 for (int i = 0; i < SIZE; i++) { count = 0; for (int j = 0; j < SIZE; j++) { if (board[i][j] == player) { count++; if (count == 5) { return 1; // player获胜 } } else { count = 0; } } } // 检查纵向 for (int i = 0; i < SIZE; i++) { count = 0; for (int j = 0; j < SIZE; j++) { if (board[j][i] == player) { count++; if (count == 5) { return 1; // player获胜 } } else { count = 0; } } } // 检查主对角线 for (int k = 0; k <= SIZE - 5; k++) { count = 0; for (int i = 0; i < SIZE - k; i++) { int j = i + k; if (board[i][j] == player) { count++; if (count == 5) { return 1; // player获胜 } } else { count = 0; } } } // 检查副对角线 for (int k = 1; k <= SIZE - 5; k++) { count = 0; for (int i = 0; i < SIZE - k; i++) { int j = SIZE - 1 - i - k; if (board[i][j] == player) { count++; if (count == 5) { return 1; // player获胜 } } else { count = 0; } } } return 0; // 没有获胜 } void makeMove(int player, int x, int y) { board[x][y] = player; currentPlayer = (currentPlayer == PLAYER) ? COMPUTER : PLAYER; } void playerMove() { int x, y; printf("请输入落子的坐标(如1 2):"); scanf("%d %d", &x, &y); if (isMoveValid(x, y)) { makeMove(PLAYER, x, y); } else { printf("无效的落子,请重新输入。\n"); playerMove(); } } void computerMove() { int x, y; while(1) { x = rand() % SIZE; y = rand() % SIZE; if (isMoveValid(x, y)) { makeMove(COMPUTER, x, y); break; } } } int main() { // 初始化棋盘 for (int i = 0; i < SIZE; i++) { for (int j = 0; j < SIZE; j++) { board[i][j] = EMPTY; } } currentPlayer = PLAYER; printf("欢迎来到五子棋人机对战游戏!\n"); while (1) { drawBoard(); if (currentPlayer == PLAYER) { playerMove(); } else { computerMove(); } if (checkWin(currentPlayer)) { drawBoard(); printf("玩家 %s 获胜!\n", currentPlayer == PLAYER ? "O" : "X"); break; } } return 0; } ``` 此程序通过使用二维数组来表示棋盘状态,并使用循环和条件语句实现了落子、判断胜负等功能。玩家通过控制台输入坐标来落子,计算机则随机选择一个合法的位置落子。每次落子后,程序会判断是否有一方玩家获胜,如果有则显示结果并结束游戏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值