我是编程的新手,我仍然很难理解一些概念,因此我在这里寻求您的帮助。以下代码通过用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面的值并将计算结果显示在输出表中。
答案 0 :(得分:1)
您可以使用scanf()
来读取输入,并且可以将该输入存储到变量中。
例如:
double num;
scanf("%lf", &num);
在这种情况下,您可以删除为a
和b
分配随机数的部分,并将用户输入存储到a
和b
中。
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的值。