第三次作业

改错题

    错误信息:![](http://images2017.cnblogs.com/blog/1242824/201710/1242824-20171027112926586-913924886.png)

  错误原因:有语句没加分号
  改正方法:在y=1/x后加;
  错误信息:

  错误原因:if语句后面有分号
  改正方法:去掉if语句后面的分号
错误信息:

  错误原因:else后面加了条件
  改正方法:去掉else后面的条件
  错误信息:

  错误原因:xy之间和之前缺少,
  改正方法:xy之间之前加,
错误信息:

  错误原因:输入缺少地址符
  改正方法:scanf("%f", &x);
  错误信息:

  错误原因:if后面的等于误用为赋值
  改正方法: if(x ==10)
错误信息:

  错误原因:double变量的输入格式字符串用了f
  改正方法:scanf("%lf",&x);
  错误信息:

  错误原因:输出的格式字符串1写成l
  改正方法:printf("f(%.2f) = %.1f\n",x,y);
错误信息:

  错误原因:输出f()内应为一位小数,.2f是两位小数

学习总结

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。

    (1)如果a是真则判断b,b是真则给x+1,b是假则给y+1
    (2)和第二个
    (3)

#include<stdio.h>
int main()
{
    if(a)
    {
        if(b)
        {x=x+1}
        else
        {y=y+1}
    }
    return 0;
}

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?

(1)不能
(2)两个条件要想合在一起应该用&&
(3)(x<10&&x>-10)

3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?

(1)a=123,b=1
(2)如果有空格,则以空格为分界分成两个数,如果没空格,则默认除了第一个数每多两个数都会算为第一个数,并把最后一位当做第二个数。遇到非法字符,则非法字符及以后的字符全作废,若没有正常字符,则第一个数算0,第二个算1

4.分别输入123 45和123a,看看输出结果是什么?为什么?

(1)n=2,n=1
(2)把scanf赋值给变量时,scanf的值是输入的合法字符的个数

5.修改程序(1),当输入非法数据时,输出“Input error!".

#include <stdio.h>
int main()
{   
    int  a,b,n;
    n=scanf("%d%d", &a, &b);
    if(n==0||n==1) 
    {
	    printf("Input error!");
}
    else
    {
	    printf("a = %d,b = %d",a,b);
}
    return 0;
}

6.对其他你认为需要进行总结的内容进行总结。

ifelse结构里,如果if下面是else,则如果if条件为真旳话直接进行这个后跳出,还是if旳话把所有if都判断一遍再往真的条件下进行。switchcase中,如果case下面有break旳话进行完这个case马上跳出,没有旳话把此case及以后所有case下的都运行一遍再跳出,如果所有case都不符合计算要求就在default里计算,没有default直接跳出。

实验总结

计算分段函数

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

(3)

#include<stdio.h>
#include<math.h>
int main()
{
    double x,y;
    scanf("%lf",&x);
    if(x>=0)
    {
	    y=pow(x,0.5);
    }
    else
    {
	    y=pow(x+1,2)+2*x+1/x;
    }
    printf("f(%.2f) = %.2f",x,y);

    return 0;
}

(4)


(5)
问题1:程序运行停止
原因:没输地址符
解决办法:在变量前输入地址符

算数入门之加减乘除

(1)
对于输入的两个整数,按照要求输出其和差积商。
(2)

(3)

#include<stdio.h>
int main()
{
int A,B,a,b,c,d;
double e,f;
scanf("%d%d",&A,&B);

    a=A+B;
    b=A-B;
c=A*B;
printf("%d + %d = %d\n",A,B,a);
printf("%d - %d = %d\n",A,B,b);
printf("%d * %d = %d\n",A,B,c);
f=A%B;
if(f==0)
{
	d=A/B;
	printf("%d / %d = %d",A,B,d);
}
else
{
	e=A*1.0/B;
	printf("%d / %d = %.2f",A,B,e);
}

return 0;
}

(4)


(5)
问题1:if处报错
原因:等于应该由组成,写成了=
解决办法:把=改成

输出三角形面积和周长

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

(3)

#include<stdio.h>
#include<math.h>
int main()
{
  int a,b,c;
  double s,area,perimeter;
  scanf("%d%d%d",&a,&b,&c);
  if(a+b>c && b+c>a && c+a>b)
  {
    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");
  }

  return 0;
}

(4)

(5)问题1:停止运行
原因:未加地址符
解决办法:scanf后面的变量前加地址符

出租车计价

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

(3)

#include<stdio.h>
int main()
{
  int t;
  double km,yuan;
  scanf("%lf%d",&km,&t);
  if(km<=3)
  {
    yuan=10+t/5*2;
    printf("%.0f",yuan);
  }
  else if(km>3&&km<=10)
  {
    yuan=10+(km-3)*2+t/5*2;
    printf("%.0f",yuan);
  }
    else 
    {
      yuan=10+7*2+(km-10)*3+t/5*2;
      printf("%.0f",yuan);
    }

    return 0;
}

(4)

(5)
问题1:提交结果总是答案错误
原因:把yuan变量给强制int化,导致后面小数被略掉
解决办法:去掉int强制化,输出格式字符串改成%.0f,让其四舍五入

PTA提交列表

posted @ 2017-10-27 15:27  哔莉莉莉莉  阅读(305)  评论(0编辑  收藏  举报