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或者自己的笔记本及时记录下来的好习惯然后慢慢从总结中进步~~
原文地址:https://www.cnblogs.com/lyq622/p/7707564.html