首页 > 其他分享 >三角形判断问题之:while循环的使用

三角形判断问题之:while循环的使用

时间:2024-10-27 23:16:57浏览次数:9  
标签:triangle 读取 scanf while 循环 三角形 输入

描述

KiKi想知道已经给出的三条边a,b,c能否构成三角形,如果能构成三角形,判断三角形的类型(等边三角形、等腰三角形或普通三角形)。

输入描述:

题目有多组输入数据,每一行输入三个a,b,c(0<a,b,c<1000),作为三角形的三个边,用空格分隔。

输出描述:

针对每组输入数据,输出占一行,如果能构成三角形,等边三角形则输出“Equilateral triangle!”,等腰三角形则输出“Isosceles triangle!”,其余的三角形则输出“Ordinary triangle!”,反之输出“Not a triangle!”。

示例1

输入:2 3 2

          3 3 3

输出:Isosceles triangle!

          Equilateral triangle!

本人第一次写的代码:933ebc85be0d47bc84a936dcf61a05b4.png

对于题目标示的各类条件,感到无处安放。虽然该代码在编译器上显示并无错误,但是输出结果不准确,有问题。

e86c0357f27f40a39adc0f4f4e746d95.png

 首先,应该用一个大if将“是三角形”与“不是三角形”区分开。本人将“不是三角形”的打印独立于while循环与if之外,所以"Not a triangle!"是每次都会被打印的。

第二点非常重要的是,题目要求scanf函数是多组输入,而我的代码输入一次就结束了!原因是我在最后多加了break,根本不需要break的,我没有想到应该用大if区分是否为三角形,就慌乱之下用了break结束while循环,却忘记了多组输入的问题。

第三点,当输入的三个数明显无法组成三角形时,却打印了“普通三角形”。“while”里的限制条件不正确,应该是任意两边和大于第三边,逻辑操作符是并且。

54bddbc150c44b80866bfe38e4aa6e2e.png

 经过修改之后,写出了正确的代码:

22683cf18dfa40868e7c190c9807471c.png

在vs2022上运行的时候,一切正常。

但是,当在刷题网站上时,却报错

7f57f2ae11c948bd94160e32b8f67843.png

并且,一直在疯狂打印“等边三角形 ”

c647615cd6194dec8329d205df948fac.png

 明明只输入了一组,却一直在自动打印。本人觉得是while里面另一个条件的锅。

我查找得知,在 while(scanf_s("%d", &a)!= EOF) 中, scanf_s 函数用于读取输入,它返回成功读取的参数个数。我们可以在后面添加其它判断条件,但是要加上逻辑操作符&&,才会更加准确。

至于本题while判断条件的意思,即在原来判断 scanf_s 是否读取到文件末尾( EOF )的基础上,又增加了两个条件:一是判断 scanf_s 是否成功读取了3个整数(因为有 %d %d %d 三个格式控制符);二是判断变量 a,b,c 是否满足条件要求的大小关系。当这三个条件(读取成功3个整数、 大小关系 、未遇到 EOF )同时满足时,循环体才会执行。

例如, while( (scanf_s("%d %d %d", &a, &b, &c) == 3) && (a > 0) ) ,这里在原来判断 scanf_s 是否读取到文件末尾( EOF )的基础上,又增加了两个条件:一是判断 scanf_s 是否成功读取了3个整数(因为有 %d %d %d 三个格式控制符);二是判断变量 a 是否大于0。当这三个条件(读取成功3个整数、 a > 0 、未遇到 EOF )同时满足时,循环体才会执行。

加上逻辑与操作符之后果然一切正常。

c9e5d85ab75b4f5ab64422c9b24b6db4.png

 另外,在这个题目里,对于a,b,c大小的限制,只是对题目里面的数据进行了描述,可以不用管,不加a,b,c在0~1000以内的限制条件也是正确的。

bf5d8210ba26415f84d98134885c9134.png

 

标签:triangle,读取,scanf,while,循环,三角形,输入
From: https://blog.csdn.net/2401_87539581/article/details/143170222

