博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
PTA 选择结构设计(C语言)
阅读量:2055 次
发布时间:2019-04-28

本文共 11627 字,大约阅读时间需要 38 分钟。

1.成绩转换 (15 分)

本题要求编写程序将一个百分制成绩转换为五分制成绩。转换规则:

大于等于90分为A;

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

输入格式:

输入在一行中给出一个整数的百分制成绩。

输出格式:

在一行中输出对应的五分制成绩。

输入样例:

90

输出样例:

A

源代码:

#include
int main(){
int c; scanf("%d",&c); switch(c/10) {
case 10: case 9:printf("A\n");break; case 8:printf("B\n");break; case 7:printf("C\n");break; case 6:printf("D\n");break; case 5: case 4: case 3: case 2: case 1: case 0:printf("E\n");break; } return 0;}

用if-else语句编程,根据输入的百分制成绩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
int main(){
int score; scanf("%d",&score); if(score>=90&&score<=100) {
printf("A\n"); } else if(score>=80&&score<90) {
printf("B\n"); } else if(score>=70&&score<80) {
printf("C\n"); } else if(score>=60&&score<70) {
printf("D\n"); } else if(score>=0&&score<60) {
printf("E\n"); } else {
printf("Input error!\n"); }}

switch语句:

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

2.计算天数 (15 分)

本题要求编写程序计算某年某月某日是该年中的第几天。

输入格式:

输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。

输出格式:

在一行输出日期是该年中的第几天。

输入样例1:

2009/03/02

输出样例1:

61

输入样例2:

2000/03/02

输出样例2:

62

源代码:

