#includeint main(){ int m, n; int i, j; int cur; printf("intput n : "); scanf("%d", n); cur = 0; for(i = n; i = 1; --i){ for(j = 1; j 9) cur = 0; } printf("\n"); } return 0;}
创新互联建站专注于阜城企业网站建设,成都响应式网站建设,成都商城网站开发。阜城网站建设公司,为阜城等地区提供建站服务。全流程按需网站制作,专业设计,全程项目跟踪,创新互联建站专业和态度为您提供的服务
用tc编译器,其中的头文件graphics.h中包含画图的很多函数,直接调用库函数就能画出自己想要的图形了!
你描述的输入不清,我调整了一下。
其实最重要是分解程序编程一个一个操作。
首先要有个画板,
然后程序能画线,
最后对三角形填充。
就是这么简单,三种操作。
先来个短的代码:
#include stdio.h
#include math.h
#include string.h
using namespace std;
const int bsize = 64; // 最大画板大小
const double eps = 1e-6; // 精度控制
char board[bsize][bsize]; // 画板
int bw, bh; // 画板宽高
int main()
{
void printBoard(); // 输出画板内容
int iw, ih;
double x[3], y[3];
double v0x, v0y, v1x, v1y, v2x, v2y;
double d00, d01, d11, d20, d21, denom, v, u, w;
scanf("%d%d", ih, iw);
bw = iw + 2; // 你边缘多出了边框,所以+2
bh = ih + 2;
scanf("%lf%lf%lf%lf%lf%lf", x, y, x + 1, y + 1, x + 2, y + 2);
// 清空画板
for (int i = 0; i bh; i++)
for (int j = 0; j bw; j++)
board[i][j] = ' ';
// 利用质心坐标求值
v0x = x[1] - x[0], v0y = y[1] - y[0];
v1x = x[2] - x[0], v1y = y[2] - y[0];
for (int i = 0; i bh; i++)
for (int j = 0; j bw; j++)
{
v2x = i - x[0], v2y = j - y[0];
d00 = v0x*v0x + v0y*v0y;
d01 = v0x*v1x + v0y*v1y;
d11 = v1x*v1x + v1y*v1y;
d20 = v2x*v0x + v2y*v0y;
d21 = v2x*v1x + v2y*v1y;
denom = d00*d11 - d01*d01;
v = (d11*d20 - d01*d21) / denom;
u = (d00*d21 - d01*d20) / denom;
w = 1 - u - v;
if (0 = v v = 1 0 = u u = 1 0 = w w = 1)
board[bh - 1 - i][j] = '*';
}
// 画边框
for (int i = 0; i bw; i++)
{
board[0][i] = '-';
board[bh - 1][i] = '-';
}
for (int i = 0; i bh; i++)
{
board[i][0] = '|';
board[i][bw - 1] = '|';
}
board[0][0] = board[bh - 1][0] = board[0][bw - 1] = board[bh - 1][bw - 1] = '+';
printBoard();
return 0;
}
void printBoard()
{
int i, j;
for (j = 0; j bh; j++)
{
for (i = 0; i bw; i++)
putc(board[j][i], stdout);
putc('\n', stdout);
}
}
就是枚举三角形点来画的。
运行效果:
然后给你一份通用示例吧,
这可以画任意边型,
都有注释了,
不懂可以再询问。
代码如下:
#include stdio.h
#include math.h
#include string.h
using namespace std;
const int bsize = 64; // 最大画板大小
const double eps = 1e-6; // 精度控制
char board[bsize][bsize]; // 画板
int bw, bh; // 画板宽高
int main()
{
void clearBoard(char brush); // 清空画板
void drawBorder(); // 画边框的
void drawLine(double x0, double y0, double x1, double y1, char brush); // 画线的
void fillArea(char brush); // 填充的
void printBoard(); // 输出画板内容
int w, h;
double x[3], y[3];
scanf("%d%d", h, w);
bw = w + 2; // 你边缘多出了边框,所以+2
bh = h + 2;
scanf("%lf%lf%lf%lf%lf%lf", x, y, x + 1, y + 1, x + 2, y + 2);
// 初始化画板
clearBoard(' ');
drawBorder();
// 画三角形
drawLine(x[0], y[0], x[1], y[1], '*');
drawLine(x[1], y[1], x[2], y[2], '*');
drawLine(x[2], y[2], x[0], y[0], '*');
// 填充输出
fillArea('*');
printBoard();
return 0;
}
void printBoard()
{
int i, j;
for (j = 0; j bh; j++)
{
for (i = 0; i bw; i++)
putc(board[j][i], stdout);
putc('\n', stdout);
}
}
// 填充 brush 围成的区域
void fillArea(char brush)
{
int i, j, b, e;
for (j = 0; j bh; j++)
{
b = e = -1;
for (i = 0; i bw; i++)
if (board[j][i] == brush)
if (b == -1) b = i;
else e = i;
for (i = b; i = e; i++)
board[j][i] = brush;
}
}
// 填充单个像素
void fillPixel(int x, int y, char brush)
{
int tx, ty;
// 对坐标的转换
tx = x;
ty = bh - y - 1;
if (tx = 0 tx bw ty = 0 ty bh) // 如果超出画板就不用画了
board[ty][tx] = brush;
}
// 符号函数 整数返回1,负数返回-1,零返回0
int sign(double v)
{
if (fabs(v) eps) return 0;
else if (v 0) return 1;
else return -1;
}
// 交换用
void sawp(double *a, double *b)
{
double t;
t = *a, *a = *b, *b = t;
}
/*
* Bresenham 直线算法,请自行搜索
*/
void drawLine(double x0, double y0, double x1, double y1, char brush)
{
int x, y;
double deltax, deltay, error, deltaerr, t;
if (x0 x1) sawp(x0, x1), sawp(y0, y1);
deltax = x1 - x0;
deltay = y1 - y0;
error = 0;
if (fabs(deltax) eps)
{
// 垂直线斜率不存在,要特殊处理
x = round(x0);
t = round(fmax(y0, y1));
for (y = round(fmin(y0, y1)); y = t; y++)
fillPixel(x, y, brush);
return;
}
// Bresenham 直线算法
deltaerr = fabs(deltay / deltax);
y = round(y0);
for (x = round(x0); x = x1; x++)
{
fillPixel(x, y, brush);
error += deltaerr;
while (error = 0.5)
{
fillPixel(x, y, brush);
y = y + sign(y1 - y0);
error -= 1.0;
}
}
}
void drawBorder()
{
// 画四条边
drawLine(1, 0, bw - 2, 0, '-');
drawLine(1, bh - 1, bw - 2, bh - 1, '-');
drawLine(0, 1, 0, bh - 2, '|');
drawLine(bw - 1, 1, bw - 1, bh - 2, '|');
// 画四个角落
fillPixel(0, 0, '+');
fillPixel(bw - 1, 0, '+');
fillPixel(bw - 1, bh - 1, '+');
fillPixel(0, bh - 1, '+');
}
void clearBoard(char brush)
{
// 逐个填充
int i, j;
for (j = 0; j bh; j++)
for (i = 0; i bw; i++)
board[j][i] = brush;
}
运行效果:
1、海伦公式:
假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
S=√[p(p-a)(p-b)(p-c)]
而公式里的p为半周长:
p=(a+b+c)/2
2、例程:
#include
#include
void main()
{
float a,b,c,s,area;
printf("依次输入a,b,c(空格识别一个数):");
scanf("%f%f%f,",a,b,c);
s=(float)0.5*(a+b+c);
area = (float)sqrt(s*(s-a)*(s-b)*(s-c));
printf("面积为:%f",area);
}
#include stdio.h
int main(void){
int n,i,j;
printf("输入三角的行数(1-26):\n");
scanf("%d",n);
for(i=1; i=n; i++)
{
for(j=1;ji;j++)
{
printf(" ");
}
for(j=65;j=65+n-i;j++)
{
printf("%c",j);
}
printf("\n");
}
return 0;
}
#includestdio.h
main(){
int n,i,j;
while(scanf("%d",n)n!=0){/*输入n行数,n=0退出*/
for(i=0; in; i++){//列数循环
for(j=0; ji; j++)//行数循环
printf("%d ",j+1);//输出数字
printf("\n");//换行
}
}
}