相关文章

  • 什么是循环神经网络(RNN)
    循环神经网络(RecurrentNeuralNetwork,RNN)是一种深度学习模型,专门设计用于处理序列数据和时间序列问题。它具有一种独特的结构,允许信息在网络内部进行循环传递,以处理前后相关性和时序性。RNN的关键特性是它具有内部循环结构,可以接受来自上一个时间步的输出作为当前时间步的输入。......
  • Java中循环结构中的for循环和练习案例
    文章目录前言循环结构for循环练习1(输出)练习2(求和)练习3(求偶数和)练习4(求水仙花数)练习5(求水仙花数且统计个数)练习6(求回文数)前言我是一名来自延边大学人工智能专业的热爱街舞的大四学生,目前在学习Java,我会根据我的学习路线给大家分享学习经验,这章我们学习Java中的控制结......
  • 20241024 模拟赛(长方体,三角形,区间,图)
    看题戳这里总结1h看题+骂出题人1h把之前没做完的题单补了1h闲逛+水群+听歌1h疯狂rush暴力!!!结果看完solution才发现我是fw\(qwq\)最终分数:30+60+60+10解析A.长方体难度:绿暴力:直接三维差分+前缀和搞定。正解:先算出前缀交与后缀交。被\(n\)个长方体覆盖的点就是所......
  • Spring中三级缓存如何解决循环依赖的
    Spring中是如何解决循环依赖的前言我们都知道,Spring时使用了三级缓存来解决的循环依赖问题。但是三级缓存是什么?三级缓存又是如何解决循环依赖的呢?为什么需要三级缓存,二级不行吗?带着这些问题,我们一起来研究一下Spring的源码,揭秘上面的问题。SpringBean的生命周期要说要S......
  • 单向循环链表的实现及相关算法
    1.单向循环链表特点:每一个节点除了数据域,还有一个next指针域指向下一个节点(存储了下一个节点的地址),末尾节点的指针域指向了头节点1.1实现过程1.1.1、构建结点structNode{ Node(intvalue=0): val(value), next(nullptr) {} intval; Node*next;};1......
  • Java基础day03---循环,数组,杨辉三角
    Java基础day03接day02----流程控制---3、循环一、循环循环语法结构执行逻辑通用for循环for(初始化;条件判断;步长设置){//循环体}第一次循环:初始化,条件判断,循环体,步长设置;第2-n次循环:条件判断,循环体,while循环while(判断条件){//循环体}先条件判断再执行循环体do.............
  • 3个案例手把手教你:Go语言条件语句和循环的实际应用场景
    在软件开发中,条件语句和循环是控制程序执行流的基础工具。在Go语言中,它们不仅能够优化程序结构,还能提高代码的可读性和灵活性。合理使用条件语句和循环能有效减少重复代码,提升系统的可靠性。本文将通过三个具体场景案例——用户注册系统、爬虫程序和商品库存管理系统——深......
  • for 循环()简单到高阶
    for循环的初始意义是遍历一串具有相同特性的值1、遍历数组,根据索引去求值点击查看代码publicclassForDemo1{publicstaticvoidmain(String[]args){int[]arr={1,2,3,4,5,6,7};for(inti=0;i<arr.length;i++){System.out......
  • ⑤分支与循环
    提前说一下哦,C语言是结构化的程序设计语言,结构是说顺序结构、选择结构、循环结构if语句if语法形式为下if(表达式)语句当表达式为真时,语句执行,反之为假时语句不执行。那何谓真何为假呢?c语言中,0为假,非0为真。简单来讲,表达式的结果为0时,语句不执行,反之执行。......
  • HarmonyOS:ArkUI最佳实践(1)ForEach循环渲染
    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(MaoistLearning)➤博客园地址:为敢技术(https://www.cnblogs.com/strengthen/ )➤GitHub地址:https://github.com/strengthen➤原文地址:https://www.cnblogs.com/strengthen/p/......