C语言程序设计第三次作业

(一)改错题
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。

输入输出样例1:
  Enterr x: 10.0
  f(10.0) = 0.1
输入输出样例2:
  Enter x: 234
  f(234.0) = 234.0
源程序(有错误的程序)
#include <stdio.h>
int main(void)
{
double x,y;
printf("Enter x: \n");
scanf("=%f", x);
if(x = 10);
{
y = 1 / x
}
else (x != 10)
{
y = x;
}
printf("f(%.2f) = %.lf\n" x y);
return 0;
}

  改错   
 错误信息1:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029140804008-1618621871.png)

  错误原因:经过检查发现,在if语句中,“y = 1/ x”后缺少“;”
  改正方法:在后边加上”;”

  错误信息2:1242368-20171029141345305-1230205901.png

  错误原因:if(x = 10);后边加了;
  改正方法:去掉;

   错误信息3:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029141605992-684376290.png)

  错误原因:else后边加东西了
  改正方法:去掉(x != 10)

  错误信息4:1242368-20171029141751992-1782150459.png

  错误原因:输出语句中 没用逗号分离
  改正方法:在"后边,x后边加上;

   错误信息5:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029142350148-528824331.png)

  错误原因:输入10.0 后 ,输出不一样,x保留一位小数%.2f是保留两位小数
  改正方法:把%.2f 改为%.1f

  错误信息6:1242368-20171029143011508-1939961086.png

  错误原因:scanf语句中x前没有&
  改正方法:加上&

   错误信息7;![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029143406398-694031768.png)

  错误原因:输入语句中的不对
  改正方法:把=去掉 改成%lf

  错误信息8:1242368-20171029144337398-1761351043.png
  错误原因:不应该有\n
改正方法:删去\n

(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:(1)确切含义:ifa,b同时成立,那么输出x=x+1,否则,输出y=y+1
(2)这个else和第二个if更配
(3)if(a && b)
{
printf("x=x+1");
}
else
{
printf("y=y+1");

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答 :(1)不能这么表示。
(2) 这样的话先会比较-10和x的大小,然后再比较后者,这样不会输出正确结果。
(3)(x>-10 && x<10)

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

include <stdio.h>

int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
(1)输出结果:1242368-20171029154546539-607689418.png
(2)因为非法字符无法输出,所以随机输出了。

scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2)

include <stdio.h>

int main()
{
int a, b,n;
n = scanf("%d %d", &a, &b);
printf("n = %d\n", n);
return 0;
}
答:(1)1242368-20171029154954758-811003175.png
(2)1242368-20171029155030773-1548733983.png
(3)因为返回值是成功读取变量的个数,所以当输入“123 45”的时候,可以读出两个数据,故n=2;当输入123a的时候因为a为非法数据,不能赋值,所以只将123赋值给了a,所以n=1。

4.总结:通过改这些题,做这些题,注意整形,实型的区别,还有就是if,else语句的用法,注意相关的格式。

(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(1)中的3、5、7、9题,学号末位数是双数的同学完成选择结构(1)中的2、4、6、8题。

  1. (1)题目

1242368-20171029160708148-485089981.png

(2)流程图
1242368-20171029160726226-470060032.png

(3)源代码
int main(void)
{
double x,result;
scanf("%lf",&x);
if (x >= 0)
{
result = sqrt(x);
printf("f(%.2f) = %.2f",x,result);
}
else if (x < 0)
{
result = pow((x+1),2)+2*x+1/x ;
printf("f(%.2f) = %.2f",x,result);
}
return 0;
}
(4)测试数据及运行结果
1242368-20171029161120195-1074679554.png
1242368-20171029161137461-1094145289.png

(5)实验分析
记录实验中遇到的问题及解决方法,格式如下:
问题:1242368-20171029161848836-44030679.png
解决办法:加上#include<math.h>

4 .
(1)题目
对于输入的两个整数,按照要求输出其和差积商。在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。
(2)流程图
1242368-20171029162810789-749521564.png
1242368-20171029162829898-1185202583.png

(3)源代码

include<stdio.h>

int main()
{
int a,b;

scanf("%d %d",&a,&b);
if(a%b == 0)
{
    printf("%d + %d = %d\n%d - %d = %d\n%d * %d = %d\n%d / %d = %d",a,b,a+b,a,b,a-b,a,b,a*b,a,b,a/b);
}
else 
{
    printf("%d + %d = %d\n%d - %d = %d\n%d * %d = %d\n%d / %d = %.2f",a,b,a+b,a,b,a-b,a,b,a*b,a,b,a/(double)b);

}

return 0;

}
(4)测试数据及运行结果
1242368-20171029163111039-1602334791.png
1242368-20171029163140570-516664496.png

(5)实验分析
问题1:1242368-20171029163258930-249924474.png
原因:a/b进行小数转化,在前面加(double)
解决办法:XXXXXX

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

(3)源代码

include<stdio.h>

include<math.h>

int main()
{
int a,b,c;
double s,area,p;
scanf("%d %d %d",&a,&b,&c);
if (a+b>c && a+c>b && b+c>a)
{
s = (a + b + c)/2.0;
area = sqrt(s(s - a)(s - b)*(s - c));
p = a + b + c;
printf("area = %.2f; perimeter = %.2f",area,p);

}
else
{
printf("These sides do not correspond to a valid triangle");
}

return 0;
}
(4)测试数据及运行结果
1242368-20171029164550492-1639891930.png
1242368-20171029164620008-449474634.png

(5)实验分析

问题1:输出错误
原因:经检查,未加入数学字符#include

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

(3)源代码

include <stdio.h>

int main()
{
int t,x,m;
double s,q,y;

scanf ("%lf %d",&s,&t);
s = s*10;
if(s>100)
{
    s = s/10;
    q = (s-10)*3+10+14;
}
else
{
    if(s>=30)
    {
        s = s/10;
        q = (s-3)*2+10;
    }
    else
    {
        if (s>=0)
        {
            q = 10;
        }
    }
}
x = t/5;
q = 2*x+q;
m=(int)(q+0.5);
printf("%d\n",m);

return 0;

}
(4)测试数据及运行结果
1242368-20171029170231273-1145297991.png
1242368-20171029170259851-93676648.png
1242368-20171029170331805-1331507619.png

(5)实验分析
记录实验中遇到的问题及解决方法,格式如下:
问题1:结果运算出来不正确
原因:没有考虑按每5分钟2元计收(不足5分钟则不收费)。
(四)PTA提交列表

1242368-20171029171232539-1486656711.png
1242368-20171029171249648-948793270.png

转载于:https://www.cnblogs.com/15030280957liu/p/7750481.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值