#include
int main(){
int y,m,d,days=0; scanf("%d/%d/%d",&y,&m,&d); int a[12]={
31,28,31,30,31,30,31,31,30,31,30,31}; if(y%400==0||(y%4==0&&y%100!=0)) a[1]=29; for(int i=0;i

3.程序设计联考 (5 分)

自从湖南农业大学、吉首大学和怀化学院组织程序设计课程联考以后,举办联考的经验越来丰富。尤其是在使用PTA系统作为考试平台之后,联考工作得到了很多学校的认可和支持。所以,现在参与联考的学校比较多。为了便于区分考生,考生账号的第一位是学校代号。1代表Hunan Agricultural University,2代表Jishou University,3代表Huaihua University,4代表Aerospace University,5代表Ocean University。 请编写程序根据考生的账号区分考生的学校。

输入格式:

在一行中给出1个6位的正整数account。

输出格式:

在一行中输出account的学校。注意:如果不清楚学校代号是哪个学校,则输出"OtherUniversity"。

输入样例:

123456

输出样例:

Hunan Agricultural University

源代码:

#include
int main(){
int a; scanf("%d",&a); switch(a/100000) {
case 1:printf("Hunan Agricultural University\n");break; case 2:printf("Jishou University\n");break; case 3:printf("Huaihua University\n");break; case 4:printf("Aerospace University\n");break; case 5:printf("Ocean University\n");break; default:printf("Other University\n"); } return 0;}

4.输入年份和月份 (10 分)

输入一个年份和月份,输出这个月的天数。

输入格式:

输入年份year和月份month,年份和月份中间用一个空格隔开。

输出格式:

输入year年的month月对应的天数。

输入样例:

2000 2

输出样例:

29

输入样例:

1900 2

输出样例:

28

输入样例:

1900 6

输出样例:

30

源代码:

#include
int main(){
int year,month; scanf("%d %d",&year,&month); if(year%400==0||(year%100!=0&&year%4==0)) switch(month) {
case 1:printf("31");break; case 2:printf("29");break; case 3:printf("31");break; case 4:printf("30");break; case 5:printf("31");break; case 6:printf("30");break; case 7:printf("31");break; case 8:printf("31");break; case 9:printf("30");break; case 10:printf("31");break; case 11:printf("30");break; case 12:printf("31");break; } else switch(month) {
case 1:printf("31");break; case 2:printf("28");break; case 3:printf("31");break; case 4:printf("30");break; case 5:printf("31");break; case 6:printf("30");break; case 7:printf("31");break; case 8:printf("31");break; case 9:printf("30");break; case 10:printf("31");break; case 11:printf("30");break; case 12:printf("31");break; } return 0;}

5.输入苹果等级和数量,计算并输出应付款 (10 分)

苹果店有4 个等级的苹果,一级5.50 元/kg、二级4.30 元/kg、三级3.00 元/kg、四级2.50 元/kg。利用switch 语句编写一个程序,输入苹果的等级、数量,输出应付款数。当输入的苹果的等级不合要求时,输出“Data Error!”,结束程序。

输入格式:

例如:在一行中给出等级和数量,中间用空格分隔。

输出格式:

例如:您应付金额为xx元。

输入样例:

1 1
输出样例:
5.50
源代码:

#include
int main(){
int x,y; scanf("%d %d",&x,&y); switch(x) {
case 1:printf("%.2f",5.50*y);break; case 2:printf("%.2f",4.30*y);break; case 3:printf("%.2f",3.00*y);break; case 4:printf("%.2f",2.50*y);break; default:printf("Data Error!"); } return 0;}

6.计算星期值 (10 分)

编程序实现:输入一个年份,求出这一年的1月1日是星期几,要求使用全中文形式(如“星期六”)输出,并限定不能使用循环结构。假定从公元第一天开始,就实施格里高利历法,并且公元1年1月1日为星期一。格里高利历法的置闰规则是400年97闰,也可以概括为:四闰百不闰,四百闰。

输入格式:

输入一个代表年份的正整数。

输出格式:

输出中文星期值,最后换行。

输入样例:

2021

输出样例:

星期五

源代码:

#include
int main(){
int y,d,a,i=1; scanf("%d",&y); while(i

7.统计数字字符和空格 (15 分)

本题要求编写程序,输入一行字符,统计其中数字字符、空格和其他字符的个数。建议使用switch语句编写。

输入格式:

输入在一行中给出若干字符,最后一个回车表示输入结束,不算在内。

输出格式:

在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数

的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

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

Reold 12 or 45T

输出样例:

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

blank = 3, digit = 4, other = 8

源代码:

#include
int main(){
int c,blank=0,digit=0,other=0; while((c=getchar())!='\n'){
switch(c) {
case ' ':blank++;continue; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':digit++;continue; default :other++;continue; } } printf("blank = %d, digit = %d, other = %d",blank,digit,other); }

8.计算分段函数(10 分)

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

输入格式:

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

输出格式:

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

输入样例1:

10

输出样例1:

f(10.0) = 0.1

输入样例2:

234

输出样例2:

f(234.0) = 234.0

源代码:

#include
int main(){
double x,fx; scanf("%lf",&x); if(x==10) fx=1.0/x; else fx=x; printf("f(%.1lf) = %.1lf\n",x,fx); return 0;}

9. 三天打鱼两天晒网 (15 分)

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

输入格式:

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

输出格式:

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

输入样例1:

103

输出样例1:

Fishing in day 103

输入样例2:

34

输出样例2:

Drying in day 34

源代码:

#include
int main(){
int N; scanf("%d",&N); switch(N%5) {
case 1: case 2: case 3:printf("Fishing in day %d\n",N);break; case 4: case 0:printf("Drying in day %d\n",N);break; } return 0;}

10.7-12 分段函数1 (12 分)

计算分段函数,测试数据分别是-2、3、7。

在这里插入图片描述

输入格式:

输入一个数

输出格式:

输出x=多少,y=多少,输出的x和y值均保留两位小数

输入样例:

-3

输出样例:

x=-3.00,y=2.00

源代码:

#include
#include
int main(){
double x,y; scanf("%lf",&x); if(x<0) y=fabs(x+1); if(x>=0&&x<=5) y=1+2*x; if(x>5) y=sin(x)+5; printf("x=%.2lf,y=%.2lf",x,y); return 0;}

11.判断一个三位数是否为水仙花数 (15 分)

本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。

输入格式:

输入在一行中给出一个需要判断的整数 N(100≤N≤999)。

输出格式:

如果N是水仙花数,则在一行中输出Yes,否则输出No。如果N不是三位数,则输出Invalid Value.。

输入样例1:

153

输出样例1:

Yes

输入样例2:

500

输出样例2:

No

输入样例3:

-2

输出样例3:

Invalid Value.

源代码:

#include
int main(){
int a,x,y,z; scanf("%d",&a); if(a>=100&&a<=999) {
x=a/100; y=a%100/10; z=a%100%10; if(a==x*x*x+y*y*y+z*z*z) printf("Yes\n"); else printf("No\n");}elseprintf("Invalid Value.\n"); return 0;}

12.【分支】【–三个数的中位数B–】 (6 分)

输入三个整数,请编程输出这三个数的中位数。

输入格式:

输入三个整数,一空格分隔,数据都在int表示范围。

输出格式:

输出这三个数的中位数,输出数据后需要输出回车换行。

输入样例:

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

1 2 3

输出样例:

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

2

源代码:

#include
int main(){
int a,b,c,t; scanf("%d %d %d",&a,&b,&c); if(a>b) {
t=a; a=b; b=t;} if(a>c) {
t=a; a=c; c=t;} if(b>c) {
t=b; b=c; c=t;} printf("%d\n",b); return 0; }

13.平面中点与圆的位置关系 (15 分)

在平面直角坐标系中,给定一个圆的圆心坐标Ox,Oy以及半径R,在再给定一个点的坐标PX,Py,请判断这个点与圆的位置关系。

输入格式:

先输入三个正整数,分别代表圆心的横纵坐标x,Oy和半径R。 在输入两个正整数,分别代表给定点的横纵坐标PX,Py。 输入的所有数据均不超过100

输出格式:

如果点再圆内,输出IN, 如果点再圆上,输出ON, 如果点再圆外,输出OUT, 输出答案后需要输出回车换行。

输入样例:

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

1 1 1

5 5

输出样例:

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

OUT

源代码:

#include
int main(){
int x,y,r,px,py; scanf("%d %d %d",&x,&y,&r); scanf("%d %d",&px,&py); if((px-x)*(px-x)+(py-y)*(py-y)
r*r) {
printf("OUT\n"); }}

14.分段函数求值 (30 分)

编写程序,根据从键盘输入的x的值,输出y的值。x和y都是双精度浮点数,输出精确到小数点后3位。x与y的函数关系如下图所示:

在这里插入图片描述

输入格式:

输入是一个双精度浮点数。

输出格式:

输出是一个双精度浮点数,要求精确到小数点后3位。

输入样例:

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

3.1

输出样例:

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

34.791

源代码:

#include
#include
int main(){
double x,y; scanf("%lf",&x); if(x<0) {
y=pow(x,2)+9; } else {
y=pow(x,3)+5; } printf("%.3lf",y);}

15.美国疫情数据预测 (10 分)

美国在没完全控制疫情的情况下,就要恢复经济。川建国喜欢作死,经常自己推翻自己说的话,现在假设川建国的变脸周期是10天,每10天就翻一次脸,开始的时候决定不戴口罩,十天后又决定戴口罩,二十天后又决定不戴口罩。假设新冠病毒传播系数是RO,戴口罩之后RO会减少到一半。你能预测在川建国同志的带领下的美国的新冠数据吗?RO=1,表示每一个新冠病人可以传染1个正常人。

输入格式:

在一行中输入三个数据,分别是美国目前新冠感染人数N,天数T,新冠传播系数RO。

输出格式:

对每一组输入,预测在第T天的新冠感染人数,输出。 如果感染人数达到或者超过了美国人数(3.3亿),那就输出“MAGA? Bazinga!!”

输入样例:

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

100 15 1.2

输出样例:

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

2781787

源代码:

#include
int main(){
int N,T,sum,i,k,j; double RO; scanf("%d %d %lf",&N,&T,&RO); sum=N; for(i=1;i<=T/10;i++){
if(i%2==0){
for(k=1;k<=10;k++){
sum=sum+sum*RO*0.5; } } else{
for(k=1;k<=10;k++){
sum=sum+sum*RO; } }} if(T/10%2==0){
for(j=1;j<=T-(i-1)*10;j++){
sum=sum+sum*RO; } } else{
for(j=1;j<=T-(i-1)*10;j++){
sum=sum+sum*RO*0.5; } } if(sum<330000000){
printf("%d\n",sum); } else{
printf("MAGA? Bazinga!!\n"); } }

16.浙江省阶梯电价(2012至今) (20 分)

浙江省从2012年7月1日起执行新的阶梯电价标准,具体如下:从每年1月1日开始,执行一个新的计费周期; (1)全年累计用电量少于2760度(千瓦时,下同)的,按每度0.538元执行; (2)全年累计用电量超过2760度,但低于4800度的部分,每度在基础电价上加价0.05元,即每度电0.588元; (3)全年累计用电量超过4800度的部分,每度加价0.30元,即每度0.838元。 现输入两个数字:第一个数字代表前10个月用电量总和,后一个代表11月用电量,能够正确输出11月的电费金额(保留两位小数)。

输入格式:

2700 200

输出格式:

114.60

输入样例:

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

4700 200

输出样例:

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

142.60

源代码:

#include
int main(){
int x,y; float z; scanf("%d %d",&x,&y); if((x+y)<=2760) {
z=0.538*y; } if((x+y)>2760&&(x+y)<=4800) {
if(x<=2760) {
z=0.538*(2760-x)+0.588*(x+y-2760); } if(x>2760) {
z=0.588*y; } } if((x+y)>4800) {
if(x<2760) {
z=0.538*(2760-x)+0.588*(4800-2760)+0.838*(x+y-4800); } if(x>=2760&&x<=4800) {
z=0.588*(4800-x)+0.838*(x+y-4800); } if(x>4800) {
z=0.838*y; } } printf("%.2f\n",z);}

17.身高预测(20分)

每个父母都关心自己孩子成人后的身高,据有关生理卫生知识与数理统计分析表明,影响小孩成人后的身高的因素包括遗传、饮食习惯与体育锻炼等。小孩成人后的身高与其父母的身高和自身的性别密切相关。

设 faHeight为父亲的身高,moHeight为母亲的身高,身高预测公式为: 男性成人时身高=( faHeight+moHeight)×0.54 女性成人时身高=( faHeight×0.923+ moHeight)/2cm 此外,如果喜爱体育锻炼,那么身高可增加2%;如果有良好的卫生饮食习惯,那么身高可增加1.5%。

试编程从键盘输入用户的性别(用字符型变量sex存储,输入字符F或f表示女性,输入字符M或m表示男性)、父母身高(用实型变量存储,faHeight为父亲的身高,moHeight为母亲的身高)、是否喜爱体育锻炼(用字符型变量 sports存储,输入字符Y或y表示喜爱,输入字符N或n表示不喜爱)、是否有良好的饮食习惯(用字符型变量diet存储,输入字符Y或y表示良好,输人字符N或n表示不好)等条件,利用给定公式和身高预测方法对身高进行预测。

输入格式:

在一行中给出性别、父亲身高、母亲身高、是否喜爱体育锻炼、是否有良好饮食习惯,数据间以空格分隔。

输出格式:

输出预测的身高,保留一位小数。

输入样例:

F 182 162 N Y

输出样例:

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

167.5cm

源代码:

#include
int main(){
char sex,sports,diet; double high,faheight,moheight; scanf("%c %lf %lf %c %c",&sex,&faheight,&moheight,&sports,&diet); if(sex=='F'||sex=='f') {
high=(faheight*0.923+moheight)/2; if(sports=='Y'||sports=='y') high=high*1.02; else if(diet=='Y'||diet=='y') high=high*1.015; } else {
high=(faheight+moheight)*0.54; if(sports=='Y'||sports=='y') high=high*1.02; else if(diet=='Y'||diet=='y') high=high*1.015; } printf("%.1fcm\n",high);}

18.单词长度 (15 分)

你的程序要读入一行文本,其中以空格分隔为若干个单词,以.结束。你要输出每个单词的长度。这里的单词与语言无关,可以包括各种符号,比如it’s算一个单词,长度为4。注意,行中可能出现连续的空格;最后的.不计算在内。

输入格式:

输入在一行中给出一行文本,以.结束

提示:用scanf("%c",…);来读入一个字符,直到读到.为止。

输出格式:

在一行中输出这行文本对应的单词的长度,每个长度之间以空格隔开,行末没有最后的空格。

输入样例:

It’s great to see you here.
输出样例:
4 5 2 3 3 4

#include
#include
int main(){
char c; int count=0,sum=0,a=0,b=0; do{
scanf("%c",&c); if(c!=' '&&c!='.'){
count++; } if(c==' '&&count>0){
sum=sum*10+count; count=0; a++; } if(c=='.'&&count>0){
sum=sum*10+count; count=0; a++; } }while(c!='.'); for(int i=a-1;i>=0;i--){
b=pow(10,i); printf("%d",sum/b); if(i>0){
printf(" "); } sum=sum%b; }}

转载地址:http://sjnlf.baihongyu.com/

你可能感兴趣的文章
利用 ebpf sockmap/redirection 提升 socket 性能(2020)
查看>>
春节前最后一波福利,Alibaba Java 训练营]5天突破面向对象编程限时免费报名!...
查看>>
我就要在容器里写文件!?
查看>>
支付宝集五福最全攻略,五分钟集齐五福!
查看>>
Runc 容器初始化和容器逃逸
查看>>
使用 GDB + Qemu 调试 Linux 内核
查看>>
介绍一个小工具:SSL-exporter
查看>>
深入理解 tc ebpf 的 direct-action (da) 模式(2020)
查看>>
为容器时代设计的高级 eBPF 内核特性(FOSDEM, 2021)
查看>>
Loki系列文章
查看>>
字节跳动面试官问:微服务下如何保证分布式事务的最终一致性?
查看>>
使用 Prometheus 监控 WireGuard
查看>>
BPF 可移植性和 CO-RE(一次编译,到处运行)
查看>>
万字长文:彻底搞懂容器镜像构建
查看>>
GitHub 又又又多了一个新主题 —— Dimmed Dark 主题!
查看>>
cgroup 挂载失败是什么鬼???
查看>>
深入 kubernetes API 的源码实现
查看>>
真香!使用 Goland 网页版实现真正的云开发
查看>>
又超时了!Etcd分布式锁你用明白了吗?
查看>>
工程师应该怎么学习
查看>>