【C/PTA】选择结构进阶练习

简介: 【C/PTA】选择结构进阶练习

本文结合PTA专项练习带领读者掌握选择结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。


7-1 选择-星期

日历是一种日常使用的出版物,用于记载日期等相关信息。请问经常使用日历的你:今天是星期五,N天后是星期几。

输入格式:

输入一个整数N,表示N天后。(0<N<100000)

输出格式:

输出N天后是星期几。

输入样例1:

8

输出样例1:

Saturday

输入样例2:

51

输出样例2:

Sunday
#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  n=n%7;
  switch (n) {
    case 1:
      printf("Saturday");
      break;
    case 2:
      printf("Sunday");
      break;
    case 3:
      printf("Monday");
      break;
    case 4:
      printf("Tuesday");
      break;
    case 5:
      printf("Wednesday");
      break;
    case 6:
      printf("Thursday");
        break;
    case 0:
      printf("Friday");
  }
}

7-2 21选择-我们是冠军

学校举办了新一届的校运会。你作为 100m 赛跑和跳远的裁判,需要将冠亚季军的成绩按从高到低排序。注意赛跑的成绩是秒而跳远的成绩是米。

输入格式:

输入共两行。

第一行包含一个整数,表示成绩类型,0 表示赛跑成绩,1 表示跳远成绩。

第二行包含三个实数,表示三个人的成绩,单位由成绩类型决定,保证输入数据保留小数点后两位。

输出格式:

输出共一行,按成绩从高到低依次输出,保留小数点后两位。

输入样例:

0
10.00 12.91 9.83

输出样例:

9.83 10.00 12.91
#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  double a,b,c;
  scanf("%lf%lf%lf",&a,&b,&c);
  if(a<b)
  {
    double t;
    t=b;
    b=a;
    a=t;
  }
  if(a<c)
  {
    double s;
    s=c;
    c=a;
    a=s;
  }
  if(b>c)
  {
    double i;
    i=c;
    c=b;
    b=i;
  }     //经过三次排序使得a>c>b
  switch (n) {
    case 1:
      printf("%.2f %.2f %.2f",a,c,b);
      break;
    case 0:
      printf("%.2f %.2f %.2f",b,c,a);
  }
}

7-3 21选择-盘闰年

闰年要比平年多一天。sxtc 不喜欢数字 4,所以他认为数位中含有数字 4 的年份干干巴巴麻麻赖赖一点都不圆润,需要盘一下。比如“2004”虽然是闰年但是需要盘一下。希望你在判断闰年的基础上,判断一下这个闰年是不是需要盘一下。

输入格式:

输入仅一行,包含一个四位正整数 n (1000 ≤ n ≤ 9999)。

输出格式:

输出仅一行,如果不是闰年输出 0;如果是闰年且不需要盘则输出 1;如果是闰年且需要盘一下则输出“panta!”。

输入样例:

2004

输出样例:

panta!
#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  if((n%4==0&&n%100!=0)||n%400==0)
  {
    if(n%10==4||n/10%10==4||n/100%10==4||n/1000==4)
    {
      printf("panta!");
    }
    else
    printf("1");
  }
  else
  printf("0");
}

7-4 选择-合法日期

判断一个日期是否合法。

输入格式:

输入格式:YYYY/MM/DD(分别表示年、月、日,其中1000<=YYYY<=3000),如1972/02/12。

输出格式:

若该日期合法,输出“Yes”,否则输出“No”(输出不带引号)。

输入样例:

1900/08/99

输出样例:

No
#include <stdio.h>
int main() {
    int year, month, day;
    scanf("%d/%d/%d",&year,&month,&day);
    if (year<1000||year>3000||month<1||month>12)
    {
      printf("No"); // 年份或月份不合法
      return 0;
    }
  int da[]={31,28,31,30,31,30,31,31,30,31,30,31};
    if ((year%4==0&&year%100!=0)||year%400==0) {
        da[1]=29; // 闰年2月有29天
    }
    if (day<1||day>da[month-1]) 
    {
      printf("No"); // 日期不合法
    } 
    else 
    {
      printf("Yes"); // 合法日期
    }
}

7-1 选择-奇数平方和

输入五个数,判断其奇偶性,并分别计算奇数的平方和和偶数的平方和。

输入格式:

输入五个整数a,b,c,d,e(0<a,b,c,d,e<1000)。

输出格式:

输出两行,第一行为奇数的平方和,第二行为偶数的平方和。如果不存在奇数,则在第一行输出“No Odd Number”,如果不存在偶数,则在第二行输出“No Even Number”。(输出不包括引号)。

输入样例1:

1 2 3 4 5

输出样例1:

35

20

输入样例2:

1 3 5 7 9

