zoukankan      html  css  js  c++  java
  • C语言第二次博客作业分支结构

    一、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中,因此多题都是一次提交即正确。
  • 相关阅读:
    cookie、localStorage、sessionStorage及三者的区别
    js中的宏任务和微任务
    IDEA工具第二篇:自定义Java注释模板
    JDBC注册驱动的三种方式
    Java POI导出Excel,打开提示“此文件中的某些文本格式可能已经更改......”
    day29 文件的上传和下载 socketserver(并发)
    day 28 黏包 ssh模块 subprocess模块
    day 28 网络基础相关的知识
    day 27 网路编程 面向对象多继承
    day 26 约束、自定义异常、加密hashlib、logging
  • 原文地址:https://www.cnblogs.com/smtwula/p/7712684.html
Copyright © 2011-2022 走看看