#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 == 1
,upper == 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;
}
我已经编写了输入部分,这样它将拒绝像foo
或a123
这样的输入。它不能正确处理像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