输出样例2:

165

No Even Number

#include <stdio.h>
int main()
{
  int a[5];
  for(int i=0;i<5;i++)
  {
    scanf("%d",&a[i]);
  }
  int sum=0,zh=0,c1=0,c2=0;
  for(int i=0;i<5;i++)
  {
    if(a[i]%2!=0)
    {
      sum=sum+a[i]*a[i];
      c1++;
    }
    else
    {
      zh=zh+a[i]*a[i];
      c2++;
    }
  }
  if(c1==0)
  printf("No Odd Number\n");
  else
  printf("%d\n",sum);
  if(c2==0)
  printf("No Even Number\n");
  else
  printf("%d",zh);
}

7-2 选择-外卖

yz大佬中午点了份心仪已久的外卖。但是他如果看到舍友点的外卖的美味值比他多,他会很不开心,所以他会再点一份一样的外卖,如果两份加起来还不够,他会点第三份…直到超过他的舍友。你知道他点了多少份外卖吗?

输入格式:

两个实数 x,y (float范围内) 代表yz大佬和他舍友的外卖美味值。

输出格式:

yz大佬购买的外卖数量。

特别的,如果yz大佬没法超过他的舍友,请输出 “O/”

输入样例1:

1.0 0.5

输出样例1:

1

输入样例2:

0 0

输出样例2:

\^O^/
#include <stdio.h>
int main()
{
    double a,b;
    scanf("%lf %lf",&a,&b);
    int c;
    if(a<=0 && b>=a)
    {
        printf("\\^O^/");
    }
    else if(a>=b)
    {
        printf("1");
    }
    else
    {
        c=b/a;
        if(c==b/a)
        {
            printf("%d",c);
        }
        else
        {
             printf("%d",c+1);
        }
    }
    return 0;
}

7-3 选择-糖果

桌子上有1堆糖果,一共有n颗,两人轮流取糖果。规定每次最少拿1颗,最多拿m颗,最后拿完的人获胜。(两个人都很聪明,都懂得使用最优策略)

输入格式:

输入两个整数n,m(0<m,n<10000000)。

输出格式:

先拿的人获胜输出"First win",否则输出"Second win"。

输入样例1:

7 5

输出样例1:

First win

输入样例2:

6 5

输出样例2:

Second win

注:本题可了解巴什博弈相关知识

#include <stdio.h>
int main()
{
  int n,m;
  scanf("%d%d",&n,&m);
  if(n%(m+1)==0)
  printf("Second win");
  else
  printf("First win");
}

7-4 C程序设计 实验2-2-2成绩转换(switch)

用switch语句编程,根据输入的百分制成绩score(整数),转换成相应的五分制成绩grade后输出。

当 90≤ score≤100时, grade=A ;

当80≤ score<90时,grade=B;

当70≤ score<80时, grade=C;

当60≤ score<70时,grade=D;

当0≤ score<60时,grade=E。

如果输入成绩 score<0或 score>100,则输出“Input error!”。

输入格式:

输入一个百分制成绩(整数)。

输出格式:

输出对应等级。输入成绩不合理时,输出提示信息“Input error!”。

输入样例:

85

输出样例:

B

输入样例:

120

输出样例:

Input error!

#include <stdio.h>
int main()
{
  int n;
  scanf("%d",&n);
  switch(n/10)
  {
  case 10:
  case 9:
    printf("A");
    break;
  case 8:
    printf("B");
    break;  
  case 7:
    printf("C");
    break;
  case 6:
    printf("D");
    break;
  case 5:
  case 4:
    case 3:
    case 2:
    case 1:
    case 0:
    printf("E");
    break;  
  default:
    printf("Input error!");
        break;
  }
}

7-5 选择-计算器2

编写四则运算计算器。输入格式为:data1 op data2,运算符和操作数之间用一个空格隔开,其中,整型变量 data1 和 data2 为参加运算的两个操作数,op为算术运算符(值为+、-、*、/、%)。

输入格式:

输入两个整数a和b(0<=a,b<=1000)和一个运算符op,形式如“a + b”,中间用一个空格隔开。

输出格式:

当运算符为+、-、*、/(浮点数除法,结果保留两位小数)、%时,在一行输出相应的运算结果。若输入是非法符号(即除了题中五种运算符以外的其他符号)或者无意义的运算则输出“Error”。

输入样例1:

3000 + 2000

输出样例1:

5000

输入样例2:

10 / 3

输出样例2:

3.33

