C语言第二次博客作业---分支结构

一、PTA实验作业

1.计算分段函数[2]

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

(1).实验代码

        double x,y;
	scanf ("%lf",&x);
	if (x>=0){
		y=pow(x,0.5);
		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;
  • 由于要用到数学函数,加入引用头文件math.h;
  • 用读入输入的值的scanf语句
  • 用分支语句if-else来判断x的值属于哪个范围要做哪种计算,当x>=0时用pow(x,0.5)计算,反之则用pow(x+1,2)+2*x+1/x计算,然后按题目格式输出

(3)调试问题及解决方法

  • 本题较简单,在Dev c++中测试没有出错后就贴到了PTA上,一次过了

(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)设计思路

  • 根据题目,引用math.h文件,并设定实数变量a,b,c,area,perimeter,s,其中a,b,c为边的值,area存放计算出的三角形面积的值,perimeter存放三边之和的值,s就是s=(a+b+c)/2;
  • 用读入输入的值的scanf语句读入变量a,b,c的值
  • 用分支语句if-else来判断,当a,b,c的值满足(a+b>c)&&(a+c>b)&&(b+c>a)成立时进入计算步骤,否则输出These sides do not correspond to a valid triangle
  • 计算步骤中,先算出s的值,再用sqrt(s(s-a)(s-b)*(s-c))算出area的值;perimeter的值是perimeter=a+b+c

(3)调试问题及解决方法

  • 一开始没有想到if语句的判断可以连续使用两个&&,所以用了多个if语句进行判断,所以错误频出,后来和同学交流之后学会了
  • 原来没有设计实数变量s,全用(a+b+c)/2,导致area的计算式相当复杂,也有出错过

(4)本题PTA提交列表

3.出租车计价

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:

  • 起步里程为3公里,起步费10元;
  • 超起步里程后10公里内,每公里2元;
  • 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
  • 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。

(1).实验代码

    double s,price1,price2,price;
    int time,n;
    scanf("%lf%d",&s,&time);
    if (s<=3) {
        price1=10;}
    else if(s>3 && s<=10) {
        price1=10+2*(s-3);}
    else if(s>10){
        price1=24+3*(s-10);}
    if (time<5) 
    {
        price2=0;
    }
    else if(time>=5)
    {
        n=time/5;
        price2=n*2;
    }
    price=price1+price2;
    printf("%.0f\n",price);

(2)设计思路

  • 设置实数变量s,price1,price2,price,整数变量time,n,s存放要输入的路程的值,price1存放单独计算的路程的钱的值,price2存放单独计算的时间的钱的值,price存放price1+price2之和,time存放要输入的时间的值,n则用来存放time/5的值;
  • 首先读入键盘输入的s和time的值,用scanf语句
  • 接着用if语句先对s进行判断,当s<=3时,price1就为10;当s>3 && s<=10成立时,price1=10+2(s-3);当s>10时,price1=24+3(s-10),
  • 再用if语句对time进行判断,当time<5时,price2=0;当time>=5时,n=time/5且price2=n*2
  • 两个变量判断完成后,汇总到price,price=price1+price2;并以"%.0f"形式输出

(3)调试问题及解决方法

  • 最先是用if语句把s和time同时判断,然后出现了问题,就是当输入的s和time有一个不满足的时候输出的数字就错了,然后决定把s和time分开判断;做出题目后重新思考了s和time一起判断的可能,然后发现自己之前做不出是因为s的所有判断要和time的所有判断要一一结合,如下图才行

(4)本题PTA提交列表

4.程序设计联考

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

(1).实验代码

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

(2)设计思路

  • 定义整数变量account,b,account是存放输入的六位数的,b则是存放account/100000的结果;
  • 用scanf语句读入account的值;
  • 用多分支语句switch语句对计算出的b的值进行判断,若b1,则输出Hunan Agricultural University;若b2,则输出Jishou University;若b3,则输出Huaihua University;若b4,则输出Aerospace University;若b==5,则输出Ocean University;若b都不等于以上的数,则输出Other University
  • switch语句中跟在输出后面的break不能丢

(3)调试问题及解决方法

  • 这题在看过书本之后算是容易的,因此我在Dev c++中测试几遍没有问题后就PTA一遍过了

(4)本题PTA提交列表

二、截图本周题目集的PTA提交列表及最后排名。

PTA排名

三、本周学习总结

1.你学会了什么?

  • 学会在if语句中加入逻辑运算式,switch语句的简单应用,else-if语句的应用,
  • 在实际应用中将switch语句和if语句以及else-if语句组合运用

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

  • else-if语句与if语句的适用范围令我困惑,如它们之后的{}要在什么时候加,什么时候不加。

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

  • 对题目的解题思路的难以把握,比如出租车计价一题,一开始就没有找对方向,以至于浪费时间,看题目时多加思考,再仔细想想有哪些学过的知识用得上
  • 对语句的使用不是很好,反复几次写程序都找不到更好的写法,程序出错时也得找上一阵,多看书本,多写程序,尝试用不同方法解决一道题
posted @ 2017-10-22 15:33  那就这个名字  阅读(541)  评论(6编辑  收藏  举报