【PTA-C语言】实验二-选择结构

  • 如果代码存在问题,麻烦大家指正 ~ ~
  • 有帮助麻烦点个赞 ~ ~

    实验二-选择结构

    • 7-1 计算分段函数[2](分数 10)
    • 7-2 三天打鱼两天晒网(分数 10)
    • 7-3 计算火车运行时间(分数 10)
    • 7-4 两个数的简单计算器(分数 10)
    • 7-5 判断输入的字符是哪种类型(分数 10)
    • 7-6 新年倒计时(分数 10)
    • 7-7 计算运费(分数 10)
    • 7-8 谁能进图书馆(分数 10)

7-1 计算分段函数[2](分数 10)

作者 陈建海
单位 浙江大学

本题目要求计算下列分段函数f(x)的值:

https://images.ptausercontent.com/2

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

输入格式:
输入在一行中给出实数x。

输出格式:
在一行中按“f(x) = result”的格式输出,其中x与result都保留两位小数。

输入样例1:

10

输出样例1:

f(10.00) = 3.16

输入样例2:

-0.5

输出样例2:

f(-0.50) = -2.75

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    double x, y;
    scanf("%lf", &x);
    if(x>=0)
        y=sqrt(x);
    else
        y=(x+1)*(x+1)+2.0*x+1.0/x;
    printf("f(%.2f) = %.2f", x, y);
    return 0;
}

7-2 三天打鱼两天晒网(分数 10)

作者 C课程组
单位 浙江大学

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

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

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

输入样例1:

103

输出样例1:

Fishing in day 103

输入样例2:

34

输出样例2:

Drying in day 34

鸣谢内蒙古师范大学张志平老师补充数据

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
main()
{
    int a, N;
    scanf("%d", &N);
    a=N%5;
    if(a==1||a==2||a==3) 
        printf("Fishing in day %d", N);
    else
        printf("Drying in day %d", N);
    return 0;
}

7-3 计算火车运行时间(分数 10)

作者 沈睿
单位 浙江大学

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。

输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。

输入样例:

1201 1530

输出样例:

03:29

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
void main()
{
    unsigned int a, b, c, d, e;
    scanf("%d %d", &a, &b);
    c=(b/100*60+b%100)-(a/100*60+a%100);
    d=c/60;
    e=c-d*60;
    printf("%02d:%02d", d, e);
}

7-4 两个数的简单计算器(分数 10)

作者 沈睿
单位 浙江大学

本题要求编写一个简单计算器程序,可根据输入的运算符,对2个整数进行加、减、乘、除或求余运算。题目保证输入和输出均不超过整型范围。

输入格式:
输入在一行中依次输入操作数1、运算符、操作数2,其间以1个空格分隔。操作数的数据类型为整型,且保证除法和求余的分母非零。

输出格式:
当运算符为+-*/%时,在一行输出相应的运算结果。若输入是非法符号(即除了加、减、乘、除和求余五种运算符以外的其他符号)则输出ERROR

输入样例1:

-7 / 2

输出样例1:

-3

输入样例2:

3 & 6

输出样例2:

ERROR

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    int a, b;
    char c;
    scanf("%d %c %d", &a, &c, &b);
    if(c=='+')
        printf("%d", a+b);
    else if(c=='-')
        printf("%d", a-b);
    else if(c=='*')
        printf("%d", a*b);
    else if(c=='/')
        printf("%d", a/b);
    else if(c=='%')
        printf("%d", a%b);
    else
        printf("ERROR");
    return 0;
}

7-5 判断输入的字符是哪种类型(分数 10)

作者 毛薇
单位 武汉理工大学

通过键盘输入一个字符,编程判断并输出用户输入的是什么类型的字符。

输入格式:
输入一个字符。

输出格式:
在一行中输出该字符是哪种类型的字符。

若用户输入字符为’0’~‘9’之一,输出This is a digit.
若用户输入字符在’A’~‘Z’之一,输出This is a capital letter.
若用户输入字符在’a’~'z’之一,输出This is a small letter.
其他情况,输出Other character.
输入样例:

6

输出样例:

This is a digit.

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    char A;
    scanf("%c", &A);
    if(A>='a' && A<='z')
        printf("This is a small letter.");
    else if(A>='0'&&A<='9')
        printf("This is a digit.");
    else if(A>='A'&&A<='Z')
        printf("This is a capital letter.");
    else
        printf("Other character.");
    return 0;
}

7-6 新年倒计时(分数 10)

作者 孙骏
单位 武汉理工大学

学院计划在新年举行联欢晚会,要求每个班级都要准备节目。为了让班上同学有紧迫感,班长希望编写一个倒计时程序,输入日期,显示距离下一个新年的天数days。例:输入“2021-11-11”,显示“还有51天到新年”。

输入格式:
输入以"-"分隔的当前日期。

输出格式:
以格式“还有days天到新年”输出还有多少天到新年。无多余空格及其他字符。

输入样例:

2021-11-11

输出样例:

还有51天到新年

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
 
