鱼C论坛

 找回密码
 立即注册
查看: 3805|回复: 19

关于循环

[复制链接]
发表于 2021-5-27 12:10:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
这是我的一个实验题:
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
​s(s−a)(s−b)(s−c)
​
​​ ,其中s=(a+b+c)/2。

输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。

我在刚开始分析的时候萌生出了一个想法:
如果有这么一个函数,可以从abc三者中(甚至是几百个量中)随机挑选出来两个然后进行计算比较,那在将来的应用当中不就会很给力吗 ,然后在CSDN当中找到了rand函数,然后发现不会用,于是乎只好用选择结构搞一搞,但是这个问题还是存在的,希望能够解决,这是第一个问题。
然后现在是第二个问题:有没有一种代码能够让我在输入完之后,得出相应的计算结果之后,开始下一次循环的?
这是第二个问题的理想状态的示例:
输入:3 4 5
输出:*****
输入:(这个输入是程序循环来的,不是说在上一次程序运行完之后手动点击开始的)



下面是我编写的代码(经过验证无误):
#include"stdio.h"
#include"stdlib.h"
#include"time.h"/*这两句是我刚开始想要使用随机函数rand写上的,到后来发现用不了,懒得删了*/
#include"math.h"
int main()
{
    int a , b , c , area , perimeter , s , z , r , t ;
    scanf("%d%d%d", &a , &b , &c ) ;
    if( a + b > c && a + c > b && b + c > a )
    {    s = ( a + b + c ) / 2 ;
        z = s - a ;
        r = s - b ;
        t = s - c;
        perimeter = a + b + c ;
        area = pow( s * z * r * t , 1.0 / 2 ) ;
        printf("area = %d ; perimeter = %d ", area , perimeter);}
    else 
        printf("These sides do not correspond to a valid triangle");

    return 0;
}
感谢鱼油大佬们的解答!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-5-27 15:58:53 | 显示全部楼层
别说了,你才是大佬,大佬想的真多
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 16:06:22 | 显示全部楼层
#include"stdio.h"
#include"stdlib.h"
#include"time.h"/*这两句是我刚开始想要使用随机函数rand写上的,到后来发现用不了,懒得删了*/
#include"math.h"
int main()
{
    srand((unsigned)time(NULL));
    int a , b , c , area , perimeter , s , z , r , t ;
    for (int k=0;k<20;k++){
        a=rand()%100;
        b=rand()%100;
        c=rand()%100;
        if( a + b > c && a + c > b && b + c > a )
        {    s = ( a + b + c ) / 2 ;
            z = s - a ;
            r = s - b ;
            t = s - c;
            perimeter = a + b + c ;
            area = pow( s * z * r * t , 1.0 / 2 ) ;
            printf("%d %d %d 可以构成三角形  area = %d ; perimeter = %d \n" ,a,b,c, area , perimeter);
        }
        else 
            printf("%d %d %d 无法构成三角形\n",a,b,c);
    }
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 16:07:47 | 显示全部楼层
第一个问题,我看了看函数快查,还是算了。
至于第二个问题,是我理解错了?那不是加个循环就行了吗?你看对不对
#include"stdio.h"
#include"stdlib.h"
#include"time.h"/*这两句是我刚开始想要使用随机函数rand写上的,到后来发现用不了,懒得删了*/
#include"math.h"
int main()
{
    int a , b , c , area , perimeter , s , z , r , t ;
    while(1)
    {scanf("\n%d%d%d", &a , &b , &c ) ;
    if( a + b > c && a + c > b && b + c > a )
    {    s = ( a + b + c ) / 2 ;
        z = s - a ;
        r = s - b ;
        t = s - c;
        perimeter = a + b + c ;
        area = pow( s * z * r * t , 1.0 / 2 ) ;
        printf("area = %d ; perimeter = %d ", area , perimeter);}
    else 
        printf("These sides do not correspond to a valid triangle\n");
}
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 16:09:33 | 显示全部楼层
第二个问题,不是我理解错了吧,不是加个死循环就行了吗?
你看对不对
#include"stdio.h"
#include"stdlib.h"
#include"time.h"/*这两句是我刚开始想要使用随机函数rand写上的,到后来发现用不了,懒得删了*/
#include"math.h"
int main()
{
    int a , b , c , area , perimeter , s , z , r , t ;
    while(1)
    {scanf("\n%d%d%d", &a , &b , &c ) ;
    if( a + b > c && a + c > b && b + c > a )
    {    s = ( a + b + c ) / 2 ;
        z = s - a ;
        r = s - b ;
        t = s - c;
        perimeter = a + b + c ;
        area = pow( s * z * r * t , 1.0 / 2 ) ;
        printf("area = %d ; perimeter = %d ", area , perimeter);}
    else 
        printf("These sides do not correspond to a valid triangle\n");
}
    return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 16:14:23 From FishC Mobile | 显示全部楼层
第二个问题,你确定?不是加个循环就行了吗?
你看对不对
#include"stdio.h"
#include"stdlib.h"
#include"time.h"/*这两句是我刚开始想要使用随机函数rand写上的,到后来发现用不了,懒得删了*/
#include"math.h"
int main()
{
    int a , b , c , area , perimeter , s , z , r , t ;
    while(1)
    {scanf("\n%d%d%d", &a , &b , &c ) ;
    if( a + b > c && a + c > b && b + c > a )
    {    s = ( a + b + c ) / 2 ;
        z = s - a ;
        r = s - b ;
        t = s - c;
        perimeter = a + b + c ;
        area = pow( s * z * r * t , 1.0 / 2 ) ;
        printf("area = %d ; perimeter = %d ", area , perimeter);}
    else
        printf("These sides do not correspond to a valid triangle\n");
}
    return 0;
}
手机太不方便了,电脑版的界面刚几次发不出来,只能这样贴代码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 16:16:07 | 显示全部楼层
吐了吐了,我手机这边显示不出来我的帖子
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 18:33:54 | 显示全部楼层
https://fishc.com.cn/forum.php?m ... amp;highlight=srand
小甲鱼有讲
应该不难吧自己看一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 22:24:20 | 显示全部楼层
你考虑得可真多要是我这种小菜鸡直接不会考虑到那种呜呜只会最简单的算法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-27 22:36:55 | 显示全部楼层

嗯,首先感谢大佬的回答,然后就是在您发的代码我试着运行了一下,发现了两个我可能没有表述清楚的地方,这是其中一次的运行结果
78 29 52 可以构成三角形  area = 326 ; perimeter = 159
82 3 33 无法构成三角形
91 39 39 无法构成三角形
0 1 58 无法构成三角形
79 49 34 可以构成三角形  area = 493 ; perimeter = 162
56 6 85 无法构成三角形
41 55 78 可以构成三角形  area = 1073 ; perimeter = 174
13 6 81 无法构成三角形
58 68 13 可以构成三角形  area = 206 ; perimeter = 139
24 68 25 无法构成三角形
0 16 47 无法构成三角形
75 6 54 无法构成三角形
52 38 33 可以构成三角形  area = 594 ; perimeter = 123
84 84 23 可以构成三角形  area = 909 ; perimeter = 191
61 20 49 可以构成三角形  area = 432 ; perimeter = 130
23 13 33 可以构成三角形  area = 88 ; perimeter = 69
74 33 25 无法构成三角形
52 31 84 无法构成三角形
97 60 58 可以构成三角形  area = 1569 ; perimeter = 215
82 89 8 可以构成三角形  area = 0 ; perimeter = 179


希望的理想状态:
当我输入abc的值之后,函数会随机从abc当中找出随机的两个数来进行if语句的比较(这是第一个问题);
第二个问题:
希望能够在我输入第一次abc的值,如果符合条件,得出面积周长的结果之后停止运行程序,如果不符合条件,那么就再次自动再次运行程序等待输入。

(这次我应该表述清楚了QAQ)
希望大佬能不胜其烦,再帮忙解答一波~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-27 22:38:28 | 显示全部楼层
万千只cnm 发表于 2021-5-27 18:33
https://fishc.com.cn/forum.php?mod=viewthread&tid=84362&highlight=srand
小甲鱼有讲
应该不难吧自己 ...

对我来说可能真的难了点QAQ,因为上面讲的是怎么生成随机数,我想要的是怎么随机从我输入的值随机选几个数然后进行加减,对加减的结果进行比较QAQ
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 22:44:48 | 显示全部楼层

你这个是系统给的随机变量 emm 他实验里面要输入
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-27 22:48:40 | 显示全部楼层
华文杉 发表于 2021-5-27 22:36
嗯,首先感谢大佬的回答,然后就是在您发的代码我试着运行了一下,发现了两个我可能没有表述清楚的地方, ...

那你第二个问题就用循环呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 06:09:26 From FishC Mobile | 显示全部楼层
本帖最后由 wp231957 于 2021-5-28 06:13 编辑
华文杉 发表于 2021-5-27 22:36
嗯,首先感谢大佬的回答,然后就是在您发的代码我试着运行了一下,发现了两个我可能没有表述清楚的地方, ...


当我输入abc的值之后,函数会随机从abc当中找出随机的两个数来进行if语句的比较(这是第一个问题);
这个问题可是没看懂,说明一下
if( a + b > c && a + c > b && b + c > a )判定三角形三个边都要用到,怎么个随机法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 10:05:02 | 显示全部楼层
wp231957 发表于 2021-5-28 06:09
当我输入abc的值之后,函数会随机从abc当中找出随机的两个数来进行if语句的比较(这是第一个问题);
...

就是我输入三个数的值以后,随机挑选出来两个数进行相加,与剩下的第三个数比较。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 10:15:47 From FishC Mobile | 显示全部楼层
华文杉 发表于 2021-5-28 10:05
就是我输入三个数的值以后,随机挑选出来两个数进行相加,与剩下的第三个数比较。

然后呢,a+b>c就能确定三角形??
不还是要用到三边,至于哪边是 a哪边是b
有必要区分吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 10:25:38 | 显示全部楼层
wp231957 发表于 2021-5-28 10:15
然后呢,a+b>c就能确定三角形??
不还是要用到三边,至于哪边是 a哪边是b
有必要区分吗

没有啊,只要任意两边之和大于第三边就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-5-28 10:44:00 From FishC Mobile | 显示全部楼层
华文杉 发表于 2021-5-28 10:25
没有啊,只要任意两边之和大于第三边就可以了

你也说是任意两边,不是随意两边
比如我随便选两边8 +  2  >3   但是却无法构成
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 11:42:08 | 显示全部楼层
wp231957 发表于 2021-5-28 10:44
你也说是任意两边,不是随意两边
比如我随便选两边8 +  2  >3   但是却无法构成

对呀,那就不是三角形,就输出:These sides do not correspond to a valid triangle
然后就开始下一次输入了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-5-28 11:42:39 | 显示全部楼层
wp231957 发表于 2021-5-28 10:44
你也说是任意两边,不是随意两边
比如我随便选两边8 +  2  >3   但是却无法构成

不一定非得是要三角形
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-14 14:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表