本文结合PTA专项练习带领读者掌握选择结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
7-1 选择-孔融让梨
孔融小时候聪明好学,才思敏捷,巧言妙答,大家都夸他是奇童。4岁时,他已能背诵许多诗赋,并且懂得礼节,父母亲非常喜爱他。
一日,父亲买了一些梨子,特地拣了一个最大的梨子给孔融,孔融摇摇头,却另拣了一个最小的梨子说:“我年纪最小,应该吃小的梨,你那个梨就给哥哥吧。”父亲听后十分惊喜。
输入格式:
在一行中给出两个不超过32767的正整数a,b,分别表示孔融父亲拿出的两个梨的质量。
输出格式:
输出孔融选择的梨的质量。
输入样例:文章来源:https://www.toymoban.com/news/detail-720079.html
3 4
输出样例:
3
#include <stdio.h>
int main()
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d",a<b?a:b);
}
7-2 选择-最大数
输入三个整数,输出其中最大的数。
输入格式:
输入三个整数,在 int 范围内。
输出格式:
输出其中最大的数。
输入样例:
23 78 32
输出样例:
78
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
printf("%d",a>(b>c?b:c)?a:(b>c?b:c));
}
7-3 选择-奇偶判断
给定一个整数,请你判断其奇偶性。如果是奇数输出YES,否则输出NO。
输入格式:
输入仅一行,包含一个整数a。
输出格式:
输出仅一行,为整数a的奇偶判断结果。
输入样例:
9
输出样例:
YES
#include <stdio.h>
int main()
{
int a;
scanf("%d",&a);
if(a%2!=0)
{
printf("YES");
}
else
printf("NO");
}
7-4 选择-ASCII值
从键盘输入一个字符,若输入的是数字字符则输出它的ASCII值,否则输出提示信息“input error”。
输入格式:
输入一个字符。
输出格式:
若输入的是数字字符则输出它的ASCII值,否则输出提示信息“input error”,输出不含引号。
输入样例1:
7
输出样例1:
55
输入样例2:
W
#include <stdio.h>
int main()
{
char c;
scanf("%c",&c);
if(c>='0'&&c<='9')
{
printf("%d",c);
}
else
printf("input error");
}
7-5 选择-闰年
判别用year表示的某一年是否闰年。
输入格式:
输入占一行,给出一个不大于32767的整数year。
输出格式:
输出占一行,如果该年是闰年,则输出YES,否则输出NO。
输入样例:
2021
输出样例:
NO
#include <stdio.h>
int main()
{
int year;
scanf("%d",&year);
if((year%4==0&&year%100!=0)||year%400==0)
{
printf("YES");
}
else
printf("NO");
}
7-6 选择 -排序
对两个实数按代数值从大到小排序。
输入格式:
一行中给出2个两个实数a,b。
输出格式:
将两个实数按从大到小输出,保留三位小数,两个实数间以空格隔开。
输入样例:
9.9 10.0
输出样例:
10.000 9.900
#include <stdio.h>
int main()
{
double a,b;
scanf("%lf%lf",&a,&b);
printf("%.3f %.3f",a>b?a:b,a<b?a:b);
}
7-7 选择-分段函数1
有一函数:
输入格式:
每组输入数据占一行,包含一个整数x(-32768<=x<181)。
输出格式:
每组输出数据占一行,输出y的值。
输入样例:
5
输出样例:
15
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
if(x>0)
printf("%d",x*x-10);
else if(x==0)
printf("0");
else
printf("%d",x+10);
}
7-8 选择-分段函数2
输入一个实数 x,按如下公式计算并输出y的值
输入格式:
输入一个实数 x
输出格式:
输出计算结果,要求结果保留两位小数。
输入样例1:
0.5
输出样例1:
0.50
输入样例2:
3
输出样例2:
4.58
#include <stdio.h>
#include <math.h>
int main()
{
double x;
scanf("%lf",&x);
if(x<1)
printf("%.2f",abs(x));
else if(x==1)
printf("3.00");
else
printf("%.2f",sqrt(x*x*x-2*x));
}
7-9 选择-分段函数3
分数 100
作者 Fzu_C
单位 福州大学
设有函数
输入格式:
输入一个实数 x(-1000<x<1000)。
输出格式:
输出y的值,结果保留3个小数点。
输入样例:
11
输出样例:
3.091
#include <stdio.h>
#include <math.h>
int main()
{
double x;
scanf("%lf",&x);
if(x<1)
printf("%.3f",x);
else if(x<10)
printf("%.3f",sqrt(2*x-1));
else
printf("%.3f",log(3*x-11));
}
7-10 选择-圆塔
有4个圆塔(圆柱体)。圆心坐标分别为(2,2)、(-2,2)、(-2,-2)、(2,-2),圆半径为1。这4个塔的高度为10m,塔以外无建筑物。令输入任一点的二维平面坐标,求该点的建筑高度(塔外的高度为0)。
输入格式:
输入一个点的平面坐标 (x, y),-3 <= x, y <= 3。
输出格式:
输出该点的建筑高度。
输入样例1:
2 -1.5
输出样例1:
10
输入样例2:
1 1
输出样例2:
0
#include <stdio.h>
#include <math.h>
int main() {
double x, y;
int a = 0;
scanf("%lf %lf", &x, &y);
if (pow(x - 2.0, 2) + pow(y - 2.0, 2) <= pow(1, 2))
{
a = 1;
}
else if (pow(x + 2.0, 2) + pow(y - 2.0, 2) <= pow(1, 2))
{
a = 1;
}
else if (pow(x + 2.0, 2) + pow(y + 2.0, 2) <= pow(1, 2))
{
a = 1;
}
else if (pow(x - 2.0, 2) + pow(y + 2.0, 2) <= pow(1, 2))
{
a = 1;
}
if (a == 1)
printf("10");
else
printf("0");
}
7-11 选择-买奶茶
yz大佬特别爱喝奶茶,他每天上午都要买两杯奶茶,特别的,如果这天是周六,他会在下午再买两杯,如果这天是周天,他会在下午再买四杯。
已知今天是星期x的早晨(1 <= x <= 7),请问直到明天晚上,yz大佬会买多少杯奶茶呢?
输入格式:
一个正整数x (int范围内),代表今天是星期几。
输出格式:
yz大佬购买的奶茶数量。
输入样例:
1
输出样例:
4
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
switch(x)
{
case 1:
printf("4");
break;
case 2:
printf("4");
break;
case 3:
printf("4");
break;
case 4:
printf("4");
break;
case 5:
printf("6");
break;
case 6:
printf("10");
break;
case 7:
printf("8");
break;
}
}
7-12 选择-三角形判别
已知三条边的长度为a,b,c,判断三条边是否能构成一个三角形。
输入格式:
每组输入数据占一行,包括不大于10000的3个整数a,b,c。
输出格式:
每组输出数据占一行,如果a,b,c能构成三角形,则输出Yes,否则输出No。
输入样例:
3 4 7
输出样例:
No
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
printf("Yes");
}
else
printf("No");
}
7-13 选择-三角形分类
输入三角形三边长,判断三角形的种类:等边三角形、等腰三角形或一般三角形。
输入格式:
输入三个整数,表示三角形三边长,范围在 1 到 100 之间。保证输入的三个整数能构成三角形。
输出格式:
按要求输出三角形的类别:
1. 如果是等边三角形,输出 “bian”
2. 如果不是等边三角形,但是等腰三角形,输出 “yao”
3. 否则,输出 “triangle”
输入样例1:
2 2 2
输出样例1:
bian
输入样例2:
3 4 5
输出样例2:
triangle
#include <stdio.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a==b&&b==c)
{
printf("bian");
}
else if((a==b&&a!=c)||(a==c&&a!=b)||(b==c&&b!=a))
{
printf("yao");
}
else
printf("triangle");
}
7-14 选择-五分制转百分制
学生百分制成绩grade分类:
- 当成绩grade大于等于85分为‘A’等;
- 当成绩grade大于等于70分且小于85分为‘B’等;
- 当成绩grade大于等于60分且小于70分为‘C’等;
- 当成绩grade小于60分为‘D’等。
输入格式:
每组输入数据占一行,包括一个成绩等级。
输出格式:
每组输出数据占一行,根据成绩等级输出百分制分数段,输出不包括引号。
- 当成绩为‘A’,输出“85~100”
- 当成绩为‘B’,输出“70~84”
- 当成绩为‘C’,输出“60~69”
- 当成绩为‘D’,输出“<60”
- 其他情况,输出“Error”
输入样例:
A
输出样例:
85~100
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
switch(a)
{
case 'A':
printf("85~100");
break;
case 'B':
printf("70~84");
break;
case 'C':
printf("60~69");
break;
case 'D':
printf("<60");
break;
default:
printf("Error");
break;
}
}
7-15 选择-大小写转换
给定一个字母,如果它是小写,请将其转换成大写字母并输出;如果它是大写字母,请将其转换成小写字母并输出。
输入格式:
输入为一行,仅包含一个英文字母。
输出格式:
输出仅为一行,包含一个经过大小写转换的英文字母。
输入样例:
a
输出样例:
A
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
if(a>='a'&&a<='z')
printf("%c",a-32);
else
printf("%c",a+32);
}
7-16 选择-体积最大
小明做了一件好事,妈妈准备奖励他,于是让他在三个礼物中挑选一个。小明当然想选最好的,可是他不知道到底哪个最好。他就想应该是越大的越好,于是他就挑选了三个礼物中体积最大的那个。请你编写一段程序帮小明从三个礼物中挑选出体积最大的一个。
输入格式:
输入仅一行包含三个整数a,b,c,用空格隔开。
输出格式:
输出仅一行,是a,b,c中的最大值。
输入样例:
18 98 100
输出样例:
100
#include <stdio.h>
int main()
{
int x,y,z;
scanf("%d%d%d",&x,&y,&z);
printf("%d",x>(y>z?y:z)?x:(y>z?y:z));
}
7-17 选择-N以内所有正整数和
给你一个整数,请你输出由1加到该数(包括该数)的和。
输入格式:2
输入仅一行,包含一个整数n。
输出格式:
输出为一个整数,表示1加到n的和值。
输入样例:
10
输出样例:
55
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
printf("%d",(1+n)*n/2);
}
7-18 选择-计算器
根据输入的数据按要求进行计算并输出计算所得的数值(switch语句实现)。
输入格式:
输入有三个整数a,x,y。
输出格式:
请输入a值,输出x与y的运算结果
- 当a==1,计算x+y;
- 当a==2,计算x-y;
- 当a==3,计算x*y;
- 当a==4,计算x÷y;(保留1位小数)
- 当a==5,计算x xor y;(xor:异或)
- 当a非上面的数值时输出:“orzzgg”(不带引号的字符串)
输入样例:
5 6 10
输出样例:
12
#include <stdio.h>
int main() {
int a, x, y;
scanf("%d %d %d", &a, &x, &y);
switch (a) {
case 1:
printf("%d", x + y);
break;
case 2:
printf("%d", x - y);
break;
case 3:
printf("%d", x * y);
break;
case 4:
printf("%.1f", (float)x / y);
break;
case 5:
printf("%d", x ^ y);
break;
default:
printf("orzzgg");
break;
}
}
7-19 选择-简易计算机
分数 100
作者 Fzu_C
单位 福州大学
计算机指令就是指挥机器工作的指示和命令,通常一条指令包括两个部分:操作码和操作数,操作码决定要完成的操作,操作数指参加运算的数据及其所在的单元地址。在计算机中,操作要求和操作数地址都由二进制数码表示,分别称作操作码和地址码,整条指令以二进制编码的形式存放在存储器中。
现要求编程模拟一个简易计算机的计算功能。要求给出一条指令,输出相应的运行结果。为方便起见,给定的指令有一个操作码(用十进制数表示),和 3 个操作数(即通过寻址得到的操作数)。现规定这台简易计算机的操作码如下表所示:
操作符 | 操作码 | 操作数1 | 操作数2 | 操作数3 | 等价表达式 |
---|---|---|---|---|---|
+ | 0 | a | b | c | a+b |
- | 1 | a | b | c | a-b |
* | 2 | a | b | c | a*b |
/ | 3 | a | b | c | a/b |
% | 4 | a | b | c | a%b |
?: | 5 | a | b | c | a?b:c |
> | 6 | a | b | c | a>b |
< | 7 | a | b | c | a<b |
!= | 8 | a | b | c | a!=b |
== | 9 | a | b | c | a==b |
例如指令“1 12 9 99”,其中“1”表示“-”。由于减法只需两个操作符,所以我们只需要使用前两个操作数12 和 9,即表达式为“12-9”。执行该指令的结果是“3”。
输入格式:
输入为标准输入,输入共一行,仅四个整数,即操作码X(0<=x<=9),操作数a,b,c(0<=|a|,|b|,|c|<= 1000)。
输出格式:
输出仅一行,为该指令的运行结果,对于逻辑运算符的结果,如果为真输出“1”,否则输出“0”。
输入样例1:
0 9 -1 9
输出样例1:
8
输入样例2:
8 2 2 9
输出样例2:
0
#include <stdio.h>
int main()
{
int x,a,b,c;
scanf("%d%d%d%d",&x,&a,&b,&c);
switch(x)
{
case 0:
printf("%d",a+b);
break;
case 1:
printf("%d",a-b);
break;
case 2:
printf("%d",a*b);
break;
case 3:
printf("%d",a/b);
break;
case 4:
printf("%d",a%b);
break;
case 5:
printf("%d",a?b:c);
break;
case 6:
printf("%d",a>b);
break;
case 7:
printf("%d",a<b);
break;
case 8:
printf("%d",a!=b);
break;
case 9:
printf("%d",a==b);
break;
}
}
7-20 选择-简单的运算
洛洛现在遇到了个很简单的算术题,给定一个实数n,求它的向上取整以及向下取整,当然如果这个数是整数,那么两个运算的结果是一样的。洛洛很懒不想写代码,所以就来找你帮忙了。
输入格式:
输入一个实数n(n<1000000)。
输出格式:
输出对n的向上取整值、向下取整值和n值(保留5位小数)。
输入样例:
3.5
输出样例:
4 3 3.50000
#include <stdio.h>
#include <math.h>
int main()
{
double x;
scanf("%lf",&x);
printf("%d %d %.5f",(int)ceil(x),(int)floor(x),x);
}
7-21 选择-水仙花数
春天是鲜花的季节,水仙花就是其中最迷人的代表,数学上有个水仙花数,它是这样定义的:“水仙花数”是指一个三位数,它的各位数字的立方和等于其本身,比如:153=13+53+3^3。现在要求你判断一个数是不是水仙花数。
输入格式:
输入包含一个整数n(99<n<1000)。
输出格式:
如果n是水仙花数输出yes,否则输出no。
输入样例:
555
输出样例:
no
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
int a=n/100;
int b=n/10%10;
int c=n%10;
if(a*a*a+b*b*b+c*c*c==n)
{
printf("yes");
}
else
printf("no");
}
7-22 选择-三角形面积
根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
若输入的边能构成一个三角形,则在一行内输出三角形的面积和周长,保留两位小数。否则,输出 no triangle。
输入样例:
5 5 3
输出样例:
7.15 13.00
#include <stdio.h>
#include <math.h>
int main()
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
double p=(a+b+c)/2.0;
double s=sqrt(p*(p-a)*(p-b)*(p-c));
double t=a+b+c;
printf("%.2f %.2f",s,t);
}
else
printf("no triangle");
}
7-23 选择-完全平方数
输入一个正整数N,判断它是否为完全平方数。
输入格式:
一个正整数N(N<=1,000,000,000)
输出格式:
若是完全平方数输出“Yes”,否则输出“No”。
输入样例:
4
输出样例:
Yes
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int a=(int)sqrt(n);
if(a*a==n)
{
printf("Yes");
}
else
printf("No");
}
7-24 选择-矩形与点的位置
给定一个矩形A的左上、右下顶点坐标,以及另一个点B的坐标,判断点B是否在矩形A内(恰好在某条边上也算在矩形内)。
输入格式:
输入三个坐标(xL,yL),(xR,yR),(x,y) 分别表示矩形的左上、右下顶点坐标、点B坐标。(坐标均为绝对值<=1000000的整数,保证矩形合法,即xL<xR, yL>yR)。
输出格式:
若点B在矩形A内,输出“Yes”,否则输出“No”(输出不带引号)。
输入样例1:
0 10 10 0 10 10
输出样例1:
Yes
输入样例2:
0 10 10 0 13 3
输出样例2:
No
#include <stdio.h>
#include <math.h>
int main()
{
int zs1,zs2,yx1,yx2,b1,b2;
scanf("%d%d%d%d%d%d",&zs1,&zs2,&yx1,&yx2,&b1,&b2);
int max=abs(zs1)>abs(yx1)?abs(zs1):abs(yx1);
int min=abs(zs2)>abs(yx2)?abs(zs2):abs(yx2);
if(abs(b1)<=max&&abs(b2)<=min)
{
printf("Yes");
}
else
printf("No");
}
7-25 选择-数的判别
从键盘输入一个正整数n,先判断它是奇数还是偶数。当它是奇数的时候,进一步判断它是否能被3整除。
输入格式:
输入一个正整数n。
输出格式:
输出相应的判断结果。
- n是偶数,输出“n is an even number”
- n是奇数且能被3整除,输出“n is an odd number,it can be divided by 3”
- n是奇数且不能被3整除,输出“n is an odd number,it can’t be divided by 3”
输出不包含引号。
输入样例:
17
输出样例:
17 is an odd number,it can't be divided by 3
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n%2!=0)
{
if(n%3==0)
printf("%d is an odd number,it can be divided by 3",n);
else
printf("%d is an odd number,it can't be divided by 3",n);
}
else
printf("%d is an even number",n);
}
7-26 选择-数字字符的判别
判断输入字符是否为数字字符,是数字字符,则输出该字符;否则输出“input error”
输入格式:
输入一个字符。
输出格式:
输出相应信息。
输入样例:
a
输出样例:
input error
#include <stdio.h>
int main()
{
char a;
scanf("%c",&a);
if(a>='0'&&a<='9')
{
printf("%c",a);
}
else
printf("input error");
}
7-27 选择-销售菜单
假设自动售货机出售四种商品:[1]薯片、[2]爆米花、[3]巧克力和[4]可乐,其单价分别为8元、4.5元、12.8元和3元。现从键盘输入商品编号,当输入为1~4时,输出对应商品的单价;当输入其他编号时,输出“Exit”。(用switch语句实现)
输入格式:
输入一个整数,表示商品编号。
输出格式:
输出所选商品的单价。如果商品编号不在[1,4]区间内,则输出“Exit”(输出不包含引号)
输入样例:
1
输出样例:
8
输入样例:
0
输出样例:
Exit
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
switch (n) {
case 1:
printf("8");
break;
case 2:
printf("4.5");
break;
case 3:
printf("12.8");
break;
case 4:
printf("3");
break;
default:
printf("Exit");
break;
}
}
7-28 选择-电话费
甲乙两家通讯公司,甲公司每月通话收费标准如下:
甲:
月租费 | 通话费 |
---|---|
25元 | 0.1 元/分钟 |
乙:
0 < t (分)< 100 | t(分) >= 100 |
---|---|
20 元/月 | 0.3 元/分 |
输入格式:
输入每个月通话时长 t (0 < t < 10^10 ) ,t为整数。
输出格式:
输出选择哪家公司更实惠 ,甲公司更实惠输出 1 ,乙公司输出2 (两公司价格相等优先选择甲公司)。
输入样例1:
50
输出样例1:
2
输入样例2:
300
输出样例2:
1
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
double s1,s2;
s1=25+0.1*t;
if(t<100)
s2=20;
else
s2=0.3*t;
if(s1>s2)
printf("2");
else
printf("1");
}
7-29 选择-税收计算1
若规定个人稿费纳税规则为:不超过800元不纳税;超过800不超过4000元的按超过800元部分的15%纳税;超过4000元的按全部稿酬的10%纳税。
输入格式:
输入某人获得的稿费 x(0 < x <10^9),x为整数。
输出格式:
输出应付的税费y (保留一位小数)。
输入样例1:
400
输出样例1:
0.0
输入样例2:
1000
输出样例2:
30.0
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
double y;
if(x<=800)
y=0;
else if(x<=4000)
y=(x-800)*0.15;
else
y=x*0.1;
printf("%.1f",y);
}
7-30 选择-自然数
判断给定的数a是否为自然数
输入格式:
输入一个浮点数a,a在int的范围内。
输出格式:
若为自然数则输出“Yes”,反之输出“No”。(输出不包括引号)
输入样例:
95.27
输出样例:文章来源地址https://www.toymoban.com/news/detail-720079.html
No
#include <stdio.h>
int main() {
float a;
scanf("%f", &a);
if (a >= 0 && (int)a == a) {
printf("Yes");
} else {
printf("No");
}
}
7-28 选择-电话费
甲乙两家通讯公司,甲公司每月通话收费标准如下:
甲:
月租费 | 通话费 |
---|---|
25元 | 0.1 元/分钟 |
乙:
0 < t (分)< 100 | t(分) >= 100 |
---|---|
20 元/月 | 0.3 元/分 |
输入格式:
输入每个月通话时长 t (0 < t < 10^10 ) ,t为整数。
输出格式:
输出选择哪家公司更实惠 ,甲公司更实惠输出 1 ,乙公司输出2 (两公司价格相等优先选择甲公司)。
输入样例1:
50
输出样例1:
2
输入样例2:
300
输出样例2:
1
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
double s1,s2;
s1=25+0.1*t;
if(t<100)
s2=20;
else
s2=0.3*t;
if(s1>s2)
printf("2");
else
printf("1");
}
7-29 选择-税收计算1
若规定个人稿费纳税规则为:不超过800元不纳税;超过800不超过4000元的按超过800元部分的15%纳税;超过4000元的按全部稿酬的10%纳税。
输入格式:
输入某人获得的稿费 x(0 < x <10^9),x为整数。
输出格式:
输出应付的税费y (保留一位小数)。
输入样例1:
400
输出样例1:
0.0
输入样例2:
1000
输出样例2:
30.0
#include <stdio.h>
int main()
{
int x;
scanf("%d",&x);
double y;
if(x<=800)
y=0;
else if(x<=4000)
y=(x-800)*0.15;
else
y=x*0.1;
printf("%.1f",y);
}
7-30 选择-自然数
判断给定的数a是否为自然数
输入格式:
输入一个浮点数a,a在int的范围内。
输出格式:
若为自然数则输出“Yes”,反之输出“No”。(输出不包括引号)
输入样例:
95.27
输出样例:
No
#include <stdio.h>
int main() {
float a;
scanf("%f", &a);
if (a >= 0 && (int)a == a) {
printf("Yes");
} else {
printf("No");
}
}
到了这里,关于【C/PTA】选择结构专项练习(额外)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!