int main()
{
    int year, month, day, two = 28, res;
    scanf("%d-%d-%d", &year, &month, &day);
    if ((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0)
        two = 29;
    int tmp = 13 - month;
    switch (tmp) {
        case 1:
            res = 32 - day;
            break;
        case 2:
            res = 62 - day;
            break;
        case 3:
            res = 93 - day;
            break;
        case 4:
            res = 123 - day;
            break;
        case 5:
            res = 154 - day;
            break;
        case 6:
            res = 185 - day;
            break;
        case 7:
            res = 215 - day;
            break;
        case 8:
            res = 246 - day;
            break;
        case 9:
            res = 276 - day;
            break;
        case 10:
            res = 307 - day;
            break;
        case 11:
            res = 307 + two - day;
            break;
        case 12:
            res = 338 + two - day;
            break;
        default:
            printf("ERROR!");
            return 0;
    }
    printf("还有%d天到新年", res);
    return 0;
}

7-7 计算运费(分数 10)

作者 毛薇
单位 武汉理工大学

运输公司对用户计算运费。路程(s)越远,每千米运费就越低。标准如下:

  • s<250km ,没有折扣;
  • 250km≤s<500km, 2%的折扣;
  • 500km≤s<1000km, 5%的折扣;
  • 1000km≤s<2000km,8%的折扣;
  • 2000km≤s<3000km,10%的折扣;
  • 3000km≤s,15%的折扣。

设每千米每吨货物的基本运费为p,货物重为 w,距离为s,折扣为d,则总运费f的计算公式为:
f=p×w×s×(1-d)

输入格式:
在一行中以小数形式输入基本运费、货重和距离,以空格作为分隔符。

输出格式:
在一行输出计算出来的运费,精确到小数点后2位的值。

输入样例:
在这里给出一组输入。例如:

100 20 300

输出样例:
在这里给出相应的输出。例如:

freight=588000.00

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include
int main()
{
    double p, w, s, d, f;
    scanf("%lf %lf %lf", &p, &w, &s);
    if(s<250) {
        d=0;
        f=p*w*s*(1-d);
        printf("freight=%.2f", f);
    } else if(250<=s&&s<500) {
        d=0.02;
        f=p*w*s*(1-d);
        printf("freight=%.2f", f);
    } else if(500<=s&&s<1000) {
         d=0.05;
         f=p*w*s*(1-d);
         printf("freight=%.2f", f);
    } else if(1000<=s&&s<2000) {
         d=0.08;
         f=p*w*s*(1-d);
         printf("freight=%.2f", f);
    } else if(2000<=s&&s<3000) {
        d=0.1;
        f=p*w*s*(1-d);
        printf("freight=%.2f", f);
    } else {
        d=0.15;
        f=p*w*s*(1-d);
        printf("freight=%.2f", f);
    }
    return 0;
}

7-8 谁能进图书馆(分数 10)

作者 陈越
单位 浙江大学

为了保障安静的阅读环境,有些公共图书馆对儿童入馆做出了限制。例如“12 岁以下儿童禁止入馆,除非有 18 岁以上(包括 18 岁)的成人陪同”。现在有两位小/大朋友跑来问你,他们能不能进去?请你写个程序自动给他们一个回复。

输入格式:
输入在一行中给出 4 个整数:

禁入年龄线 陪同年龄线 询问者1的年龄 询问者2的年龄

这里的禁入年龄线是指严格小于该年龄的儿童禁止入馆;陪同年龄线是指大于等于该年龄的人士可以陪同儿童入馆。默认两个询问者的编号依次分别为 12;年龄和年龄线都是 [1, 200] 区间内的整数,并且保证 陪同年龄线 严格大于 禁入年龄线

输出格式:
在一行中输出对两位询问者的回答,如果可以进就输出 年龄-Y,否则输出 年龄-N,中间空 1 格,行首尾不得有多余空格。

在第二行根据两个询问者的情况输出一句话:

  • 如果两个人必须一起进,则输出 qing X zhao gu hao Y,其中 X 是陪同人的编号, Y 是小孩子的编号;
  • 如果两个人都可以进但不是必须一起的,则输出 huan ying ru guan
  • 如果两个人都进不去,则输出 zhang da zai lai ba
  • 如果一个人能进一个不能,则输出 X: huan ying ru guan,其中 X 是可以入馆的那个人的编号。

输入样例 1:

12 18 18 8

输出样例 1:

18-Y 8-Y
qing 1 zhao gu hao 2

输入样例 2:

12 18 10 15

输出样例 2:

10-N 15-Y
2: huan ying ru guan

代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB

参考代码

#include 
int main()
{
    int ban = 0, company = 0, a = 0, b = 0;
    scanf("%d %d %d %d", &ban, &company, &a, &b);
    if (a >= ban && b >= ban) {
        printf("%d-Y %d-Y\n", a, b);
        printf("huan ying ru guan");
    } else if ((a >= ban && b < ban) && a < company) {
        printf("%d-Y %d-N\n", a, b);
        printf("1: huan ying ru guan");
    } else if ((a < ban && b >= ban) && b < company) {
        printf("%d-N %d-Y\n", a, b);
        printf("2: huan ying ru guan");
    } else if ((a >= ban && b < ban) && a >= company) {
        printf("%d-Y %d-Y\n", a, b);
        printf("qing 1 zhao gu hao 2");
    } else  if ((a < ban && b >= ban) && b >= company) {
        printf("%d-Y %d-Y\n", a, b);
        printf("qing 2 zhao gu hao 1");
    } else if (a < ban && b < ban) {
        printf("%d-N %d-N\n", a, b);
        printf("zhang da zai lai ba");
    }
    return 0;
}

你可能感兴趣的:(数据结构与算法,PTA,c语言,算法,PTA,开发语言)