Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C中创建图形的备选方案_C_Arrays_Loops_Graph_If Statement - Fatal编程技术网

在C中创建图形的备选方案

在C中创建图形的备选方案,c,arrays,loops,graph,if-statement,C,Arrays,Loops,Graph,If Statement,我最近创建了一个程序,可以计算通过管道的流量,并逐行生成输出的散点图。我对C语言的了解还很初级(从python开始),我觉得可能是我把代码弄得过于复杂了。因此,我要问的是,是否有人可以选择下面的代码。欢迎对代码结构等进行评论 #include <stdio.h> #include <stdlib.h> #include <math.h> #include <string.h> #define PI 3.1415926 double flow_

我最近创建了一个程序,可以计算通过管道的流量,并逐行生成输出的散点图。我对C语言的了解还很初级(从python开始),我觉得可能是我把代码弄得过于复杂了。因此,我要问的是,是否有人可以选择下面的代码。欢迎对代码结构等进行评论

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

#define PI 3.1415926

double 
flow_rate(double diameter, double k, double slope){
    double area, w_perimeter, hyd_rad, fr;

    area = (PI*pow(diameter,2.0))/8.0;
    w_perimeter = (PI*diameter)/2.0;
    hyd_rad = area/w_perimeter;

    fr = (1.0/k)*area*pow(hyd_rad,(2.0/3.0))*pow(slope,(1.0/2.0));

return fr;
}

int 
main(int argc, char **argv) {
    double avg_k=0.0312, min_slope=0.0008;
    float s3_diameter; 
    int i=0, num=0, flow_array[6] ,rows, align=29;
    char graph[] = "                             ";
    char graph_temp[]= "                             ";

    printf("\nFlow Rate (x 10^-3) m^3/s\n");

    for (s3_diameter=0.50;s3_diameter>0.24;s3_diameter-=0.05){
        flow_array[i] = (1000*(flow_rate(s3_diameter, avg_k, min_slope))+0.5);
        i += 1;
    }

    for (rows=30;rows>0;rows--){
        strcpy(graph_temp,graph);
        for (num=0;num<6;num++){
            if (rows==flow_array[num] && rows%5==0){
                graph_temp[align] = '*';
                printf("%d%s\n",rows,graph_temp);
                align -= 5;
                break;
            }
            else if (rows==flow_array[num]){
                graph_temp[align] = '*';
                printf("|%s\n",graph_temp);
                align -= 5;
                break;
            }
            else {
                if (rows%5==0 && num==5){
                    printf("%d%s\n",rows,graph_temp);
                } 
                else if (rows%5!=0 && num==5){
                    printf("|%s\n",graph_temp);
                }
            }
        }
    }

    printf("|----2----3----3----4----4----5----\n");
    printf("     5    0    5    0    5    0\n");
    printf("       Diameter (x 10^-2) m\n");

    return 0;
}

到目前为止,GNUPlot是用C绘制图形的最简单方法。 它可以从简单的绘图绘制到复杂的3d图形,甚至提供ASCII艺术输出(如果确实需要ASCII输出)


您可以在这里找到关于如何在C程序中使用GNUPlot的更多信息:

GNUPlot是目前为止在C中绘制图形的最简单方法。 它可以从简单的绘图绘制到复杂的3d图形,甚至提供ASCII艺术输出(如果确实需要ASCII输出)


您可以在这里找到关于如何在C程序中使用GNUPlot的更多信息:

您希望您的图形像ASCII art一样,还是这只是您开始的方式?例如,你是否考虑过使用GNUTRAP之类的东西?对于等式的固定约束,代码并不太坏。您可以使用
sqrt(slope)
代替
pow(slope,(1.0/2.0))
。您可以使用
intmain(void)
,因为您忽略了命令行参数。您可能需要考虑如何概括处理过程;范围、标签、缩放、宽度、高度、数字的位置等。您可以决定让用户指定要打印为文件中的线条的数据,或者,您可以提供一种方法,使用编译到程序中的不同函数来实现不同的公式。您的函数定义看起来很有趣-额外行中的返回类型是某种我不知道的约定吗?@l4mpi它是GNU编码标准的一部分。您希望您的图形像ASCII艺术一样吗?或者这就是您想要的方式开始?例如,你是否考虑过使用GNUTRAP之类的东西?对于等式的固定约束,代码并不太坏。您可以使用
sqrt(slope)
代替
pow(slope,(1.0/2.0))
。您可以使用
intmain(void)
,因为您忽略了命令行参数。您可能需要考虑如何概括处理过程;范围、标签、缩放、宽度、高度、数字的位置等。您可以决定让用户指定要打印为文件中的线条的数据,或者,您可以提供一种方法,使用编译到程序中的不同函数来实现不同的公式。您的函数定义看起来很有趣-额外行中的返回类型是我不知道的某种约定吗?@l4mpi它是GNU编码标准的一部分
Flow Rate (x 10^-3) m^3/s
30                             
|                             
|                             
|                             
|                             
25                             
|                             
|                             
|                             *                             
|                             
20                             
|                             
|                             
|                        *    
|                             
15                             
|                             
|                             
|                   *         
|                             
10                             
|              *              
|                             
|                             
|         *                   
5                             
|    *                        
|                             
|                             
|                             
|----2----3----3----4----4----5----
     5    0    5    0    5    0
       Diameter (x 10^-2) m