C语言第二次作业

一、PTA实验作业

题目1:计算分段函数

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

1.实验代码

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

2.设计思路

  • 第一步:定义两个双精度浮点变量x,y;
  • 第二步:输入x;
  • 第三步:判断x>=0,如果成立,计算y=sqrt(x);如果不成立,计算y=pow (x+1,2)+2*x+1/x;
  • 第四步:输出f(x)的值

3.本题调试过程中碰到的问题及解决方法

4.本题PTA提交列表

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

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

​​ ,其中s=(a+b+c)/2

1.实验代码

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

2.设计思路

  • 1.定义6个双精度浮点变量,a,b,c表示三角形三条边长,area表示三角形面积,perimeter表示三角形周长,s表示周长的一半;
  • 2.输出三条边长a,b,c;
  • 3.判断a+b>c ,a+c>b , b+c>a是否同时成立,如果同时成立:s=(a+b+c)/2; area = sqrt (s(s-a)(s-b)*(s-c)) ; perimeter = a + b + c;然后输出area和perimeter;如果不成立:输出 These sides do not correspond to a valid triangle

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

问题:if的判断中三个关系式没有用&&并列而是用分号,导致答案错误
解决方法:百度怎么判断并列条件

4.本题PTA提交列表

3.出租车计价

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

1.实验代码

	double distance;
	int fare,minute;
	scanf("%lf%d",&distance,&minute);
	if(minute<5){
	    if (distance>0&&distance<3){
		    fare=10;
	    }else if (distance<=10){
	    	fare=10+2*(distance-3);
	    }else if (distance>10){
	    	fare=10+2*7+3*(distance-10);
	    }
	}else {
	    if (distance>0&&distance<3){
		    fare=10+2*minute/5;
	    }else if (distance<=10){
	    	fare=10+2*(distance-3)+2*minute/5;
	    }else if (distance>10){
	    	fare=10+2*7+3*(distance-10)+2*minute/5;
	    } 
	}
       printf("%d\n",fare);

2.设计思路

  • 第一步:定义一个双精度浮点变量distance,定义两个整型变量fare,minute
  • 第二步:输入distance和minute
  • 第三步:判断minute<5,如果成立,判断0<distance<3,如果成立,fare=10;如果不成立,再判断fare是否小于10,如果成立,fare=10+2(distance-3);如果不成立再判断distance是否大于10,如果成立,fare=24+3(distance-10);
  • 第四步:如果minute<5不成立,判断0<distance<3,如果成立,fare=10+2minute/5;如果不成立,再判断fare是否小于10,如果成立,fare=10+2(distance-3)+2minute/5;如果不成立再判断distance是否大于10,如果成立,fare=24+3(distance-10)+2*minute/5;
  • 第五步:输出fare

3.本题碰到的问题及解决方法

碰到问题:
1.定义变量型错误,将fare定义为双精度浮点型,导致答案错误
2.刚开始用并列的if语句,判断条件不充分,导致答案错误
解决方法:
1.改变fare的变量型
2.改用if else-if 语句,使判断条件完整

4.本题PTA提交列表

题目4.程序设计联考

1.实验代码

int account,number;
	scanf("%d",&account);
	number=account/100000;
	switch (number){
	    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.设计思路

  • 第一步:定义两个整形变量account,number
  • 第二步:number=account/100000
  • 第三步:判断number的值,当number=1时,输出 Hunan Agricultural University;当number=2是,输出 Jishou University;当number=3时,输出 Huaihua University;当number=4时,输出 Aerospace University;当number=5时,输出Ocean University;当number为其他数字时,输出 Other University

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

碰到问题:
1.case和数字间没用空格隔开
2.case后数字加单引号导致结果错误
解决方法:
仔细翻书注意case语句的细节

4.本题PTA提交列表

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

三、本周学习总结

1.我学会了什么?

通过本周的学习,我学会了switch case语句和if else-if语句,并能够熟练的应用。

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

对于for的循环语句的循环过程不是很熟练,要再通过看书和Dvec调试弄清楚

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

在一些变量的命名上做的还是不够到位,命名只是简单的abc,以后在命名变量的时候一定要百度一下英文名

posted @ 2017-10-24 16:36  嘿嘿渣  阅读(429)  评论(5编辑  收藏  举报