• 集美大学 - 2840 - 实验3


    实验3-1-if-else 求一元二次方程的根

    本题目要求一元二次方程 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0的根,结果保留2位小数。

    输入格式:
    输入在一行中给出3个浮点系数a、b、c,中间用空格分开。

    输出格式:
    根据系数情况,输出不同结果:

    1)如果方程有两个不相等的实数根,则每行输出一个根,先大后小;

    2)如果方程有两个不相等复数根,则每行按照格式“实部+虚部i”输出一个根,先输出虚部为正的,后输出虚部为负的;

    3)如果方程只有一个根,则直接输出此根;

    4)如果系数都为0,则输出"Zero Equation";

    5)如果a和b为0,c不为0,则输出"Not An Equation"。

    输入样例1:

    2.1 8.9 3.5
    
    • 1

    输出样例1:

    -0.44
    -3.80
    
    • 1
    • 2

    输入样例2:

    1 2 3
    
    • 1

    输出样例2:

    -1.00+1.41i
    -1.00-1.41i
    
    • 1
    • 2

    输入样例3:

    0 2 4
    
    • 1

    输出样例3:

    -2.00
    
    • 1

    输入样例4:

    0 0 0
    
    • 1

    输出样例4:

    Zero Equation
    
    • 1

    输入样例5:

    0 0 1
    
    • 1

    输出样例5:

    Not An Equation
    
    • 1
    #include
    #include
    
    int main() {
        double a, b, c;
        scanf("%lf %lf %lf", &a, &b, &c);
        if (a == 0 && b == 0 && c == 0)printf("Zero Equation");
        else if (a == 0 && b == 0 && c != 0)printf("Not An Equation");
        else if (a == 0)printf("%.2f", -c / b);
        else {
            if (b * b - 4 * a * c > 0) {
                double x1, x2;
                x1 = (-b + sqrt(b * b - 4 * a * c)) / (2 * a);
                x2 = (-b - sqrt(b * b - 4 * a * c)) / (2 * a);
                // 其实这个if有点多余
                /*if (x1 > x2) printf("%.2f\n%.2f", x1, x2);
                else printf("%.2f\n%.2f", x2, x1);*/
                printf("%.2f\n%.2f", x1, x2);
            } else if (b * b - 4 * a * c < 0) {
                double m;
                m = sqrt(-b * b + 4 * a * c) / (2 * a);
                if (b != 0)printf("%.2f+%.2fi\n%.2f-%.2fi", -b / (2 * a), m, -b / (2 * a), m);
                else printf("0.00+%.2fi\n0.00-%.2fi", m, m);
            } else if (b * b - 4 * a * c == 0) {
                printf("%.2f", -b / (2 * a), -b / (2 * a));
            }
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29

    题解:在初中时,我相信你们老师一定说过,在见到 a x 2 + b x + c = 0 ax^2+bx+c=0 ax2+bx+c=0时不一定就是代表一元二次方程,在这里也是,所以我们需要讨论a=0和a!=0两种大情况。

    • a=0:就是 b x + c = 0 bx+c=0 bx+c=0,当b=0时,无解,当b!=0时, x = − c b x=-\frac{c}{b} x=bc
    • a!=0: Δ = b 2 − 4 a c > 0 Δ=b^2-4ac>0 Δ=b24ac>0时, x 1 = − b + b 2 − 4 a c 2 a x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} x1=2ab+b24ac x 1 = − b − b 2 − 4 a c 2 a x_1=\frac{-b-\sqrt{b^2-4ac}}{2a} x1=2abb24ac Δ = b 2 − 4 a c = 0 Δ=b^2-4ac=0 Δ=b24ac=0时, x 1 , 2 = − b 2 a x_{1,2}=\frac{-b}{2a} x1,2=2ab Δ = b 2 − 4 a c < 0 Δ=b^2-4ac<0 Δ=b24ac<0时, x 1 = − b + − b 2 + 4 a c i 2 a x_1=\frac{-b+\sqrt{-b^2+4ac}i}{2a} x1=2ab+b2+4ac i x 1 = − b − − b 2 + 4 a c i 2 a x_1=\frac{-b-\sqrt{-b^2+4ac}i}{2a} x1=2abb2+4ac i

    说明:这题有个坑点,就是当计算结果是纯虚根时,我们希望输出的是类似于0.00+2.00i这样子的,但是如果直接是%.2f,就会出现-0.00+2.00i,所以我们需要进行一次特判。

    实验3-2 -if-else 计算符号函数的值

    对于任一整数n,符号函数 s i g n ( n ) sign(n) sign(n)的定义如下:

    sig ⁡ n ( n ) = { − 1 ( n < 0 ) 0 ( n = 0 ) 1 ( n > 0 ) \operatorname{sig} n(n)=\left\{

    1(n<0)0(n=0)1(n>0)" role="presentation">1(n<0)0(n=0)1(n>0)
    \right. sign(n)= 101(n<0)(n=0)(n>0)

    请编写程序计算该函数对任一输入整数的值。

    输入格式:
    输入在一行中给出整数n。

    输出格式:
    在一行中按照格式“sign(n) = 函数值”输出该整数n对应的函数值。

    输入样例1:

    10
    
    • 1

    输出样例1:

    sign(10) = 1
    
    • 1

    输入样例2:

    0
    
    • 1

    输出样例2:

    sign(0) = 0
    
    • 1

    输入样例3:

    -98
    
    • 1

    输出样例3:

    sign(-98) = -1
    
    • 1
    #include
    
    int main() {
        int n;
        scanf("%d", &n);
        if (n < 0) {
            printf("sign(%d) = -1", n);
        } else {
            if (n > 0) {
                printf("sign(%d) = 1", n);
            } else {
                printf("sign(0) = 0", n);
            }
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    实验3-3-if-else 比较大小

    本题要求将输入的任意3个整数从小到大输出。

    输入格式:
    输入在一行中给出3个整数,其间以空格分隔。

    输出格式:
    在一行中将3个整数从小到大输出,其间以“->”相连。

    输入样例:

    4 2 8
    
    • 1

    输出样例:

    2->4->8
    
    • 1
    #include
    
    int main() {
        int a, b, c, m1, m2, m3;
        scanf("%d %d %d", &a, &b, &c);
        if (a > b && a > c) {
            if (b > c) m1 = a, m2 = b, m3 = c;
            else m1 = a, m2 = c, m3 = b;
        } else if (b > c && b > a) {
            if (c > a) m1 = b, m2 = c, m3 = a;
            else m1 = b, m2 = a, m3 = c;
        } else if (c > a && c > b) {
            if (a > b) m1 = c, m2 = a, m3 = b;
            else m1 = c, m2 = b, m3 = a;
        }
        printf("%d->%d->%d", m3, m2, m1);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    实验3-4 -if-else/for 统计字符

    本题要求编写程序,输入10个字符,统计其中英文字母、空格或回车、数字字符和其他字符的个数。

    输入格式:
    输入为10个字符。最后一个回车表示输入结束,不算在内。

    输出格式:
    在一行内按照

    letter = 英文字母个数, blank = 空格或回车个数, digit = 数字字符个数, other = 其他字符个数
    
    • 1

    的格式输出。

    输入样例:

    aZ &
    09 Az
    
    • 1
    • 2

    输出样例:

    letter = 4, blank = 3, digit = 2, other = 1
    
    • 1
    #include
    
    int main() {
        char s;
        int b = 0, d = 0, l = 0, o = 0;
    
        for (int i = 0; i < 10; i++) {
            s = getchar();
            if (s == ' ' || s == '\n') {
                b++;
            } else if (s >= '0' && s <= '9') {
                d++;
            } else if ((s >= 'a' && s <= 'z') || (s >= 'A' && s <= 'Z')) {
                l++;
            } else {
                o++;
            }
        }
        printf("letter = %d, blank = %d, digit = %d, other = %d", l, b, d, o);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    说明:函数getchar一次读取一个字符,是读取回车的。

    实验3-5 -switch 查询水果价格

    给定四种水果,分别是苹果(apple)、梨(pear)、桔子(orange)、葡萄(grape),单价分别对应为3.00元/公斤、2.50元/公斤、4.10元/公斤、10.20元/公斤。

    首先在屏幕上显示以下菜单:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    
    • 1
    • 2
    • 3
    • 4
    • 5

    用户可以输入编号1~4查询对应水果的单价。当连续查询次数超过5次时,程序应自动退出查询;不到5次而用户输入0即退出;输入其他编号,显示价格为0。

    输入格式:
    输入在一行中给出用户连续输入的若干个编号。

    输出格式:
    首先在屏幕上显示菜单。然后对应用户的每个输入,在一行中按格式“price = 价格”输出查询结果,其中价格保留两位小数。当用户连续查询次数超过5次、或主动输入0时,程序结束。

    输入样例1:

    3 -1 0 2
    
    • 1

    输出样例1:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    price = 4.10
    price = 0.00
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    输入样例2:

    1 2 3 3 4 4 5 6 7 8
    
    • 1

    输出样例2:

    [1] apple
    [2] pear
    [3] orange
    [4] grape
    [0] exit
    price = 3.00
    price = 2.50
    price = 4.10
    price = 4.10
    price = 10.20
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    #include
    
    int main() {
        printf("[1] apple\n[2] pear\n[3] orange\n[4] grape\n[0] exit\n");
        int cnt = 1;
        int x;
        scanf("%d", &x);
        while (x != 0 && cnt <= 5) {
            if (x == 1) printf("price = %.2f\n", 3.00);
            else if (x == 2)printf("price = %.2f\n", 2.50);
            else if (x == 3)printf("price = %.2f\n", 4.10);
            else if (x == 4)printf("price = %.2f\n", 10.20);
            else printf("price = %.2f\n", 0.00);
            cnt++;
            scanf("%d", &x);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    实验3-6-if-else 计算个人所得税

    假设个人所得税为:税率×(工资−1600)。请编写程序计算应缴的所得税,其中税率定义为:

    • 当工资不超过1600时,税率为0;
    • 当工资在区间(1600, 2500]时,税率为5%;
    • 当工资在区间(2500, 3500]时,税率为10%;
    • 当工资在区间(3500, 4500]时,税率为15%;
    • 当工资超过4500时,税率为20%。

    输入格式:
    输入在一行中给出非负工资。

    输出格式:
    在一行输出个人所得税,精确到小数点后2位。

    输入样例1:

    1600
    
    • 1

    输出样例1:

    0.00
    
    • 1

    输入样例2:

    1601
    
    • 1

    输出样例2:

    0.05
    
    • 1

    输入样例3:

    3000
    
    • 1

    输出样例3:

    140.00
    
    • 1

    输入样例4:

    4000
    
    • 1

    输出样例4:

    360.00
    
    • 1

    输入样例5:

    5000
    
    • 1

    输出样例5:

    680.00
    
    • 1
    #include
    
    int main() {
        double x;
        scanf("%lf", &x);
        double s;
        if (x <= 1600) s = 0;
        else if (x > 1600 && x <= 2500) s = 0.05 * (x - 1600);
        else if (x > 2500 && x <= 3500) s = 0.10 * (x - 1600);
        else if (x > 3500 && x <= 4500) s = 0.15 * (x - 1600);
        else if (x > 4500) s = 0.20 * (x - 1600);
        printf("%.2f", s);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    实验3-7 -switch/for 统计学生成绩

    本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:

    • 大于等于90分为A;
    • 小于90且大于等于80为B;
    • 小于80且大于等于70为C;
    • 小于70且大于等于60为D;
    • 小于60为E。

    输入格式:
    输入在第一行中给出一个正整数N(≤1000),即学生人数;第二行中给出N个学生的百分制成绩,其间以空格分隔。

    输出格式:
    在一行中输出A、B、C、D、E对应的五分制成绩的人数分布,数字间以空格分隔,行末不得有多余空格。

    输入样例:

    7
    77 54 92 73 60 65 69
    
    • 1
    • 2

    输出样例:

    1 0 2 3 1
    
    • 1
    #include
    
    int main() {
        int N;
        scanf("%d", &N);
        double x;
        scanf("%lf", &x);
        int cnt = 1;
        int A = 0, B = 0, C = 0, D = 0, E = 0;
        while (cnt <= N) {
            if (x >= 90) A++;
            else if (x >= 80 && x < 90) B++;
            else if (x >= 70 && x < 80) C++;
            else if (x >= 60 && x < 70) D++;
            else if (x < 60) E++;
            cnt++;
            if (cnt <= N)scanf("%lf", &x);
        }
        printf("%d %d %d %d %d", A, B, C, D, E);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    实验3-8 -if-else 输出三角形面积和周长

    本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式: a r e a = s ( s − a ) ( s − b ) ( s − c ) area=\sqrt{s(s-a)(s-b)(s-c)} area=s(sa)(sb)(sc) ,其中 s = a + b + c 2 s=\frac{a+b+c}{2} s=2a+b+c

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

    输出格式:
    如果输入的边能构成一个三角形,则在一行内,按照

    area = 面积; perimeter = 周长
    
    • 1

    的格式输出,保留两位小数。否则,输出

    These sides do not correspond to a valid triangle
    
    • 1

    输入样例1:

    5 5 3
    
    • 1

    输出样例1:

    area = 7.15; perimeter = 13.00
    
    • 1

    输入样例2:

    1 4 1
    
    • 1

    输出样例2:

    These sides do not correspond to a valid triangle
    
    • 1
    #include
    #include
    
    int main() {
        double a, b, c;
        scanf("%lf %lf %lf", &a, &b, &c);
        if (a + b > c && a + c > b && b + c > a) {
            double s;
            s = (a + b + c) / 2;
            double area, perimeter;
            area = sqrt(s * (s - a) * (s - b) * (s - c));
            perimeter = a + b + c;
            printf("area = %.2f; perimeter = %.2f", area, perimeter);
        }
        if (a + b <= c || a + c <= b || b + c <= a) {
            printf("These sides do not correspond to a valid triangle");
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    题解:对于输入的三个数字,我们需要首先判断能否构成三角形,也就是任意两边之和是否大于第三边。

    实验3-9-if-else 三天打鱼两天晒网

    中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

    输入格式:
    输入在一行中给出一个不超过1000的正整数N。

    输出格式:
    在一行中输出此人在第N天中是“Fishing”(即“打鱼”)还是“Drying”(即“晒网”),并且输出“in day N”。

    输入样例1:

    103
    
    • 1

    输出样例1:

    Fishing in day 103
    
    • 1

    输入样例2:

    34
    
    • 1

    输出样例2:

    Drying in day 34
    
    • 1
    #include
    
    int main() {
        int N;
        int a;
        scanf("%d", &N);
        a = N;
        a = a % 5;
        if (a == 0 || a == 4) printf("Drying in day %d", N);
        else {
            printf("Fishing in day %d", N);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    实验3-10-if-else 高速公路超速处罚

    按照规定,在高速公路上行使的机动车,达到或超出本车道限速的10%则处200元罚款;若达到或超出50%,就要吊销驾驶证。请编写程序根据车速和限速自动判别对该机动车的处理。

    输入格式:
    输入在一行中给出2个正整数,分别对应车速和限速,其间以空格分隔。

    输出格式:
    在一行中输出处理意见:若属于正常行驶,则输出“OK”;若应处罚款,则输出“Exceed x%. Ticket 200”;若应吊销驾驶证,则输出“Exceed x%. License Revoked”。其中x是超速的百分比,精确到整数。

    输入样例1:

    65 60
    
    • 1

    输出样例1:

    OK
    
    • 1

    输入样例2:

    110 100
    
    • 1

    输出样例2:

    Exceed 10%. Ticket 200
    
    • 1

    输入样例3:

    200 120
    
    • 1

    输出样例3:

    Exceed 67%. License Revoked
    
    • 1
    #include
    
    int main() {
        int a, b;
        int exceed;
        scanf("%d %d", &a, &b);
        exceed = (double) (a - b) / b * 100 + 0.5;
        if (exceed < 10) {
            printf("OK\n");
        } else if (exceed < 50) {
            printf("Exceed %d%%. Ticket 200\n", exceed);
        } else {
            printf("Exceed %d%%. License Revoked\n", exceed);
        }
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16

    说明:为什么要加0.5呢?double到int是强制类型转换,也就是说double的1.9强转成int后是1,而不是2,而我们习惯对带有小数的数字进行四舍五入操作。
    加0.5的妙处就在于可以实现强转的四舍五入,比如说1.1加0.5是1.6,强转后是1,1.6加0.5是2.1,强转后是2,实现了四舍五入。

    实验3-11-if-else 计算油费

    现在90号汽油6.95元/升、93号汽油7.44元/升、97号汽油7.93元/升。为吸引顾客,某自动加油站推出了“自助服务”和“协助服务”两个服务等级,分别可得到5%和3%的折扣。

    本题要求编写程序,根据输入顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助),计算并输出应付款。

    输入格式:
    输入在一行中给出两个整数和一个字符,分别表示顾客的加油量a,汽油品种b(90、93或97)和服务类型c(m - 自助,e - 协助)。

    输出格式:
    在一行中输出应付款额,保留小数点后2位。

    输入样例:

    40 97 m
    
    • 1

    输出样例:

    301.34
    
    • 1
    #include
    
    int main() {
        double a, b;
        char c;
        double y;
        scanf("%lf %lf %c", &a, &b, &c);
        if (c == 'm') {
            if (b == 90) y = 6.95 * a * 0.95;
            else if (b == 93) y = 7.44 * a * 0.95;
            else if (b == 97)y = 7.93 * a * 0.95;
        } else if (c == 'e') {
            if (b == 90) y = 6.95 * a * 0.97;
            else if (b == 93) y = 7.44 * a * 0.97;
            else if (b == 97)y = 7.93 * a * 0.97;
        }
        printf("%.2f", y);
        return 0;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
  • 相关阅读:
    Arc length
    基于微信小程序电影交流平台源码成品(微信小程序毕业设计)
    win7下从ruby源代码编译安装的方法
    python中class使用总结
    React技巧之打开文件输入框
    MongoDB数据接入实践
    DBCO-氨基 DBCO-NH2,DBCO-PEG-氨基 DBCO-PEG-NH2/Amine
    如何使用SQL系列 之 如何在SQL中使用日期和时间
    Swin Transformer网络模型
    快速采集微信联系人昵称列表并转发多条消息
  • 原文地址:https://blog.csdn.net/im34v/article/details/126550263