本文目录一览:
c语言,求输出一个圆的图形的程序
#include math.h
#include graphics.h /*预定义库函数*/
void circlePoint(int x,int y) /*八分法画圆程序*/
{
circle(320 x*20,240 y*20,3);
circle(320 y*20,240 x*20,3);
circle(320-y*20,240 x*20,3);
circle(320-x*20,240 y*20,3);
circle(320-x*20,240 y*20,3);
circle(320-x*20,240-y*20,3);
circle(320-y*20,240-x*20,3);
circle(320 y*20,240-x*20,3);
circle(320 x*20,240-y*20,3);
}
void MidBresenhamcircle(int r) /* 中点Bresenham算法画圆的程序 */
{
int x,y,d;
x=0;y=r;d=1-r; /* 计算初始值 */
while(xy)
{ circlePoint(x,y); /* 绘制点(x,y)及其在八分圆中的另外7个对称点 */
if(d0) d =2*x 3; /* 根据误差项d的判断,决定非最大位移方向上是走还是不走 */
else
{ d =2*(x-y) 5;
y--;
}
x ;
delay(900000);
} /* while */
}
main()
{
int i,j,r,graphmode,graphdriver;
detectgraph(graphdriver,graphmode);
initgraph(graphdriver,graphmode," ");
printf("中点Bresenhamcircle算法画圆的程序\n"); /*提示信息*/
printf("注意 |r|=11");
printf("\n输入半径值 r:");
scanf("%d",r);
printf("按任意键显示图形...");
getch();
cleardevice();
setbkcolor(BLACK);
for(i=20;i=620;i =20) /*使用双循环画点函数画出表格中的纵坐标*/
for(j=20;j=460;j )
putpixel(i,j,2);
for(j=20;j=460;j =20) /*使用双循环画点函数画出表格中的横坐标*/
for(i=20;i=620;i )
putpixel(i,j,2);
outtextxy(320,245,"0"); /*原点坐标*/
outtextxy(320-5*20,245,"-5");circle(320-5*20,240,2); /*横坐标值*/
outtextxy(320 5*20,245,"5");circle(320 5*20,240,2);
outtextxy(320-10*20,245,"-10");circle(320-10*20,240,2);
outtextxy(320 10*20,245,"10");circle(320 10*20,240,2);
outtextxy(320-15*20,245,"-15");circle(320-15*20,240,2);
outtextxy(320 15*20,245,"15");circle(320 15*20,240,2);
outtextxy(320,240-5*20,"-5");circle(320,240-5*20,2); /*纵坐标值*/
outtextxy(320,240 5*20,"5");circle(320,240 5*20,2);
outtextxy(320,240-10*20,"-10");circle(320,240-10*20,2);
outtextxy(320,240 10*20,"10");circle(320,240 10*20,2);
outtextxy(20,10,"The center of the circle is (0,0) "); /*坐标轴左上角显示提示信息*/
setcolor(RED); /*标记坐标轴*/
line(20,240,620,240); outtextxy(320 15*20,230,"X");
line(320,20,320,460); outtextxy(330,20,"Y");
setcolor(YELLOW);
MidBresenhamcircle(r);
setcolor(BLUE); /*绘制圆*/
circle(320,240,r*20);
setcolor(2);
getch();
closegraph();
}
C语言简单图形题
/*编写一程序P211.C实现以下功能
根据输入的n在屏幕上显示对应的以#组成的菱形图案。编程可用素材:printf("Please input n: ")...。
程序的运行效果应类似地如图1和图2所示,图1中的1和图2中的5是从键盘输入的内容。
*/
#include stdio.h
int main(void)
{
int n, i=1, j, m,k=1;
printf("Please input n: ");
scanf("%d", n);
do
{
for (j=i;j = n;j++)
{
printf(" ");
}
for (m=1;m = 2*i-1;m++)
{
printf("#");
}
printf("\n");
i++;
}while (i = n+1);
do
{
for (j=0;jk;j++)
{
printf(" ");
}
for (m=1;m = 2*n-1;m++)
{
printf("#");
}
printf("\n");
n--;k++;
}while (n);
return 0;
}
//德昂当同学的说法确实是你的错误所在,这就是你成功的一半了。
/*其实笔者建议你将上面的那个图抽象成为一个线性规划的问题:建立一个坐标系,之后提取出来更方便的数学关系式,例如上面的方程则是:| i-j |=n;和| i+j |n;之后将i,j分别当做两个行列变量进行解决。请作者予以尝试!*/
如何用C语言画基本图形
下面举一个用drawpoly()函数画箭头的例子。#include
#include
int main()
{
int gdriver, gmode, i;
int arw[16]={200,102,300,102,300,107,330,br/100,300,93,300,98,200,98,200,102};
gdriver=DETECT;
initgraph(gdriver, gmode, "c:\\caic\\bgi");
setbkcolor(BLUE);
cleardevice();
setcolor(12); /*设置作图颜色*/
drawpoly(8, arw); /*画一箭头*/
getch();
closegraph();
return 0;
}
设定线型函数
在没有对线的特性进行设定之前,TURBO C 用其默认值,即一点宽的实线,但TURBO C 也提供了可以改变线型的函数。线型包括:宽度和形状。其中宽度只有两种选择:一点宽和三点宽。而线的形状则有五种。下面介绍有关线型的设置函数。
void far setlinestyle(intlinestyle,unsigned upattern,int thickness); 该函数用来设置线的有关信息,其中linestyle是线形状的规定,
见下表:
有关线的形状(linestyle)
━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义
─────────────────────────
SOLID_LINE 0 实线
DOTTED_LINE 1 点线
CENTER_LINE 2 中心线
DASHED_LINE 3 点画线
USERBIT_LINE 4 用户定义线
━━━━━━━━━━━━━━━━━━━━━━━━━
有关线宽(thickness)
thickness是线的宽度,见下表。
━━━━━━━━━━━━━━━━━━━━━━━━━
符号常数 数值 含义
─────────────────────────
NORM_WIDTH 1 一点宽
THIC_WIDTH 3 三点宽
━━━━━━━━━━━━━━━━━━━━━━━━━
对于upattern,只有linestyle选USERBIT_LINE 时才有意义 (选其它线型,uppattern取0即可)。此进uppattern的16位二进制数的每一位代表一个象元,如果那位为1,则该象元打开,否则该象元关闭。 void far getlinesettings(struct linesettingstypefar *lineinfo);该函数将有关线的信息存放到由lineinfo 指向的结构中,表中linesettingstype的结构如下:
struct linesettingstype
{
int linestyle;
unsigned upattern;
int thickness;
}
用c语言求多种图形中任何一种图形的面积。
#include stdio.h
#include math.h
double trianglearea( float a, float b, float c );
double squarearea( float a, float b );
double roundarea( float r );
int main()
{
int index = 0;
float a, b, c, r;
double S;
while(1)
{
printf("请输入图的类型,三角形请输入1,矩形请输入2,圆形请输入3。按0退出\n");
printf("请输入图形序号:");
scanf("%d", index);
if(index == 0)
break;
else if(index == 1)
{
printf("输入三角形三边长:");
scanf("%f %f %f", a, b, c);
S = trianglearea(a, b, c);
}
else if(index == 2)
{
printf("输入矩形的长和宽:");
scanf("%f %f", a, b);
S = squarearea(a, b);
}
else if(index == 3)
{
printf("%输入圆形的半径:");
scanf("%f", r);
S = roundarea(r);
}
else
;
printf("所求面积为%lf\n\n", S);
}
printf("\nbye bye\n");
return 0;
}
double trianglearea( float a, float b, float c )
{
double p = 0;
if( !(a+bc a+cb b+ca) )
{
printf("这三条边无法组成三角形。\n");
return 0;
}
p = (a+b+c) / 2;
return sqrt(p*(p-a)*(p-b)*(p-c));
}
double squarearea( float a, float b )
{
return a*b;
}
double roundarea( float r )
{
return 3.14*r*r;
}
C语言输出一个菱形图案(有程序)
菱形,就是如下所示的图形,总行数与总列数相等:
写一个程序,根据用户输入的总行数,打印出菱形。
这个题目主要是找出规律,考察读者的逻辑思维。
你可以从第一行开始,遍历所有的列,也可以从第一列开始,遍历所有的行。
下面的程序从第一行开始,遍历所有的列。
设菱形的总行数为line,总列数为column,当前行为i,当前列为j。上半部分与下半部分的规律不一样,应该分开讨论。
我们着眼于星号(*),思考什么条件下输出星号,总结出如下的规律。
1) 对于上半部分(包括中间一行),当前行与当前列满足如下关系输出星号:
j=(column+1)/2-(i-1) (column+1)/2-(i-1)为第i行最左边的星号
j=(column+1)/2+(i-1) (column+1)/2+(i-1)为第i行最右边的星号
2) 对于下半部分,当前行与当前列满足如下关系输出星号:
j=(column+1)/2-(line-i) (column+1)/2-(line-i)为第i行最左边的星号
j=(column+1)/2+(line-i) (column+1)/2+(line-i)为第i行最右边的星号
不满足上述条件,则输出空格。
于是写出如下的代码:纯文本复制
#include stdio.h#include stdlib.hint main(){int line; // 菱形总行数int column; // 菱形总列数int i; // 当前行int j; // 当前列printf("请输入菱形的行数(奇数):");scanf("%d", line);if(line%2==0){ // 判断是否是奇数printf("必须输入奇数!\n");exit(1);}column = line; // 总行数和总列数相同for(i=1; i=line; i++){ // 遍历所有行if(i(line+1)/2+1){ // 上半部分(包括中间一行)for(j=1; j=column; j++){ // 遍历上半部分的所有列if( (column+1)/2-(i-1)=j j=(column+1)/2+(i-1) ){printf("*");}else{printf(" ");}}}else{ // 下半部分for(j=1; j=column; j++){ // 遍历下半部分的所有列if( (column+1)/2-(line-i)=j j=(column+1)/2+(line-i) ){printf("*");}else{printf(" ");}}}printf("\n");}return 0;}
运行结果:请输入菱形的行数(奇数):11
*
***
*****
*******
*********
***********
*********
*******
*****
***
*