三角形面积=底×高
创新互联建站2013年开创至今,先为罗田等服务建站,罗田等地企业,进行企业商务咨询服务。为罗田企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
然后在代码写上这个公式
static void Main(string[] args)
{
Console.WriteLine("请输入三角形的底:");
int a = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("请输入三角形的高:");
int b = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("三角形的面积为:" + a * b + "\r\n");
}
晕 看错题目了
#include stdio.h
#include math.h
void main()
{
float a,b,c,p,s,ah,bh,ch;/*边a,b,c,海伦公式参数p,各边高ah,bh,ch*/
printf("input a,b,c:");
scanf("%f%f%f",a,b,c);
p=(a+b+c)/2;
s=sqrt(p*(p-a)*(p-b)*(p-c));
ah=2*s/a;
bh=2*s/b;
ch=2*s/c;
printf("\nah=%f,bh=%f,ch=%f\n",ah,bh,ch);
}
#include "stdio.h"
main()
{
int n,i,j,t;
printf("input n=");
scanf("%d",n);
printf("\n");
for(i=1;i=n;i++)
{
for(j=1;j=n-i;j++)
printf(" ");
t=(2*(i-1)+1);
while(t--)
printf("*");
printf("\n");
}
}
input n= 7
*
***
*****
*******
*********
***********
*************
你描述的输入不清,我调整了一下。
其实最重要是分解程序编程一个一个操作。
首先要有个画板,
然后程序能画线,
最后对三角形填充。
就是这么简单,三种操作。
先来个短的代码:
#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;
}
运行效果: