本文结合PTA专项练习带领读者掌握选择结构,刷题为主注释为辅,在代码中理解思路,其它不做过多叙述。
文章目录
- 7-1 选择-孔融让梨
- 7-2 选择-最大数
- 7-3 选择-奇偶判断
- 7-4 选择-ASCII值
- 7-5 选择-闰年
- 7-6 选择 -排序
- 7-7 选择-分段函数1
- 7-8 选择-分段函数2
- 7-9 选择-分段函数3
- 7-10 选择-圆塔
- 7-11 选择-买奶茶
- 7-12 选择-三角形判别
- 7-13 选择-三角形分类
- 7-14 选择-五分制转百分制
- 7-15 选择-大小写转换
- 7-16 选择-体积最大
- 7-17 选择-N以内所有正整数和
- 7-18 选择-计算器
- 7-19 选择-简易计算机
- 7-20 选择-简单的运算
- 7-21 选择-水仙花数
- 7-22 选择-三角形面积
- 7-23 选择-完全平方数
- 7-24 选择-矩形与点的位置
- 7-25 选择-数的判别
- 7-26 选择-数字字符的判别
- 7-27 选择-销售菜单
- 7-28 选择-电话费
- 7-29 选择-税收计算1
- 7-30 选择-自然数
- 7-28 选择-电话费
- 7-29 选择-税收计算1
- 7-30 选择-自然数
7-1 选择-孔融让梨
孔融小时候聪明好学,才思敏捷,巧言妙答,大家都夸他是奇童。4岁时,他已能背诵许多诗赋,并且懂得礼节,父母亲非常喜爱他。
一日,父亲买了一些梨子,特地拣了一个最大的梨子给孔融,孔融摇摇头,却另拣了一个最小的梨子说:“我年纪最小,应该吃小的梨,你那个梨就给哥哥吧。”父亲听后十分惊喜。
输入格式:
在一行中给出两个不超过32767的正整数a,b,分别表示孔融父亲拿出的两个梨的质量。
输出格式:
输出孔融选择的梨的质量。
输入样例:
3 4
输出样例:
3
#include int main(){int a,b;scanf("%d%d",&a,&b);printf("%d",a<b?a:b);}
7-2 选择-最大数
输入三个整数,输出其中最大的数。
输入格式:
输入三个整数,在 int 范围内。
输出格式:
输出其中最大的数。
输入样例:
23 78 32
输出样例:
78
#include 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 int main(){int a;scanf("%d",&a);if(a%2!=0){printf("YES");}elseprintf("NO");}
7-4 选择-ASCII值
从键盘输入一个字符,若输入的是数字字符则输出它的ASCII值,否则输出提示信息“input error”。
输入格式:
输入一个字符。
输出格式:
若输入的是数字字符则输出它的ASCII值,否则输出提示信息“input error”,输出不含引号。
输入样例1:
7
输出样例1:
55
输入样例2:
W
#include int main(){char c;scanf("%c",&c);if(c>='0'&&c<='9'){printf("%d",c);}elseprintf("input error");}
7-5 选择-闰年
判别用year表示的某一年是否闰年。
输入格式:
输入占一行,给出一个不大于32767的整数year。
输出格式:
输出占一行,如果该年是闰年,则输出YES,否则输出NO。
输入样例:
2021
输出样例:
NO
#include int main(){int year;scanf("%d",&year);if((year%4==0&&year%100!=0)||year%400==0){printf("YES");}elseprintf("NO");}
7-6 选择 -排序
对两个实数按代数值从大到小排序。
输入格式:
一行中给出2个两个实数a,b。
输出格式:
将两个实数按从大到小输出,保留三位小数,两个实数间以空格隔开。
输入样例:
9.9 10.0
输出样例:
10.000 9.900
#include 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 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 #include int main(){double x;scanf("%lf",&x);if(x<1)printf("%.2f",abs(x));else if(x==1)printf("3.00");elseprintf("%.2f",sqrt(x*x*x-2*x));}
7-9 选择-分段函数3
分数 100
作者 Fzu_C
单位 福州大学
设有函数
输入格式:
输入一个实数 x(-1000<x<1000)。
输出格式:
输出y的值,结果保留3个小数点。
输入样例:
11
输出样例:
3.091
#include #include 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 #include 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");elseprintf("0");}
7-11 选择-买奶茶
yz大佬特别爱喝奶茶,他每天上午都要买两杯奶茶,特别的,如果这天是周六,他会在下午再买两杯,如果这天是周天,他会在下午再买四杯。
已知今天是星期x的早晨(1 <= x <= 7),请问直到明天晚上,yz大佬会买多少杯奶茶呢?
输入格式:
一个正整数x (int范围内),代表今天是星期几。
输出格式:
yz大佬购买的奶茶数量。
输入样例:
1
输出样例:
4
#include 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 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");}elseprintf("No");}
7-13 选择-三角形分类
输入三角形三边长,判断三角形的种类:等边三角形、等腰三角形或一般三角形。
输入格式:
输入三个整数,表示三角形三边长,范围在 1 到 100 之间。保证输入的三个整数能构成三角形。
输出格式:
按要求输出三角形的类别:
1. 如果是等边三角形,输出 “bian”
2. 如果不是等边三角形,但是等腰三角形,输出 “yao”
3. 否则,输出 “triangle”
输入样例1:
2 2 2
输出样例1:
bian
输入样例2:
3 4 5
输出样例2:
triangle
#include 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");}elseprintf("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 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 int main(){char a;scanf("%c",&a);if(a>='a'&&a<='z')printf("%c",a-32);elseprintf("%c",a+32);}
7-16 选择-体积最大
小明做了一件好事,妈妈准备奖励他,于是让他在三个礼物中挑选一个。小明当然想选最好的,可是他不知道到底哪个最好。他就想应该是越大的越好,于是他就挑选了三个礼物中体积最大的那个。请你编写一段程序帮小明从三个礼物中挑选出体积最大的一个。
输入格式:
输入仅一行包含三个整数a,b,c,用空格隔开。
输出格式:
输出仅一行,是a,b,c中的最大值。
输入样例:
18 98 100
输出样例:
100
#include int main(){int x,y,z;scanf("%d%d%d",&x,&y,&z);printf("%d",x>(y>z" />:z)?x:(y>z?y:z));}
7-17 选择-N以内所有正整数和
给你一个整数,请你输出由1加到该数(包括该数)的和。
输入格式:2
输入仅一行,包含一个整数n。
输出格式:
输出为一个整数,表示1加到n的和值。
输入样例:
10
输出样例:
55
#include 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 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 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 #include 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 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");}elseprintf("no");}
7-22 选择-三角形面积
根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
若输入的边能构成一个三角形,则在一行内输出三角形的面积和周长,保留两位小数。否则,输出 no triangle。
输入样例:
5 5 3
输出样例:
7.15 13.00
#include #include 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);}elseprintf("no triangle");}
7-23 选择-完全平方数
输入一个正整数N,判断它是否为完全平方数。
输入格式:
一个正整数N(N<=1,000,000,000)
输出格式:
若是完全平方数输出“Yes”,否则输出“No”。
输入样例:
4
输出样例:
Yes
#include #include int main(){int n;scanf("%d",&n);int a=(int)sqrt(n);if(a*a==n){printf("Yes");}elseprintf("No");}
7-24 选择-矩形与点的位置
给定一个矩形A的左上、右下顶点坐标,以及另一个点B的坐标,判断点B是否在矩形A内(恰好在某条边上也算在矩形内)。
输入格式:
输入三个坐标(xL,yL),(xR,yR),(x,y) 分别表示矩形的左上、右下顶点坐标、点B坐标。(坐标均为绝对值<=1000000的整数,保证矩形合法,即xLyR)。
输出格式:
若点B在矩形A内,输出“Yes”,否则输出“No”(输出不带引号)。
输入样例1:
0 10 10 0 10 10
输出样例1:
Yes
输入样例2:
0 10 10 0 13 3
输出样例2:
No
#include #include 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 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);elseprintf("%d is an odd number,it can't be divided by 3",n);}elseprintf("%d is an even number",n);}
7-26 选择-数字字符的判别
判断输入字符是否为数字字符,是数字字符,则输出该字符;否则输出“input error”
输入格式:
输入一个字符。
输出格式:
输出相应信息。
输入样例:
a
输出样例:
input error
#include int main(){char a;scanf("%c",&a);if(a>='0'&&a<='9'){printf("%c",a);}elseprintf("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 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 int main(){int t;scanf("%d",&t);double s1,s2;s1=25+0.1*t;if(t<100)s2=20;elses2=0.3*t;if(s1>s2)printf("2");elseprintf("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 int main(){ int x; scanf("%d",&x); double y; if(x<=800) y=0; else if(x<=4000) y=(x-800)*0.15; elsey=x*0.1; printf("%.1f",y);}
7-30 选择-自然数
判断给定的数a是否为自然数
输入格式:
输入一个浮点数a,a在int的范围内。
输出格式:
若为自然数则输出“Yes”,反之输出“No”。(输出不包括引号)
输入样例:
95.27
输出样例:
No
#include 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 int main(){int t;scanf("%d",&t);double s1,s2;s1=25+0.1*t;if(t<100)s2=20;elses2=0.3*t;if(s1>s2)printf("2");elseprintf("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 int main(){ int x; scanf("%d",&x); double y; if(x<=800)y=0; else if(x<=4000) y=(x-800)*0.15; elsey=x*0.1; printf("%.1f",y);}
7-30 选择-自然数
判断给定的数a是否为自然数
输入格式:
输入一个浮点数a,a在int的范围内。
输出格式:
若为自然数则输出“Yes”,反之输出“No”。(输出不包括引号)
输入样例:
95.27
输出样例:
No
#include int main() {float a;scanf("%f", &a);if (a >= 0 && (int)a == a) {printf("Yes");} else {printf("No");}}