c - 三角形(或直角三角形)的边
问题描述
float a, b, c;
printf( "Enter three nonzero values:\n" );
scanf( "%f%f%f", &a, &b, &c );
当我输入 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;
}
...打印“这不是三角形”但是...
if( a < ( b + c ))
{
if( b < ( a + c ))
{
if( c < ( a + b ))
{
printf( "This is a triangle." );
}
}
}
else
{
printf( "This is not a triangle." );
}
...才不是?我正在寻找的解决方案使用后一个代码。但是,当我运行程序时,“这不是三角形”应该是空白的行在我的命令属性中。
我正在为 VS 2019 使用带有开发人员命令提示符的记事本++。
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;
此解决方案使用 while 循环来确定三角形的边是否可以是有效三角形。我使用变量 temp 来切换边的位置,然后如果其中一个组合不是有效的三角形,则将变量 no 添加到变量 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;
因此,不要循环,只需将变量 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.");
注意:这也会打印出来"This is not a triangle."
,因为根据您的逻辑,这些值无论如何都不是三角形。
推荐阅读
- azure-active-directory - Microsoft Graph API 调用 /me 端点失败并出现错误:compactToken 80049217
- python - 如何使用这个“|”转换数据 pandas 中用于推荐系统的符号
- android - 异步执行任务时阻塞Android上的主线程
- javascript - 通过提交将文本输入到超链接
- java - 如何将文本文件放入数组并搜索特定值但仅限于一维数组
- project-reactor - Reactor Netty - 如何使用延迟通量发送
- typescript - GAS/clasp:如何让自动完成/智能感知在 VSCode 中为 3rd 方库工作
- square-connect - 需要帮助使用 Square API 设置和销售剧院门票
- javascript - 如何在html表单中自动填充输入字段
- ios - 在 iOS 中分析文本到语音的字符串