#include <stdio.h>
int main()
{
  int a,b;
  char c,d,e;
  scanf("%d%c%c%c%d",&a,&c,&d,&e,&b);
  switch(d)
  {
    case '+':
      printf("%d",a+b);
      break;
    case '-':
      printf("%d",a-b);
            break;
    case '*':
      printf("%d",a*b);
            break;
    case '/':
      if(b!=0){
      printf("%.2f",(double)a/b);
      break;
      }
      else
            {
            printf("Error");
            break;
            }
    case '%':
      if(b!=0)
      {
      printf("%d",a%b);
      break;
      }
      else
            {
        printf("Error");
        break;
            }
        default:
            printf("Error");
            break;
  }
}

7-6 选择-我是特种兵

在《我是特种兵》里面,特种兵个个是神枪手。现在要给他们增加难度进行考察,在同一瞬间要射中两个目标。据调查双手同时开枪最佳角度是双手成90度,在这里认为如果双手没成90度射击将无法同时击中目标。现在在一平面内,给出特种兵坐标,和两个目标的坐标。判断特种兵能否在考察中同时射中目标。

输入格式:

输入包含6个整数x1,y1,x2,y2,x3,y3。分别为特种兵和两个目标的坐标。

输出格式:

能同时射中两个目标输出yes,否则输出no。

输入样例1:

0 0 1 0 0 1

输出样例1:

yes

输入样例2:

0 0 1 1 0 1

输出样例2:

no

#include <stdio.h>
#include <math.h>
int main() {
    int x1, y1, x2, y2, x3, y3;
    scanf("%d%d%d%d%d%d", &x1, &y1, &x2, &y2, &x3, &y3);
    double t = ((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1) + (x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1) - (x3 - x2) * (x3 - x2) - (y3 - y2) * (y3 - y2));
    double s = 2 * sqrt((x2 - x1) * (x2 - x1) + (y2 - y1) * (y2 - y1)) * sqrt((x3 - x1) * (x3 - x1) + (y3 - y1) * (y3 - y1));
    if (t / s == 0) {
        printf("yes");
    } else {
        printf("no");
    }
    return 0;
}

7-7 选择-奖学金

某校的惯例是在每学期的期末考试之后发放奖学金。发放的奖学金共有五种,获取的条件各自不同:

院士奖学金,每人8000元,期末平均成绩高于80分(>80),并且在本学期内发表1篇或1篇以上论文的学生均可获得;

五四奖学金,每人4000元,期末平均成绩高于85分(>85),并且班级评议成绩高于80分(>80)的学生均可获得;

成绩优秀奖,每人2000元,期末平均成绩高于90分(>90)的学生均可获得;

班级贡献奖,每人850元,班级评议成绩高于80分(>80)的学生干部均可获得;

现要求根据每个学生的情况输出他所获得的奖学金。

输入格式:

输入包括5个int型整数,分别表示每个学生的学号、期末平均成绩、班级评议成绩、是否为班级干部(1 代表是;0代表不是),发表的论文数。

输出格式:

输出仅有1行,为士每个学生获得的奖学金。

输入样例:

1 100 100 1 10

输出样例:

14850

#include <stdio.h>
int main()
{
  int a,b,c,d,e;
  scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
  int sum=0;
  if(c>80&&d==1)
  {
    sum+=850;
  }
  if(b>90)
  {
    sum+=2000;
  }
  if(b>85&&c>80)
  {
      sum+=4000;
  }
  if(b>80&&e>=1)
  {
    sum+=8000;
  }
  printf("%d",sum);
}
目录
相关文章
|
7月前
|
机器学习/深度学习 人工智能 C语言
【C/PTA】循环结构进阶练习(三)
【C/PTA】循环结构进阶练习(三)
385 0
|
7月前
|
程序员 C语言
C语言程序设计——循环语句
C语言程序设计——循环语句
|
7月前
|
机器学习/深度学习 C语言
【C/PTA】循环结构专项练习(选择+填空)
【C/PTA】循环结构专项练习(选择+填空)
185 0
|
7月前
【C/PTA】选择结构进阶练习
【C/PTA】选择结构进阶练习
158 0
|
7月前
|
机器学习/深度学习
【C/PTA】循环结构进阶练习(一)
【C/PTA】循环结构进阶练习(一)
320 0
|
7月前
【C/PTA】循环结构进阶练习(二)
【C/PTA】循环结构进阶练习(二)
173 0
|
7月前
|
人工智能
【C/PTA】循环结构专项练习(编程)
【C/PTA】循环结构专项练习(编程)
119 0
|
存储 C语言
C语言 每日一题 PTA 11.7 day13
C语言 每日一题 PTA 11.7 day13
79 0
|
测试技术 C语言
C语言 每日一题 PTA 11.6 day12
C语言 每日一题 PTA 11.6 day12
132 0
|
Serverless C语言
C语言 每日一题 PTA 11.2 Day11
C语言 每日一题 PTA 11.2 Day11
70 0