编程正三角
‘壹’ 在c语言中怎样打印一个正三角形
你是问图形模式还是文本模式?
文本模式:(需计算:80/(25*n)!=sqrt(3),因此文本模式下的正三角形不严格)
下面仅为一示意图
#include<stdio.h>
int main()
{
printf(" * ")
printf(" * * ")
printf(" * * ")
printf("* * * * * * *")
return(0);
}
图形模式下可画的更严格:
思路是:先写一个程序解出(640,480)*(640,480)中正三角形的整数解,再用画线函数,画出。
/*此代码有问题,运行最后的那个程序*/
#include<stdio.h>
#include<math.h>
#include<conio.h>
#define P(a,b,i,j) (pow((ai-aj),2)+pow((bi-bj),2))
int main()
{
int x1,y1,x2,y2,x3,y3;
for(x1=0,y1=0;x1<480;x1++)for(x2=479,y2=1,y2<480;y2++)for(x3=0,y3=479;y3>=0;y3--)if(P(x,y,1,2)==P(x,y,1,3)&&P(x,y,1,2)==P(x,y,2,3))printf("%6d%6d%6d%6d%6d%6d",x1,y1,x2,y2,x3,y3);
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc201e\\bgi");
cleardevice();
setbkcolor(9); setcolor(4);
line(x1,y1,x2,y2);line(x2,y2,x3,y3);line(x3,y3,x1,y1);
getch();
return(0);
}
调试过程中发现那段解三点的代码有问题,其实那是一个很简化的算法,你可以自己用穷举发解;
下面实我 注掉那段代码后的完整程序,运行结果已较理想
#include<stdio.h>
#include<math.h>
#include<conio.h>
#include<graphics.h>
#define P(a,b,i,j) (pow((ai-aj),2)+pow((bi-bj),2))
int main()
{
int x1=219,y1=1,x2=531,y2=367,x3=0,y3=415;
/*
for(x1=0,y1=0;x1<480;x1++)for(x2=531,y2=1,y2<480;y2++)for(x3=0,y3=479;y3>=0;y3--)if(P(x,y,1,2)==P(x,y,1,3)&&P(x,y,1,2)==P(x,y,2,3)){printf("%6d%6d%6d%6d%6d%6d",x1,y1,x2,y2,x3,y3);break;}
getchar();getchar();
*/
int gd=DETECT,gm;
initgraph(&gd,&gm,"c:\\tc201e\\bgi");
cleardevice();
setbkcolor(9); setcolor(4);
line(x1,y1,x2,y2);line(x2,y2,x3,y3);line(x3,y3,x1,y1);
getch();
return(0);
}
‘贰’ 请问如何用C语言编程:输入一个正整数,各输出n行的正(倒)三角形宝塔图案
#include <stdio.h>
main()
{
int i,j,k;
int n;
scanf("%d",&n);
//正三角
for(i=0;i<n;i++)
{
for(j=0;j<n-i;j++)
printf(" ");
for(k=0;k<=i;k++)
printf(" *");
printf("
");
}
//倒三角
for(i=0;i<n;i++)
{
for(j=0;j<=i;j++)
printf(" ");
for(k=0;k<n-i;k++)
printf(" *");
printf("
");
}
}
int i,j;
int n;
scanf("%d",&n);
for (i=1;i<=n;i++)
{
for (j=1;j<=n-i;j++)
printf(" ");
for (j=1;j<=2*i-1;j++)
printf("*"); //这里的"*"可以替换成任意字符
printf("
");
}
//下面是倒三角
for (i=n;i>=1;i--)
{
for (j=1;j<=n-i;j++)
printf(" ");
for (j=1;j<=2*i-1;j++)
printf("*"); //这里的"*"可以替换成任意字符
printf("
");
}
‘叁’ 请用C语言编程:输入一个正整数,各输出n行的正(倒)三角形宝塔图案
正三角形:第几行就是几颗星
倒三角形:第几行就是n-几颗星
正宝塔:第几行就是几*2-1颗星,前面加n-几个空格
用i循环控制行数,循环中用i值计算具体输出几个空格和星号
#include<stdio.h>
#defineKG(n-i)
#defineXH(i*2+1)
voidmain(){inti,j,n;
scanf("%d",&n);
for(i=0;i<n;i++){
for(j=0;j<KG;j++)printf("");
for(j=0;j<XH;j++)printf("*");
printf(" ");
}
}
倒宝塔,修改程序中以下两句即可
#defineKG(i)
#defineXH((n-i-1)*2+1)
‘肆’ 编程VB输出数字正三角形
dim i as integer
dim j as integer
dim m as integer
dim n as integer
m= inputbox("输入行数")
n=1
for i= 0 to m
for j = 0 to m/2-i/2
print " ";
next j
for j= 0 to i
print n;
n=(n+1) mod 10 +1
next j
print
next i
‘伍’ c语言正三角形
LS仁兄至少应该把k=0和j=0放在for循环里面吧。。。。都没测试就拿出来。。。。
正三角形前面有空格吧。。。
#include
void main()
{
int i,j,N;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
for(j=1;j<=N+i-1;j++)
if(j<=N-i)printf(" ");
else printf("*");//输出*
printf("\n");//换行
}
}
如果前面没有空格则代码如下
#include
void main()
{
int i,j,N;
scanf("%d",&N);
for(i=1;i<=N;i++)
{
for(j=1;j<=2*i-1;j++)
printf("*");//输出*
printf("\n");//换行
}
}
12
首先数学上知道三角形三边长求面积的公式为:
已知三角形的三边分别是a、b、c,
先算出周长的一半s=1/2(a+b+c)
则该三角形面积s=根号[s(s-a)(s-b)(s-c)]
这个公式叫海伦——秦九昭公式
然后用c语言:
#include
#include
main()
{
int a,b,c;
double s1,s2;
scanf("%d%d%d", &a, &b,&c);
s1=(a+b+c)/2;
s2=sqrt(s*(s-a)*(s-b)*(s-c));
printf("%d";s2);
‘陆’ c语言中怎样编程在屏幕上输出具有7行的正三角形
#include<stdio.h>
intmain(intargc,char*argv[]){
chari,j,k;
for(i=1;i<=7;i++){
for(j=0;j<40-i;printf(""),j++);
for(j=0;j<i+i-1;printf("#"),j++);
printf(" ");
}
return0;
}
‘柒’ 超简单的C语言程序题 输出一个正三角形
1、打开visual C++ 6.0软件,准备好一个空白的c语言文件,首先引入预处理命令和主函数:

‘捌’ C语言中 正 倒等边三角形的代码
1、代码如下
///////////////////////////////////////////////////
//正三角形
//*
//***
//*****
//////////////////////////////////////////////////
#include<iostream>
usingnamespacestd;
intCalcStarCount(intlayer)
{
return(2*layer-1);
}
voidDrawStar(intmaxLayer,intlayer)
{
intmaxStarCnt=CalcStarCount(maxLayer);//最大层*的个数
intstarCnt=CalcStarCount(layer);//当前层*的个数
intblankCnt=maxStarCnt-starCnt;//当前层空格的个数
intpointCnt=blankCnt/2;//两端空格的个数
//先画空格
for(inti=0;i<pointCnt;i++)
{
cout<<"";
}
//再画*
for(inti=0;i<starCnt;i++)
{
cout<<"*";
}
//再画空格
for(inti=0;i<pointCnt;i++)
{
cout<<"";
}
cout<<endl;
}
voidSleep(longtime)
{
for(inti=0;i<time;i++)
for(intj=0;j<100000;j++)
;
}
//版权声明:转载本文请引用https://blog.csdn.net/weixin_42346564/article/details/82190984
voidDrawStar2(intmaxLayer,intlayer,intdirc)
{
if(dirc)
{
if(layer>=1)
{
DrawStar2(maxLayer,--layer,dirc);
}
else
return;
}
//具体画*的过程
if(layer&&layer!=maxLayer)
{
intstarCnt=layer;
intmaxRowCnt=maxLayer*2-1;
intpointCnt=(maxRowCnt-2*starCnt-1)/2;
//画左端的空格
for(inti=0;i<pointCnt;i++)
{
cout<<"_";
Sleep(1000);
}
for(inti=0;i<layer;i++)
{
cout<<"*";
if(i==layer-1)
break;
else
cout<<"";
Sleep(1000);
}
//画右端的空格
for(inti=0;i<pointCnt;i++)
{
cout<<"_";
Sleep(1000);
}
cout<<endl;
}
if(!dirc)
{
if(layer>=1)
{
DrawStar2(maxLayer,--layer,dirc);
}
else
return;
}
}
intmain()
{
intlayer=0;
cout<<"请输入层数:";
cin>>layer;
#if0
for(inti=0;i<=layer;i++)
DrawStar(layer,i);
cout<<endl<<endl;
for(inti=layer;i>=0;i--)
DrawStar(layer,i);
#else
DrawStar2(layer+1,layer+1,1);
cout<<endl<<endl;
DrawStar2(layer+1,layer+1,0);
#endif
system("pause");
return0;
}
