【 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: 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;
}

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.运行

相关推荐
爱编码的小八嘎3 分钟前
C语言完美演绎8-8
c语言
量子炒饭大师5 分钟前
【C++11】RAII 义体加装指南 ——【包装器 与 异常】C++11中什么是包装器?有哪些包装器?C++常见异常有哪些?(附带完整代码讲解)
开发语言·c++·c++11·异常·包装器
telllong8 分钟前
Python异步编程从入门到不懵:asyncio实战踩坑指南
开发语言·python
知兀9 分钟前
【Result类】(使用/不使用<T> data的情况);自带静态方法、纯数据类;
java·开发语言
达帮主10 分钟前
25.C语言 递归函数
c语言·开发语言·汇编
yunhuibin14 分钟前
Linux 7.0 调度器:C 语言面向对象(OOPC)的极致实践
linux·运维·c语言
整点薯条77816 分钟前
用 Python 给家里做一次噪音频谱审计:程序员的声学工程实践(含完整源码)
开发语言·python·噪音控制
洋不写bug16 分钟前
Java线程(三):线程执行顺序问题、可重入锁、加锁操作解析,死锁解决
java·开发语言
子非吾喵16 分钟前
本地部署AI大模型:Ollama + Qwen3 完整指南,用Python打造智能聊天助手
开发语言·人工智能·python
爱编码的小八嘎20 分钟前
C语言完美演绎8-6
c语言