【 C语言 】| C程序百例 - 绘制余弦曲线

【 C语言 】| C程序百例 - 绘制余弦曲线


时间: 2023年12月29日12:56:29

文章目录

1.要求

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

2.问题分析与算法设计

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

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

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

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

3.程序

3-1.源码

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

c 复制代码
/*******************************************************************
 *   > File Name: 001_cos.c
 *   > Author: fly
 *   > Mail: [email protected]
 *   > 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;
}

c 复制代码
#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
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.运行

相关推荐
clock的时钟23 分钟前
c++第七天--继承与派生
开发语言·c++
蓝桉~MLGT1 小时前
java高级——高阶函数、如何定义一个函数式接口类似stream流的filter
java·开发语言·python
点云SLAM1 小时前
C++中string流知识详解和示例
开发语言·c++·istringstream·ostringstream·c++学习·stringstream·数据流操作
Chenyu_3107 小时前
12.找到字符串中所有字母异位词
c语言·数据结构·算法·哈希算法
门前云梦9 小时前
《C语言·源初法典》---C语言基础(上)
c语言·开发语言·学习
sjtu_cjs10 小时前
Tensorrt python api 10.11.0笔记
开发语言·笔记·python
哆啦A梦的口袋呀10 小时前
深入理解系统:UML类图
开发语言·python·uml
虎冯河10 小时前
怎么让Comfyui导出的图像不包含工作流信息,
开发语言·python
coding随想10 小时前
JavaScript中的原始值包装类型:让基本类型也能“变身”对象
开发语言·javascript·ecmascript
SY师弟10 小时前
51单片机——计分器
c语言·c++·单片机·嵌入式硬件·51单片机·嵌入式