#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;}
創(chuàng)新互聯(lián)建站專注于阜城企業(yè)網(wǎng)站建設,成都響應式網(wǎng)站建設,成都商城網(wǎng)站開發(fā)。阜城網(wǎng)站建設公司,為阜城等地區(qū)提供建站服務。全流程按需網(wǎng)站制作,專業(yè)設計,全程項目跟蹤,創(chuàng)新互聯(lián)建站專業(yè)和態(tài)度為您提供的服務
用tc編譯器,其中的頭文件graphics.h中包含畫圖的很多函數(shù),直接調(diào)用庫函數(shù)就能畫出自己想要的圖形了!
你描述的輸入不清,我調(diào)整了一下。
其實最重要是分解程序編程一個一個操作。
首先要有個畫板,
然后程序能畫線,
最后對三角形填充。
就是這么簡單,三種操作。
先來個短的代碼:
#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();?//?輸出畫板內(nèi)容
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]?=?'?';
//?利用質(zhì)心坐標求值
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();?//?輸出畫板內(nèi)容
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?圍成的區(qū)域
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;
//?對坐標的轉(zhuǎn)換
tx?=?x;
ty?=?bh?-?y?-?1;
if?(tx?=?0??tx??bw??ty?=?0??ty??bh)?//?如果超出畫板就不用畫了
board[ty][tx]?=?brush;
}
//?符號函數(shù)?整數(shù)返回1,負數(shù)返回-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、海倫公式:
假設在平面內(nèi),有一個三角形,邊長分別為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(空格識別一個數(shù)):");
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("輸入三角的行數(shù)(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行數(shù),n=0退出*/
for(i=0; in; i++){//列數(shù)循環(huán)
for(j=0; ji; j++)//行數(shù)循環(huán)
printf("%d ",j+1);//輸出數(shù)字
printf("\n");//換行
}
}
}