如何在c中显示表格

  • 本文关键字:显示 表格 c windows
  • 更新时间 :
  • 英文 :

#include <stdio.h>
#include <math.h>
int main(void)
{
// input value 

int num, lower, upper;
double squareroot;
int square;
int cube;
printf("enter your number:n");
scanf_s("%d", &num);
do
{
printf("the lower value limit is ");
scanf_s("%d", &lower);
} while (lower < 0 || lower > 50);
do
{
printf("the upper value limit is ");
scanf_s("%d", &upper);
} while (upper < 0 || upper > 50);
// the formular to find the squareroot, square, cube
squareroot = sqrt(num);
square = num * num;
cube = num * num * num;
//a for loop
for (num = 0; num <= upper; num++) {

printf("*base number*  ||  *square root*  ||  *square*  ||  *cube*n");
printf("*%d*           ||   *%f*      ||   *%ld*      ||  *%ld*n",
lower, squareroot, square, cube);

}

return 0;
}

我试着制作一个表来显示基数、平方根、平方和立方体并设置表格的限制。例如,如果我输入的较低的数字是1,而较高的数字是5,那么表将在5处停止,然后显示平方根、平方和立方体

至少这个问题:

不匹配的说明符/类型

int square;
int cube;
...
printf("*%d*           ||   *%f*      ||   *%ld*      ||  *%ld*n",
lower, squareroot, square, cube);

使用"%d"int,而不是"%ld"

移动分配

以下作业需要在循环中。

for (num = 0; num <= upper; num++) {
square = num * num;
cube = num * num * num;

节省时间。启用所有编译器警告

尝试下面的代码进行所有更改我添加了注释以澄清我为什么进行

#include <stdio.h>
#include <math.h>
int main(void)
{
// input value 
int lower, upper;
double squareroot;
int square;
int cube;
//Read the Limits First
printf("Enter the Lower Limit: ");
scanf("%d", &lower);
printf("Enter the Upper Limit: ");
scanf("%d", &upper);

//Instead of Declaring an Entire Loop You Can Just Use an If Statement this Reduces Code Complexity
//You can also Set Your Limits
if(upper > 0 && upper < 50 && lower > 0 && lower < 50)
{
//THen Enter Actual Code
//Also Dont Set Lower to 0 It will Change Your Actual Value Instead Take another Loop Var
for (int i = lower; i <= upper; i++) 
{
//Then Perform all Functions on i
squareroot = sqrt(i);
square = i * i;
cube = i * i * i;
printf("*base number*  ||  *square root*  ||  *square*  ||  *cube*n");
printf("*%d*           ||   *%f*      ||   *%d*      ||  *%d*n", i, squareroot, square, cube);
}
}
return 0;
}

几个问题:

  • 你麻烦地要求lower,但你没有用它来控制你的循环——你的循环应该是
    for( int num = lower; num <= upper; num++) 
    { 
    ... 
    }
    换句话说,如果您总是希望循环从零开始,那么您根本不需要lower
  • 您需要为循环的每次迭代计算num的平方根、平方和立方体。相反,您在循环前执行一次,然后一遍又一遍地打印相同的值;
  • 您只需要在循环体外部打印一次表头

您可以计算平方根、平方和立方体,所有这些都是printf语句的一部分:

printf( "%d %f %d %dn", num, sqrt((double) num), num * num, num * num * num );

字段宽度说明符是您的朋友-您可以告诉printf您希望每列的宽度。例如:

printf( "%6d%12.2f%12d%12d", num, sqrt((double) num), num * num, num * num * num );

这意味着num的列宽6个字符,平方根的列宽12个字符,保留3个字符用于小数点和后面的两位数字,平方和立方体的列宽为12个字符。示例:

printf( "%6s%12s%12s%12sn", "base", "root", "square", "cube" );
printf( "%6s%12s%12s%12sn", "----", "----", "------", "----" );
for (int i = lower; i <= upper; i++ )
printf( "%6d%12.2f%12d%12dn", i, sqrt( (double) i ), i*i, i*i*i );

它给出这样的输出(lower == 1upper == 10(:

base        root      square        cube
----        ----      ------        ----
1        1.00           1           1
2        1.41           4           8
3        1.73           9          27
4        2.00          16          64
5        2.24          25         125
6        2.45          36         216
7        2.65          49         343
8        2.83          64         512
9        3.00          81         729
10        3.16         100        1000

完整示例:

#include <stdio.h>
#include <math.h>
int main( void )
{
int lower = 0, upper = 0;

printf( "Gimme a lower value: " );
while ( scanf( "%d", &lower ) != 1 || (lower < 0 || lower > 50 ))
{
/**
* Clear any non-numeric characters from the input stream
*/
while ( getchar() != 'n' ) 
; // empty loop
printf( "Nope, try again: " );
}
printf( "Gimme an upper value: " );
while ( scanf( "%d", &upper ) != 1 || (upper < lower || upper > 50 ))
{
while( getchar() != 'n' )
; // empty loop
printf( "Nope, try again: " );
}
printf( "%6s%12s%12s%12sn", "base", "root", "square", "cube" );
printf( "%6s%12s%12s%12sn", "----", "----", "------", "----" );
for (int i = lower; i <= upper; i++ )
printf( "%6d%12.2f%12d%12dn", i, sqrt( (double) i ), i*i, i*i*i );
return 0;
}

我已经编写了输入部分,这样它将拒绝像fooa123这样的输入。它不能正确处理像12w4这样的输入,但这会使示例变得比需要的更复杂(你不是在问输入验证,而是在问计算和格式(。示例运行:

$ ./table
Gimme a lower value: foo
Nope, try again: a123
Nope, try again: 123
Nope, try again: 1
Gimme an upper value: 100
Nope, try again: 50
base        root      square        cube
----        ----      ------        ----
1        1.00           1           1
2        1.41           4           8
3        1.73           9          27
4        2.00          16          64
5        2.24          25         125
6        2.45          36         216
7        2.65          49         343
8        2.83          64         512
9        3.00          81         729
10        3.16         100        1000
11        3.32         121        1331
12        3.46         144        1728
13        3.61         169        2197
14        3.74         196        2744
15        3.87         225        3375
16        4.00         256        4096
17        4.12         289        4913
18        4.24         324        5832
19        4.36         361        6859
20        4.47         400        8000
21        4.58         441        9261
22        4.69         484       10648
23        4.80         529       12167
24        4.90         576       13824
25        5.00         625       15625
26        5.10         676       17576
27        5.20         729       19683
28        5.29         784       21952
29        5.39         841       24389
30        5.48         900       27000
31        5.57         961       29791
32        5.66        1024       32768
33        5.74        1089       35937
34        5.83        1156       39304
35        5.92        1225       42875
36        6.00        1296       46656
37        6.08        1369       50653
38        6.16        1444       54872
39        6.24        1521       59319
40        6.32        1600       64000
41        6.40        1681       68921
42        6.48        1764       74088
43        6.56        1849       79507
44        6.63        1936       85184
45        6.71        2025       91125
46        6.78        2116       97336
47        6.86        2209      103823
48        6.93        2304      110592
49        7.00        2401      117649
50        7.07        2500      125000

最新更新