C语言实现绘制余弦曲线

 更新时间:2024年01月03日 11:11:23   作者:透明水晶  
这篇文章主要为大家详细介绍了C语言实现绘制余弦曲线的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下

1.要求

在屏幕上用"*"显示0°~360°的余弦曲线cos(x)曲线。

2.问题分析与算法设计

如果在程序中使用数组,这个问题十分简单。但若规定不能使用数组,问题就变得不容易了。

关键在于余弦曲线在0°~360°的区间内,一行中要显示两个点;而对一般的显示器来说,只能按行输出,即:输出第一行信息后,只能向下一行输出,不能再返回到上一行。为了获得本题要求的图形就必须在一行中一次顺序输出两个"*"。

为了同时得到余弦函数 cos ( x )图形在一行上的两个点,考虑利用 cos ( x )的左右对称性。将屏幕的行方向定义为 x ,列方向定义为 y ,则0°~180°的图形与180°~360°的图形是左右对称的。若定义图形的总宽度为62列,计算出 x 行0°~180°时 y 点的坐标 m ,那么在同一行与之对称的180°~360°的 y 点的坐标就应为62- m 。程序中利用反余弦函数 acos 计算坐标( x , y )的对应关系。

使用这种方法编出的程序短小精练,体现了一定的技巧。

3.程序

3-1.源码

001_cos.c · cProgram/100Example - 码云 - 开源中国 (gitee.com)

/*******************************************************************
 *   > File Name: 001_cos.c
 *   > Author: fly
 *   > Mail: XXXXXXXX@icode.com
 *   > Create Time: 2020年06月01日 星期一 09时24分59秒
 ******************************************************************/

#include <stdio.h>
#include <math.h>
#include "debug.h"

void test_acos(void)
{
    double x = 0.0;
    double y = 0.0;
    int m = 0;

    for(x= -1.0; x<=1.0; x+=0.1)
    {
        y = acos(x);
        m = y * 10;
        printf("x = %f, y = %f[%d]\n", x, y, m);
    }
}

void printf_cos(void)
{
    printf("========Draw Cos(x)========\n");

    double x = 0.0, y = 0.0;
    int m, n;

    for(y = 1.0; y >= -1.0; y-=0.1)
    {
        x = acos(y);
        m = x * 10;
        //printf("(%f, %f)%d\n", x,y,m);
        for(n = 0; n <=m; n++)
            printf(" ");
        printf(RED"*"NONE);

        for(; n<62-m; n++)
            printf(" ");

        printf(RED"*\n"NONE);
    }
}

int main(int argc, char* argv[])
{
    DBG_PRINTF("Hello, world !\n");
    //test_acos();
    printf_cos();

    return 0;
}
#ifndef __DEBUG_H__
#define __DEBUG_H__

#include <string.h>

#define DBG_PRINTF_FUNC         (1)
#define DBG_PRINTF_SWITCH       (1)

// color debug
#define NONE            "\e[m"
#define BLACK           "\e[0;30m"
#define RED                     "\e[0;31m"
#define GREEN           "\e[0;32m"
#define YELLOW          "\e[0;33m"
#define BLUE            "\e[0;34m"

#ifdef DBG_PRINTF_FUNC
#define DBG_PRINTF(fmt, args...)        \
                do{\
                printf("<<FILE:"BLUE"%s"NONE" LINE:"RED"%d"NONE" FUNC:"GREEN"%s"NONE">>", \
                strrchr(__FILE__, '/')?strrchr(__FILE__, '/')+1:__FILE__, __LINE__, __FUNCTION__);\
                printf(fmt, ##args);\
                }while(0)
#else
#define DBG_PRINTF(fmt, args...)
#endif /* DBG_PRINTF_FUNC */

#endif /* __DEBUG_H__ */

3-2.makefile

SRC = ${wildcard *.c}
BIN = ${patsubst %.c, %, $(SRC)}
CFLAGS = -g -Wall
#INC = -lm
LIBS = -lm

all:$(BIN)

$(BIN):%:%.c
        $(CC) -o $@ $< $(CFLAGS) $(LIBS)

clean:
        $(RM) a.out $(BIN)

.PHONY:all clean

4.运行

到此这篇关于C语言实现绘制余弦曲线的文章就介绍到这了,更多相关C语言绘制余弦曲线内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • C++多线程编程超详解

    C++多线程编程超详解

    本文给大家介绍的是C++多线程编程,由于C++本身没有多线程机制,在windows下我们使用调用SDK win32 api来实现,示例都很简单,讲解的也很详细,推荐给大家
    2021-09-09
  • C语言return, exit, abort的区别

    C语言return, exit, abort的区别

    这篇文章主要介绍了C语言return, exit, abort的区别,一般情况下,在C语言中退出一个程序用return,如果在main函数中,return在清理局部对象之后,会调用exit函数,和return相比,exit并不会销毁局部对象,下面一起进入文章了解更详细内容吧,需要的朋友也可以参考一下
    2022-01-01
  • c++ 入门——浅析构造函数和析构函数

    c++ 入门——浅析构造函数和析构函数

    这篇文章主要介绍了c++ 浅析构造函数和析构函数的相关资料,帮助大家入门c++ 编程,感兴趣的朋友可以了解下
    2020-08-08
  • C语言全局变量和局部变量的示例代码

    C语言全局变量和局部变量的示例代码

    本文主要介绍了C语言全局变量和局部变量的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • map插入自定义对象总结

    map插入自定义对象总结

    黑树在插入节点时,必须依照大小比对之后在一个合适的位置上执行插入动作。所以作为关键字,起码必须有“<”这个比较操作符
    2013-09-09
  • C++中string的模拟实现

    C++中string的模拟实现

    这篇文章主要为大家详细介绍了C++中string的模拟实现,感兴趣的小伙伴们可以参考一下
    2016-08-08
  • C语言控制台版2048小游戏

    C语言控制台版2048小游戏

    本文给大家分享的是2则使用C语言控制台编写的2048小游戏,各有优劣,小伙伴们对比着参考下吧。
    2015-03-03
  • C 读取ini文件的实例详解

    C 读取ini文件的实例详解

    这篇文章主要介绍了C 读取ini文件的实例详解的相关资料,希望通过本文能帮助到大家,让大家实现这样的功能,需要的朋友可以参考下
    2017-10-10
  • Qt实现简单动态时钟

    Qt实现简单动态时钟

    这篇文章主要为大家详细介绍了Qt实现简单动态时钟,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • 详解C++中StringBuilder类的实现及其性能优化

    详解C++中StringBuilder类的实现及其性能优化

    在Java和C#中,StringBuilder可以创造可变字符序列来动态地扩充字符串,那么在C++中我们同样也可以实现一个StringBuilder并且用来提升性能,下面就来详解C++中StringBuilder类的实现及其性能优化
    2016-05-05

最新评论