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


    一、PTA实验作业

    题目1:计算分段函数

    1.实验代码

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

    2 设计思路

    • 1.定义两个双精度浮点型变量x,y
    • 2.输入x的值
    • 3.判断x是否大于等于0
    • 4.若是,则y=sqrt(x),若否,则y=pow(x+1,2)+2*x+1/x
    • 5.输出y的值

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

    • (1)编译问题:定义了变量x和f(x)

    • 解决办法:从错误提示中知道不能用f(x),百度后得知c语言中表达式的左边不可以有变量,故不能用f(x),只能重新设变量y

    4.本题PTA提交列表(要提交列表,不是结果)

    题目2:7-4 输出三角形面积和周长##

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

    1.实验代码

      int a,b,c;          
      double s,area,perimeter;           //area代表三角形的面积,perimeter代表三角形的周长
      scanf("%d %d %d",&a,&b,&c);
    if(a+b>c&b+c>a&a+c>b)            //检验abc三边是否能构成三角形
     {
       s=(a+b+c)/2.0;
       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.定义三个整数型变量a,b,c来存放三角形的三条边,定义三个双精度浮点型变量s,area,perimeter
    • 2.输入三条边的大小a,b,c
    • 3.判断输入的a,b,c是否能构成三角形
    • 4.若能,则 s=(a+b+c)/2.0, area=sqrt(s(s-a)(s-b)*(s-c)) , perimeter=a+b+c;并输出area和perimeter的值
    • 5.若不能,则输出错误提示-These sides do not correspond to a valid triangle

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

    • 1.sqrt函数的使用错误导致编译错误

    • 2.解决方法:上网百度DevC++的错误提示得知是sprt函数的使用错误并且知道了sqrt的使用对象必须是double或是float型的数据

    • 3.同时也反思了:尽管一开始定义s是double型,但是一开始是用s=(a+b+c)/2 得来的,又忽略了整数除以整数等于整数这个易错点
      所以要得到double型的s,必须用s=(a+b+c)/2.0

    4.本题PTA提交列表(要提交列表,不是结果)

    题目3:7-6 出租车计价##

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

    1.实验代码

    
      double s,money;            //路程和路费 
      int time;                         //等待时间 
      scanf("%lf%d",&s,&time);   
    if(s<=3){                          //判断距离 
       money=10;
    }
    else if(s>3&&s<=10){         
       money=10+(s-3)*2;
    }
    else{
       money=10+7*2+(s-10)*3;
    }
    if(time<5){                     //判断时间 
      money=money+0;     
    }
    else{
      money=money+time/5*2;
    }
    
      printf("%.lf",money);       //%.lf可用于取整 
    
    
    

    2 设计思路

    • 1.定义两个双精度浮点型变量s,money分别来存放路程和路费,定义一个整数型变量time来存放路途中耽误的时间
    • 2.判断距离是否大于3,若不是,则money=10,若是,则money=10+72+(s-10)3
    • 3.判断时间是否大于5,若不是,则money=money+0;若是,则 money=money+time/5*2
    • 4.输出money

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

    • (1)编译错误:强行用%d来输出double型的money来实现输出整数型
      解决方法:上网百度到double型变量想要四舍五入成整数输出的方法是%.1f
    • (2)答案错误:误认为路程也要四舍五入导致结果错误
      解决方法:多次试用题目数据后重新审题发现没有提及路程需要四舍五入,反思认真审题别解读过度
    • (3)部分答案错误:因为想要把money变成整数型然后利用int函数使它变成整数型,然后输出时又用了 %.1f来实现double转变成整数型
      解决方法:多次错误后发现自己把它认真地取整了两次,并且上网做了int函数的功能向下取整为最接近的整数 ,所以利用int(money+0.5)来实现四舍五入也是错误

    4.本题PTA提交列表(要提交列表,不是结果)


    题目4:7-8 程序设计联考

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

    1.实验代码

    
     int account,x;                 //account代表学号,x代表学号的首位数字
     scanf("%d",&account);
     x=account/100000;
      switch(x){
    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,x 分别来存放学号和学号的首位数字
    • 2.判断x的数值大小
    • 3.利用switch语句实现多分支结构,根据用户输入的account得到的x,用switch语句将相应的学校输出

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

    • (1)部分答案错误:题目中的Other University是分行写的误认为两个单词之间没有空格
    • 解决的方法:认真对一遍题目后觉得other university应该跟上面的格式一致,便加了空格就通过啦~~~

    4.本题PTA提交列表(要提交列表,不是结果)


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

    三、本周学习总结

    1.你学会了什么?

    • 1.我对分支结构中的if-else语句的使用更加的清楚:(1)
      if(表达式) 语句1;else 语句2;
      其中的语句1,2都必须是一条语句,若是多个表达式则用复合语句,注意复合语句是一条语句 (2)if后面不是非要跟上else的,视情况可不加 ,else后面也可以是空语句 (3)else总是与它向上最近的if相配对,注意不要搞错逻辑关系
    • 2.学会了switch语句来实现多分支结构,
      switch(表达式){ case 常量表达式:语句段1 case 常量表达式:语句段2 ··· default 语句段}
      在switch语句中常遇到的易错点:(1)switch(x)中的x必须是整型 (2)case后面应该是一个常量表达式,且必须要有一个空格 (3)switch中每个语句段的末尾使用break才能跳出switch否则执行其后的所有语句段 ······
    • 3.学习了字符型数据:(1)字符型数据包括字符型变量op和字符型常量‘a' '+''-''*'和’/'等(必须要有单引号) (2)字符型变量在定义时用类型名是char,在函数调用的格式控制字符串中相应的格式控制说明是 %c (3)字符输入函数getchar()从键盘输入一个字符 ,字符输出函数putchar()输出一个字符
    • 4.逻辑运算:!代表非,&&代表与,||代表或 注意:-3<=x<=7是错误的表达,将是个恒真命题,正确:-3<=x&&x<=7

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

    • 1.对getchar和putchar的使用还不熟练
    • 2.不太会利用if和getchar相结合来实现输入多个字符的程序
    • 3.还有利用if语句来实现判断是否为数字字符和字母字符的程序也不熟练
    • 4.对于含有多层嵌套型if-else的语句程序的理解不够迅速
    • 5.对于switch,if-else,getchar等等的易错点的了解还不够完整
    • 6.课本P55中的自动售货机程序还不太明白

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

    • 1.从这次的PTA中我发现自己仍然存在着各种细节错误,eg:scanf中的 "; 输成 ;"
    • 解决方法:撸起袖子加油干!!!继续沉迷在代码中,每晚打两个小时代码,等到熟练到一定的程度后找错误成为了一种条件反射(想想就很美滋滋······)
    • 2.设计程序的思路不够准确和迅速:看到题目后没有迅速的反应而且容易出现偏差
    • 解决方法:多看课文经典的例题并且掌握它,然后多打代码题多看题型,紧跟着老师的进度一步一步向前进
    • 3.对Dev-C++的调试还不够熟练
    • 在今后的题目中遇到问题要尽量学会自己去找出错误,学会利用Dev-C++调试一步步发现自己的错误,终归还是Practice makes perfect和题海战术~~~
    • 4.对易错点的总结目前还不够完整
    • 养成对老师所讲到的易错点,自己遇到的易错点利用学长安利的app或者自己的笔记本及时记录下来的好习惯然后慢慢从总结中进步~~
  • 相关阅读:
    SPOJ-BRCKTS (括号序列,线段树)
    bzoj 2223 [Coci 2009]PATULJCI
    bzoj 1049 [HAOI2006]数字序列
    bzoj2091 [Poi2010]The Minima Game
    bzoj 1016 [JSOI2008]最小生成树计数
    bzoj5105 晨跑 数论lcm
    bzoj 1211 [HNOI2004]树的计数
    bzoj 1430 小猴打架 prufer 性质
    Swing界面组件的通用属性
    数字调节控件JSpinner的使用
  • 原文地址:https://www.cnblogs.com/lyq622/p/7707564.html
Copyright © 2020-2023  润新知