PTA 选择结构设计(C语言)

1.成绩转换 (15 分)

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

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

输入格式:

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

输出格式:

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

输入样例:

90

输出样例:

A

源代码:

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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<m-1;i++)
    {
    
    
        days+=a[i];
    }
    days+=d;
    printf("%d",days);
    return 0;
}

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<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
int main()
{
    
    
	int y,d,a,i=1;
	scanf("%d",&y);
	while(i<y)
	{
    
    
		if((i%4==0&&i%100!=0)||i%400==0)
		d+=366;
		else
		d+=365;
		i++;
	}
    a=d+1;
	switch(a%7)
	{
    
    
	case 1:printf("星期一\n");break;
	case 2:printf("星期二\n");break;
	case 3:printf("星期三\n");break;
	case 4:printf("星期四\n");break;
	case 5:printf("星期五\n");break;
	case 6:printf("星期六\n");break;
	case 0:printf("星期天\n");break;
}
}

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

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

输入格式:

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

输出格式:

在一行内按照

blank = 空格个数, digit = 数字字符个数, other = 其他字符个数
的格式输出。请注意,等号的左右各有一个空格,逗号后有一个空格。

输入样例:

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

Reold 12 or 45T

输出样例:

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

blank = 3, digit = 4, other = 8

源代码:

#include<stdio.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
#include<math.h>
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<stdio.h>
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");
}
else
printf("Invalid Value.\n");
	return 0;
}

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

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

输入格式:

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

输出格式:

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

输入样例:

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

1 2 3

输出样例:

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

2

源代码:

#include<stdio.h>
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<stdio.h>
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("IN\n");
	}
	if((px-x)*(px-x)+(py-y)*(py-y)==r*r)
	{
    
    
		printf("ON\n");
	}
    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<stdio.h>
#include<math.h>
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<stdio.h>
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<stdio.h>
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<stdio.h>
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);
}

猜你喜欢

转载自blog.csdn.net/Anemia_/article/details/115058559
PTA
今日推荐