醉罪 发表于 2008-9-6 21:43

困惑了一天的题

#include<stdio.h>
#include<math.h>
void main()
{
    double y;
    int x,m;
    for(y=1;y>=-1;y-=0.1)          /*y为列方向,值从1到-1,步长为0.1*/
    {
        m=acos(y)*10;              /*计算出y对应的弧度m,乘以10为图形放大倍数*/
        for(x=1;x<m;x++)
        printf(" ");
        printf("*");                /*控制打印左侧的 * 号*/
        for(;x<62-m;x++)
        printf(" ");
        printf("*\n");             /*控制打印同一行中对称的右侧*号*/
    }
}

醉罪 发表于 2008-9-6 21:44

不好意思 没有说完。。。
上面的代码是绘制余弦曲线
谁能利用数组来绘制啊 我想很久了 ..
谢谢大家......

醉罪 发表于 2008-9-7 13:21

用二维数组绘制.... 哎   郁闷死人了.

StarWing83 发表于 2008-9-7 18:07

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

int main()
{
    double y;
    for (y=1;y>=-1;y-=0.1)         /*y为列方向,值从1到-1,步长为0.1*/
    {
        int m=acos(y)*10;          /*计算出y对应的弧度m,乘以10为图形放大倍数*/
        printf("%*c%*c\n",m+1,'*',63-m*2,'*');
    }
    return 0;
}

方法很好啊,比我自己画的漂亮多了……稍微简化一下……

醉罪 发表于 2008-9-7 18:14

呵呵  可惜不是我的方法  这是在c语言经典100例上的   上面说用二维数组很简单    但是我想了半天都没有想到怎么用二维数组

StarWing83 发表于 2008-9-7 18:22

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

#define X 75
#define Y 12
#define PI 3.1415926535897

int main(void)
{
    int i, j, offset[X];
    for (j = 0; j < X; j++)
        offset[j] = -Y * sin(2 * PI * j / X);
    for (i=-Y; i <= Y; i++)
    {
        for (j=0; j<X; j++)
            putchar(i == offset[j] ? '*' : i == 0 ? '-' : ' ');
        putchar('\n');
    }
    return 0;
}

今天下午闲得无聊写的一个,不如LZ的漂亮……哎……果然用acos比用sin漂亮多了……关键在于均匀。

LZ程序改进版在4#,我觉得已经不需要使用数组了,加上数组反而画蛇添足。这个代码的确比较完美,果然很经典。

[[it] 本帖最后由 StarWing83 于 2008-9-7 18:23 编辑 [/it]]

醉罪 发表于 2008-9-7 19:25

呵呵 我需要二维数组并不是因为这个题目  
而是为了另一个思路
感谢ls把自己的源码拿来分享  [tk01]

页: [1]

编程论坛