在c中填充斜边表

时间:2019-01-11 00:23:21

标签: c

我是编程的新手,我仍然很难理解一些概念,因此我在这里寻求您的帮助。以下代码通过用A边和B边的随机值填充数组表来计算直角三角形的斜边。

我想在此代码中修改的一件事是,不要让它用随机值填充表格;我希望能够输入我的特定值。如何才能做到这一点?

先谢谢了。

#include <stdio.h>   //header for input/ output
#include <math.h>    //header for sqrt() and pow() 

double calcHypotenuse(double a, double b)
{
    double a_square = pow(a, 2);
    double b_square = pow(b, 2);
    return sqrt(a_square + b_square);
}

//Print the table of a,b,c with headings  

void printTable(double table[4][3])
{
    int i;

    // display the header columns
    printf("%19s%21s%21s\n", "Value for Side A", "Value for Side B", 
"Hypotenuse");

// display the data rows
for (i = 0; i < 4; i++)
{
    printf("%15.3f%21.3f%23.3f\n", table[i][0], table[i][1], table[i][2]);
    }

}

int main()
{
double array[4][3];   //two dimensional array to store values of a, b and Hypotenuse 
double a, b, c;      //variables  of side A, B, and C 
int i;             // loop index variable

//populate the table with rand values for a and b 
for (i = 0; i < 4; i++)
{
    a = 2 + rand() % 16;
    b = 3 + rand() % 10;
    array[i][0] = a;
    array[i][1] = b;
    array[i][2] = 0;
}

// print the array table 
printf("\nInput Table:\n");
printTable(array);

//populate the hypotenuse values in the array table 
for (i = 0; i < 4; i++)
{
    a = array[i][0];
    b = array[i][1];
    c = calcHypotenuse(a, b);
    array[i][2] = c;
}

// print the results 
printf("\nOutput Table:\n");
printTable(array);

return 0;
}

同样,对于我来说,期望的结果只是能够输入A面和B面的值并将计算结果显示在输出表中。

3 个答案:

答案 0 :(得分:1)

您可以使用scanf()来读取输入,并且可以将该输入存储到变量中。 例如:

double num;
scanf("%lf", &num);

在这种情况下,您可以删除为ab分配随机数的部分,并将用户输入存储到ab中。

scanf()具有不同的选项和转换规范,请查看https://linux.die.net/man/3/scanf了解更多详细信息。

答案 1 :(得分:1)

在这种简单情况下,使用scanf确实很容易,以便从终端获取输入并将其存储在代码变量中。我对您的代码做了一些修改,以提供任意输入的功能。

#include <stdio.h>   //header for input/ output
#include <stdlib.h>
#include <math.h>    //header for sqrt() and pow() 

#define MAX_ARRAY_SIZE 100

double calcHypotenuse(double a, double b)
{
    double a_square = pow(a, 2);
    double b_square = pow(b, 2);
    return sqrt(a_square + b_square);
}

//Print the table of a,b,c with headings  

void printTable(double table[MAX_ARRAY_SIZE][3],  int n)
{
    int i;

    // display the header columns
    printf("%19s%21s%21s\n", "Value for Side A", "Value for Side B", 
"Hypotenuse");

    // display the data rows
    for (i = 0; i < n; i++)
        printf("%15.3f%21.3f%23.3f\n", table[i][0], table[i][1], table[i][2]);

}

int main()
{

double array[MAX_ARRAY_SIZE][3];   //two dimensional array to store values of a, b and Hypotenuse 
double a, b, c;      //variables  of side A, B, and C 
int i;             // loop index variable

int n;
printf("Input Number of Triangles ");
scanf("%d", &n);

printf("Parsing Input Table\n");
for (i = 0; i < n; i++)
{
    scanf ("%lf", &a);
    scanf ("%lf", &b);

    array[i][0] = a;
    array[i][1] = b;
    array[i][2] = calcHypotenuse(a, b);;
}

// print the results 
printf("\nOutput Table:\n");
printTable(array, n);

return 0;
}

运行代码时,系统将提示您输入三角形的数量,然后依次输入每个边的长度。

但是实际上,生成输入文件确实非常方便,并且使用scanf可以立即将输入文件发送到程序,而不必一直每次都输入值。

例如,在我的情况下,我生成了此输入文件input.txt

6
1 2
3 4
5 6
3 4
7 8
10 11

在Linux上(也可能在mingw上),您可以按以下方式将其传递给程序

a.out < input.txt

并生成以下输出:

Output Table:
   Value for Side A     Value for Side B           Hypotenuse
          1.000                2.000                  2.236
          3.000                4.000                  5.000
          5.000                6.000                  7.810
          3.000                4.000                  5.000
          7.000                8.000                 10.630
         10.000               11.000                 14.866

只是一般性的注意事项:请谨慎使用scanf,因为它可能导致不确定的行为。在继续进行计算之前,请尝试验证输入值。

答案 2 :(得分:0)

如果您要更改的唯一事情是能够自己输入值,则可以用以下代码替换生成随机数的循环中的代码:

//populate the table with rand values for a and b 
for (i = 0; i < 4; i++)
{
    printf("Enter the value of a : ");
    scanf("%lf", &a);
    printf("Enter the value of b : ");
    scanf("%lf", &b);
    array[i][0] = a;
    array[i][1] = b;
    array[i][2] = 0;
}

然后,系统将提示您4次输入a和b的值。