C语言构造三角形问题(附带源码)

这是一个C语言编程实例:已知任意三条线段的长度(均为正整数),判断三条线段是否能构成一个三角形;若能构成三角形,判断所构成三角形的形状。

问题分析

输入三条线段的长度,依次代入变量 a、b、c。如果a+b<=ca+c<=bb+c<=a(即任意两条线段长度的和小于或等于第三条线段长度),则这三条线段不能构成三角形。

否则判断所构成三角形的形状:
  • 如果 a=b=c 则构成等边三角形。
  • 如果 a=b 或 b=c 或 a=c 则构成等腰三角形。
  • 如果 a2+b2=c或 a2+c2=b或 c2+b2=a则构成直角三角形。

算法描述

1) 定义浮点型变量 a、b、c;
2) 用 scanf( ) 从键盘输入三个正数给 a、b、c;
3) 如果a+b<=c或a+c<=b或b+c<=a成立,则提示不能构成三角形;
   否则
       如果a=b并且b=c成立,则提示构成等边三角形;
       否则
           如果a2+b2=c2a2+c2=b2c2+b2=a2成立,
               如果a=b或b=c或a=c成立,则提示构成等腰直角三角形;
               否则,提示构成直角三角形;
           否则
               如果a=b或b=c或a=c成立,则提示构成等腰三角形;
               否则,提示构成普通三角形;
4) 结束。

代码清单 1:判断三条线段能否构成三角形
#include <stdio.h>
#include <stdlib.h>
int main( )
{
    float a,b,c;
    printf("分别输入三条线段的长度(用空格分隔):\n");
    scanf("%f %f %f",&a,&b,&c);
    if(a + b <= c || a + c <= b || b + c <= a)
        printf("不能构成三角形\n");
    else
        if((a == b)&&(b == c))
            printf("构成等边三角形\n");
        else
            if((a * a + b * b == c * c)||(a * a + c * c == b * b)||(b * b + c * c == a * a))
                  if((a == b)||(b == c)||(a == c))
                      printf("构成等腰直角三角形\n");
                  else
                      printf("构成直角三角形\n");
            else
                  if((a == b)||(b == c)||(a == c))
                      printf("构成等腰三角形\n");
                  else
                      printf("构成普通三角形\n");
    system("pause");
    return 0;
}

运行结果为:

分别输入三条线段的长度(用空格分隔):
56 85 37
构成普通三角形


在上面的 C 程序中,因为 if-else 本身就是一条语句,所以其内层的 if-else 语句外面的{ }括号可以不写。

层级嵌套语句的缩进:为了使得程序具有更好的可读性,在书写程序时,通常使用键盘上面的 Tab 键在内层语句前面留白(添加空格),使得处在同一层次的语句左对齐,并且相对上一层的语句要向右缩进一个 Tab 位(四个半角空格)。

天猫超市双 11 推出以下优惠促销活动:
  • 购物满 50 元,打 9 折;
  • 购物满 100 元,打 8 折;
  • 购物满 200 元,打 7 折;
  • 购物满 300 元,打 6 折;

编程计算当购物满 s 元时,实际付费多少?

问题分析

使用 if…else… 语句的嵌套,根据优惠活动规则设置不同判断条件,以不同的折扣率计算实际付款额。

算法描述

1) 定义浮点型变量 s 和 f,分别存放消费额和实际付款额;
2) 用 scanf( ) 从键盘输入一个浮点数给 s;
3)如果 s<50,则不打折,实际付款额 f 等于 s;
  否则,
      如果 s<100,则实际付款额 f 等于 s*0.9;
      否则,
          如果 s<200,则实际付款额 f 等于 s*0.8;
          否则,
              如果 s<300,则实际付款额 f 等于 s*0.7;
              否则,s 一定超过 300 元,则实际付款额 f 等于 s*0.6;
4)用 printf( ) 输出实际付款额 f。

代码清单 2:根据优惠规则计算实际付款额
#include <stdio.h>
#include <stdlib.h>
int main( )
{
    float s,f;
    printf("输入消费额:\n");
    scanf("%f",&s);
    if (s<50)
        f = s;
    else
        if (s<100)
            f = s*0.9;            //9折
        else
            if (s<200)
                f = s*0.8;        //8折
            else
                if (s<300)
                    f = s*0.7;    //7折
                else
                    f = s*0.6;    //6折
    printf("实际付款额为:%.2f元\n",f);
    system("pause");
    return 0;
}

运行结果为:

输入消费额:
623
实际付款额为:373.80元