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

496 0
Honkers 2025-4-2 11:10:22 | 显示全部楼层 |阅读模式

【 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列,计算出 x 行0°~180°时 y 点的坐标 m ,那么在同一行与之对称的180°~360°的 y 点的坐标就应为62- m 。程序中利用反余弦函数 acos 计算坐标( x , y )的对应关系。

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

3.程序

3-1.源码

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

  1. /*******************************************************************
  2. * > File Name: 001_cos.c
  3. * > Author: fly
  4. * > Mail: XXXXXXXX@icode.com
  5. * > Create Time: 2020年06月01日 星期一 09时24分59秒
  6. ******************************************************************/
  7. #include <stdio.h>
  8. #include <math.h>
  9. #include "debug.h"
  10. void test_acos(void)
  11. {
  12. double x = 0.0;
  13. double y = 0.0;
  14. int m = 0;
  15. for(x= -1.0; x<=1.0; x+=0.1)
  16. {
  17. y = acos(x);
  18. m = y * 10;
  19. printf("x = %f, y = %f[%d]\n", x, y, m);
  20. }
  21. }
  22. void printf_cos(void)
  23. {
  24. printf("========Draw Cos(x)========\n");
  25. double x = 0.0, y = 0.0;
  26. int m, n;
  27. for(y = 1.0; y >= -1.0; y-=0.1)
  28. {
  29. x = acos(y);
  30. m = x * 10;
  31. //printf("(%f, %f)%d\n", x,y,m);
  32. for(n = 0; n <=m; n++)
  33. printf(" ");
  34. printf(RED"*"NONE);
  35. for(; n<62-m; n++)
  36. printf(" ");
  37. printf(RED"*\n"NONE);
  38. }
  39. }
  40. int main(int argc, char* argv[])
  41. {
  42. DBG_PRINTF("Hello, world !\n");
  43. //test_acos();
  44. printf_cos();
  45. return 0;
  46. }
复制代码

  1. #ifndef __DEBUG_H__
  2. #define __DEBUG_H__
  3. #include <string.h>
  4. #define DBG_PRINTF_FUNC (1)
  5. #define DBG_PRINTF_SWITCH (1)
  6. // color debug
  7. #define NONE "\e[m"
  8. #define BLACK "\e[0;30m"
  9. #define RED "\e[0;31m"
  10. #define GREEN "\e[0;32m"
  11. #define YELLOW "\e[0;33m"
  12. #define BLUE "\e[0;34m"
  13. #ifdef DBG_PRINTF_FUNC
  14. #define DBG_PRINTF(fmt, args...) \
  15. do{\
  16. printf("<<FILE:"BLUE"%s"NONE" LINE:"RED"%d"NONE" FUNC:"GREEN"%s"NONE">>", \
  17. strrchr(__FILE__, '/')?strrchr(__FILE__, '/')+1:__FILE__, __LINE__, __FUNCTION__);\
  18. printf(fmt, ##args);\
  19. }while(0)
  20. #else
  21. #define DBG_PRINTF(fmt, args...)
  22. #endif /* DBG_PRINTF_FUNC */
  23. #endif /* __DEBUG_H__ */
复制代码

3-2.makefile
  1. SRC = ${wildcard *.c}
  2. BIN = ${patsubst %.c, %, $(SRC)}
  3. CFLAGS = -g -Wall
  4. #INC = -lm
  5. LIBS = -lm
  6. all:$(BIN)
  7. $(BIN):%:%.c
  8. $(CC) -o $@ $< $(CFLAGS) $(LIBS)
  9. clean:
  10. $(RM) a.out $(BIN)
  11. .PHONY:all clean
复制代码

4.运行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Honkers

荣誉红客

关注
  • 4010
    主题
  • 36
    粉丝
  • 0
    关注
这家伙很懒,什么都没留下!

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2025 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行