float a, b, c;
printf( "Enter three nonzero values:\n" );
scanf( "%f%f%f", &a, &b, &c );
Run Code Online (Sandbox Code Playgroud)
当我输入 a = 2、b = 2 和 c = 4 时,为什么...
if( a < ( b + c ))
{
if( b < ( a + c ))
{
if( c < ( a + b ))
{
printf( "This is a triangle." );
}
else
{
printf( "This is not a triangle." );
}
}
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
...打印“这不是三角形”但是...
if( a < ( b + c ))
{
if( b < ( a + c ))
{
if( c < ( a + b ))
{
printf( "This is a triangle." );
}
}
}
else
{
printf( "This is not a triangle." );
}
Run Code Online (Sandbox Code Playgroud)
...才不是?我正在查看的解决方案使用后一种代码。但是,当我运行程序时,“这不是三角形”的行在我的命令道具中只是空白。
我在 VS 2019 中使用 notepad++ 和 Developer Command Prompt。
vvvvvvv 已解决 vvvvvvvv
如果与我处于同一学习阶段的任何人感兴趣,我就是这样解决这个练习的。我正在使用一本书来学习 c 编程,而我只阅读了三章。因此,我只想使用我从前三章中学到的知识。
float a, b, c, temp, no = 0, count = 1;
printf( "Enter three nonzero values:\n" );
scanf( "%f%f%f", &a, &b, &c );
while ( count < 3 ) {
if(a + b > c){
/* Switch place of a and b */
temp = a;
a = b;
b = temp;
/* Switch place of b and c */
temp = c;
c = b;
b = temp;
count++;
}
else {
no++;
/* Switch place of a and b */
temp = a;
a = b;
b = temp;
/* Switch place of b and c */
temp = c;
c = b;
b = temp;
count++;
}
}
if ( no > 0 ) {
printf ( "This is not a valid triangle." );
}
else {
printf ( "This is a valid triangle." );
}
return 0;
Run Code Online (Sandbox Code Playgroud)
此解决方案使用 while 循环来确定三角形的边是否可以是有效三角形。我使用变量 temp 来切换边的位置,然后如果组合之一不是有效三角形,则向变量 no 添加一个。
我还想补充一点,chegg.com 上此练习的解决方案是错误的。这让我很困惑。
vvvvvvvv 另一个解决方案 vvvvvvv
我书中的下一个练习是计算三个值是否可以是直角三角形的边。当我解决这个问题时,我意识到同样的代码也可以用于正三角形。
float a, b, largest, temp;
printf( "Enter three nonzero values:\n" );
scanf( "%f%f%f", &largest, &a , &b );
if ( a > largest ) {
temp = largest;
largest = a;
a = temp;
}
if ( b > largest ) {
temp = largest;
largest = b;
b = temp;
}
/* a + b > largest if it's a regular triangle */
if ( a * a + b * b == largest * largest ) {
printf( "This is a valid right triangle" );
}
else {
printf( "This is not a valid right triangle" );
}
return 0;
Run Code Online (Sandbox Code Playgroud)
因此,不要循环,只需将变量 a 和 b 与最大值进行比较即可找出哪个变量最大。然后使用勾股定理找出边是否可以表示直角三角形,如果是正三角形,则使用a + b > c。
我更喜欢这种方式而不是使用不必要的循环。
因为这是假的:if( c < ( a + b ))因为4 < (2 + 2)是假的。因此else分支将执行。在您的第二个变体中,它只会打印“这不是三角形”。当第一个if为假时,否则为假。尝试这个
if ( (a < ( b + c )) && (b < ( a + c )) && (c < ( a + b )) )
printf( "This is a triangle.");
else
printf( "This is not a triangle.");
Run Code Online (Sandbox Code Playgroud)
注意:这也会打印,"This is not a triangle."因为根据您的逻辑,这些值无论如何都不是三角形。