C语言中求解图形的问题

 更新时间:2022年11月14日 09:34:12   作者:「已注销」  
这篇文章主要介绍了C语言中求解图形的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

脚本之家 / 编程助手:解决程序员“几乎”所有问题!
脚本之家官方知识库 → 点击立即使用

C语言求解图形问题

什么是图形问题?

由字符,特殊符号或数字组成的各种形状的图形问题。

怎么求解图形问题?

用循环,确定输出图形的行数和每行上的列数,确定每行第一个字符输出的空格数,找出每行上字符变化的规律。

图形输出常用模块:

1
2
3
4
5
6
7
8
for(i=1;i<=行数;i++)
{
     for(j=1;j<=第i行前导空格数;j++)
             printf("");
     for(k=1;k<=第i行字符串;k++)
             printf(第i行,第j行字符);
     printf("\n");
}    

1.输出一个数字三角形。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>
#include <stdlib.h>
int main()
{ int i,j,k;
  for(i=1;i<=5;i++)
  {for(j=1;j<=5-i;j++)
      printf(" ");
   for(k=1;k<=2*i-1;k++)
      printf("%d",k);
   printf("\n");
  }
    return 0;
}

2.输出一个菱形。

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
int main()
{   int i,j ,k;
      for(i=1;i<=4;i++)
       {
          for(j=1;j<=5-i;j++)
              printf(" ");
          for(k=1;k<=2*i-1;k++) 
              printf("*");
             printf("\n");
        }
        for(i=1;i<=3;i++)
         {
            for(j=1;j<=i+1;j++)
                printf(" ");
            for(k=1;k<=7-2*i;k++)
                printf("*");
              printf("\n");
          }
           return 0;
 }

C语言常用图形函数

屏幕颜色的设置和清屏函数

① 设置背景色:

1
void setbkcolor(int color);

② 设置前景色:

1
void setcolor(int color); 

③ 清除图形屏幕内容,使用清屏函数,其调用格式如下:

1
void cleardevice( );  

注:清除前景图形,不清除背景。 

基本图形函数

① 画点函数:

将点(x, y)置成color色:void putpixel(int x, int y, int color);

获得当前点(x, y)的颜色值:int getpixel(int x, int y); 

例:使(20, 50)的像素点置成红色输出。

1
putpixel(20, 50, RED);

② 有关坐标位置的函数:

  • 返回x轴的最大值:int getmaxx( ); 
  • 返回y轴的最大值:int getmaxy( ); 
  • 返回游标在x轴的位置:int getx( );
  • 返回游标在y轴的位置:int gety( );
  • 移动游标到(x, y)点:void moveto(int x, int y);
  • 将游标从现行位置(x, y)移动到(x+dx, y+dy)的位置,移动过程中不画点:void moverel(int dx, int dy);

③ 画线函数:

画一条从点(x0, y0)到(x1, y1)的直线:

1
void  line(int x0, int y0, int x1, int y1);  

画一条从现行游标到点(x, y)的直线:

1
void  lineto(int x, int y); 

 

画一条从现行游标(x, y)到按相对增量确定的点(x+dx, y+dy)的直线:void  linerel(int dx, int dy);

④ 画圆弧类函数:

以(x, y)为圆心,radius为半径,画一个圆:

1
void  circle(int x, int y, int radius);  

以(x, y)为圆心,radius为半径,从stangle开始到endangle结束(用度表示),画一段圆弧线,逆时针方向:

1
void  arc(int x, int y, int stangle, int endangle, int radius);  

以(x, y)为中心,xradius、yradius为x轴和y轴半径,从角stangle开始,endangle结束,画一段椭圆线,

当stangle=0,endangle=360时,画出一个完整的椭圆:

1
void ellipse(int x, int y, int stangle, int endangle, int xradius, int yradius);

⑤ 画多边形类函数:

以(x1, y1)为左上角,(x2, y2)为右下角,画一个矩形框:

1
void rectangle(int x1, int y1, int x2, inty2); 

画一个顶点数为numpoints,各顶点坐标由整型数组polypoints给出的多边形。polypoints必须至少有2倍顶点数个元素。

每个顶点坐标都定义为x、y,且x在前。当画一个封闭多边形时,numpoints的值取实际多边形的顶点数   +1,且数组polypoints中第一个和最后一个点的坐标相同:void drawpoly(int numpoints, int *polypoints);

设置线型和线宽

① 线型:C语言能够使用的线型如表所示。

② 线宽:C语言能够使用的线宽如表所示。

③ setlinestyle函数:

  • 功能:用于设置当前绘图所用的线型和宽度。
  • 原型:setlinestyle(int style, unsigned pattern, int width)
  • 参数style:用来指定所画直线的类型,取值见线型表,缺省为实线;
  • 参数width:用来指定所画直线的粗细,以像素为单位,取值见线宽表,缺省值为1个像素宽。
  • 参数pattern:该参数在用户自定义线型时使用。如果使用线型表中前4种系统预定义的线型,则该参数取值0。pattern是一个16位二进制数,每一位代表一个像素,该位为1时显示,为0时不显示。

例如:希望设置的线型为前12位不显示,后4位显示。

