一、PTA实验作业

题目1.计算分段函数[2]

本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

1.实验代码

	double x , fx;
	scanf("%lf",&x);
	if(x >= 0){
		fx = sqrt(x);
	}
	else{
		fx = pow(x+1,2)+2*x+1/x;
	}
	printf("f(%.2f) = %.2f",x,fx);

2.设计思路

  • (1)定义两个浮点型变量x,fx
  • (2)输入数据x
  • (3)如果x>=0,执行fx = sqrt(x);
  • (4)否则,执行fx = pow(x+1,2)+2*x+1/x;
  • (5)按“f(x) = fx”的格式输出,其中x与fx都保留两位小数

3.本题调试过程碰到问题及解决办法

  • (1)问题:本题代码编写正确,未出现问题

4.本题PTA提交列表

题目2. 输出三角形面积和周长

本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。

1.实验代码

	int a,b,c;
	float area,s,perimeter;
	scanf("%d%d%d",&a,&b,&c);
	
	s=(a+b+c)/2.0;
	area=sqrt(s*(s-a)*(s-b)*(s-c));
	perimeter=a+b+c;
	
	if(a+b>c&&a+c>b&&b+c>a)
	printf("area = %.2f; perimeter = %.2f",area,perimeter);
	else
	printf("These sides do not correspond to a valid triangle");
	

2.设计思路

  • (1)定义三个整型变量a,b,c三个浮点型变量area,s,perimeter
  • (2)输入正整数a,b,c
  • (3)s=(a+b+c)/2.0;
    area=sqrt(s(s-a)(s-b)*(s-c));
    perimeter=a+b+c;
  • (4)如果满足任意两边之和大于第三边,即a+b>c&&a+c>b&&b+c>a,按"area = 面积; perimeter = 周长"的格式输出,保留两位小数
  • (5)否则,输出These sides do not correspond to a valid triangle

3.本题调试过程碰到问题及解决办法

  • (1)问题
    ①s=(a+b+c)/2;在此表达式中a,b,c为整型变量,2为整数,s为浮点型变量,而整型/整型≠浮点型。
    ②看到题目中的"任意两边之和大于第三边",条件中便用上||,导致错误。

  • (2)解决方法
    ①原表达式改为s=(a+b+c)*1.0/2或s=(a+b+c)/2.0或把a,b,c改为浮点型变量,即式中有一个浮点型数就可以输出浮点型结果
    ②任意两边之和大于第三边 三种情况都应进入同一个条件,所以把||改为&&

4.本题PTA提交列表

题目3. 出租车计价

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

1.实验代码

	int time;
	float kilometer,price1,price2;
	scanf("%f%d",&kilometer,&time);
	if(kilometer<=3){
		price1=10;
	}
	else if(kilometer<=10){
		price1=10+2*(kilometer-3);
		}
	else {
		price1=10+2*7+3*(kilometer-10);
	} 
	
	if (time<5){
		price2=price1;
	}
	else{
		price2=price1+time/5*2;
	}
	

	printf("%.0f",price2);
	

2.设计思路

  • (1)定义一个整型变量time,三个浮点型变量 kilometer,price1,price2;
  • (2)输入数据kilometer,time;
  • (3)如果kilometer<=3,执行price1=10;
  • (4)如果kilometer>=3&&kilometer<=10,执行price1=10+2*(kilometer-3);
  • (5)否则,执行price1=10+27+3(kilometer-10);
  • (6)如果time<=5,执行price2=price1;
  • (7)否则,执行price2=price1+time/5*2;
  • (8)输出price2,结果四舍五入,保留到元。

3.本题调试过程碰到问题及解决办法

  • (1)问题
    ①PTA中写道"输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)" , 因此在scanf语句中用了%.1f
    ②题目部分理解错误,导致else if 中条件定义错误
    ③对如何可以做到四舍五入不了解

  • (2)解决方法
    ①通过询问,得知scanf不能精度控制,应把%.1f改为%f
    ②多次阅读题目,正确理解后重新更改else if中的条件,把kilometer<=13改为kilometer<=10
    ③通过询问,得知使用%.0f即可对结果进行四舍五入,不用过于繁琐

4.本题PTA提交列表

题目4.程序设计联考

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

1.实验代码

	int account,ten_thousand;
	scanf("%d",&account);
	ten_thousand=account/100000;
	switch(ten_thousand){
		case 1 :printf("Hunan Agricultural University");break;
		case 2 :printf("Jishou University");break;
		case 3 :printf("Huaihua University");break;
		case 4 :printf("Aerospace University");break;
		case 5 :printf("Ocean University");break;
		default :printf("Other University");break;
	}

2.设计思路

  • (1)定义两个整型变量account,ten_thousand
  • (2)输入1个6位的正整数account
  • (3)ten_thousand=account/100000
  • (4)如果ten_thousand=1,输出Hunan Agricultural University
  • (5)如果ten_thousand=2,输出Jishou University
  • (6)如果ten_thousand=3,输出Huaihua University
  • (7)如果ten_thousand=4,输出Aerospace University
  • (8)如果ten_thousand=5,输出Ocean University
  • (9)否则,输出Other University

3.本题调试过程碰到问题及解决办法

  • (1)问题
    ①题目中缺少空格,复制到代码中导致错误,以为是输出时需要加引号。

  • (2)解决方法:在查错过程中,试着在输出时加入引号发现不能单纯直接加引号,通过百度得知了输出语句中应如何添加引号。并在询问同学后得知题目中缺少空格,在代码中添加空格后得到正确答案

4.本题PTA提交列表

二、截图本周题目集的PTA最后排名。

PTA提交列表

PTA排名

三、本周学习总结

1.你学会了什么?

  • switch语句:
    ①case后只能跟常量,不能跟表达式,否则程序将会产生错误。
    ②switch中使用break语句可用于跳出正在执行的switch语句,否则就继续执行其后的所有语句段。
  • if-else语句、else-if语句:
    ①if后面有两条及以上语句时,要加{ },if后面只有一条语句时,可不加{ }。
    ②else与if匹配准则:else与最靠近它的、没有与别的else匹配过的if相匹配。
  • switch语句和if else if 多分支语句不同点:
    ①if-else需要判断每个分支。而switch只进入满足条件分支,无需比较其他分支。switch语句效率更高。
    ②switch语句只能处理等值条件判断的情况,case后只能是常量。
    ③switch语句判断的值必须是整型,if判断整型数和浮点数都可以。
  • 字符型数据:
    ①字符型变量定义时用类型名char
    ②字符输入函数:getchar(),输出函数:putchar()
  • 其他:
    ①a是变量,'a'是字符常量;变量放数据,常量不能变。
    ②在输出时含有引号,可以使用转义序列,如:printf(""Hello World"");

2.本周的内容,你还不会什么?

  • 字符型数据的输入输出还不熟悉,脱离课本后无法独立使用。
  • case后什么情况需要加' '还不明白。

3.你碰到什么困难,打算如何解决?

  • 困难:对switch语句还不熟悉,过于依赖课本。对新知识的吸收效率低,理解不透彻。对于调试的问题,还没熟悉调试的方法,因此在查错过程中不喜欢使用调试工具。
  • 解决方法 :积累做过的有用到switch语句的题目,多次复习打代码,寻找此类题型的规律。在接下来的作业中,在dev c++中我会尽量多使用到调试来查找错误点,熟练调试的流程并加以应用。
  • 备注: 在此次PTA作业中,因先在dev c++中编译运行成功后复制到PTA中,因此多题都是一次提交即正确。
posted on 2017-10-24 22:56  呜啦  阅读(401)  评论(6编辑  收藏  举报