此时,pattern值为15,调用方法为setlinestyle(4, 15, 1)。

填充图形函数

① setfillstyle函数:

  • 功能:为各种图形函数设置填充模式和颜色。
  • 原型:setfillstyle(int  pattern, int  color);
  • 参数:color指定填充所用的颜色;pattern用于指定填充模式,取值见下表。

② floodfill函数

  • 功能:用于对一指定的封闭区域进行填充,其填充模式和颜色由setfillstyle函数指定。
  • 原型:floodfill(int  x, int  y, int  border);
  • 参数:x、y指位于填充区域内任意一点的坐标,该点作为填充的起始点;border为填充区域的边界颜色。
  • 注意:使用该函数必须保证要填充的区域是完全封闭的,否则,该形状外面的区域也将被填充。

③ setfillpattern函数

  • 功能:实现用户自定义的填充模式。
  • 原型:setfillpattern(char *pattern, int color);
  • 参数:color指定用户自定义填充模式的颜色;pattern指向8个字节,一个字节对应8个像素,8*8个像素,每一位有亮暗两种(亮为1,暗为0),通过一个指向8个字节的指针判断。

图形存取处理函数  

测试要保存左上角为(x1, y1),右下角为(x2, y2)的图形屏幕区域内的全部内容需多少个字节:

1
unsigned imagesize(int x1, int y1, int x2, int y2); 

将左上角为(x1, y1),右下角为(x2, y2)的图形屏幕区域内的图像保存在内存中,指针为mapbuf:

1
void getimage(int x1, int y1, int x2, int y2, void  *mapbuf);

将图像输出到左上角为点(x, y)的位置上,其中参数op规定如何释放内存中的图像,具体值如表:

1
void putimage(int x, int y, void * mapbuf, int op); 

文本输出函数 在现行位置输出字符串指针textstring所指的文本:

1
void outtext(char *textstring);

在规定的(x, y)位置输出字符串指针textstring所指的文本,其中x和y为象元坐标:

1
void outtextxy(int x, int y, char *textstring);

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

蓄力AI

微信公众号搜索 “ 脚本之家 ” ,选择关注

程序猿的那些事、送书等活动等着你

原文链接:https://blog.csdn.net/minghaibuai/article/details/124294232

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 reterry123@163.com 进行投诉反馈,一经查实,立即处理!

相关文章

  • C语言实现通讯录管理系统

    C语言实现通讯录管理系统

    这篇文章主要为大家详细介绍了C语言实现通讯录管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-01-01
  • cmake跨平台构建工具的学习笔记

    cmake跨平台构建工具的学习笔记

    CMake是一个跨平台的安装/编译工具,通过CMake我们可以通过简单的语句来描述所有平台的安装/编译过程,下面这篇文章主要给大家介绍了关于cmake跨平台构建工具的相关资料,需要的朋友可以参考下
    2023-02-02
  • C++ getcwd函数获取项目运行路径方法详解

    C++ getcwd函数获取项目运行路径方法详解

    在Linux下做QT项目时,需要获取项目的运行路径,于是用getcwd函数进行获取,然后在Windows下进行测试,发现获取到的是程序的项目路径,即代码文件路径,然后再Linux QT中测试,获取到的又是运行路径,这就很纳闷了。经过再三测试,终于发现了原因
    2022-10-10
  • C语言趣味编程之平分七筐鱼

    C语言趣味编程之平分七筐鱼

    这篇文章介绍了C语言趣味编程之平分七筐鱼,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-11-11
  • C++中mutable与volatile的深入理解

    C++中mutable与volatile的深入理解

    这篇文章主要给的阿加介绍了关于C++中mutable与volatile的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-11-11
  • Qt简单编程实现UDP通讯

    Qt简单编程实现UDP通讯

    UDP数据报协议是一个面向无连接的传输层报文协议,它简单易用,不存在 TCP协议“粘包”的问题,下面我们就来看看如何使用qt简单实现UDP通讯吧
    2024-04-04
  • C++实现LeetCode(87.搅乱字符串)

    C++实现LeetCode(87.搅乱字符串)

    这篇文章主要介绍了C++实现LeetCode(87.搅乱字符串),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • 一文详解C++中动态内存管理

    一文详解C++中动态内存管理

    这篇文章主要介绍了一文详解C++中动态内存管理,文章围绕主题展开详细的内容介绍,具有一定的参考价孩子没需要的朋友可以才可以参考一下
    2022-07-07
  • Qt定时器和随机数详解

    Qt定时器和随机数详解

    在前一篇中我们介绍了键盘和鼠标事件,其实还有一个非常常用的事件,就是定时器事件,如果要对程序实现时间上的控制,那么就要使用到定时器。而随机数也是很常用的一个功能,在我们要想产生一个随机的结果时就要使用到随机数。本文我们就来简单介绍一下定时器和随机数。
    2015-06-06
  • C语言、C++中的union用法总结

    C语言、C++中的union用法总结

    这篇文章主要介绍了C语言、C++中的union用法总结,本文讲解了什么是union、C中使用union、当union遇到对象等内容,需要的朋友可以参考下
    2014-10-10

最新评论