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

(一)实验总结

(一)改错题 (一)

计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
1242338-20171027133716367-952023734.png
输入输出样例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:
1242338-20171027133843961-1339680196.png
错误原因:if后面不应该有分号
解决方法:删去分号
错误信息2:
1242338-20171027134012211-2122808799.png
错误原因:y = 1 / x后面没有分号
解决办法:加上分号
错误信息三:
1242338-20171027134722992-676197554.png
错误原因:else后面不应该有条件
解决办法:将else后面的删除
错误信息四:
1242338-20171027134949617-1710718347.png
错误原因:字母之间没有用逗号分开
解决办法:在字母间加上逗号
错误信息五:
1242338-20171027135127242-1286775615.png
不符合题目要求
错误原因一:格式符错误
解决办法:将%f改为%lf
错误原因二:1/x的结果为整数
解决办法改成1.0/x
错误原因三:scanf中x前面没有&
改正方法:在x前面加上&
错误原因四:if(x = 10)只有一个等号,一个等号代表赋值
改为if(x == 10)
错误原因五:scanf("=%lf", &x);中的等号会影响输入
改正方法:删去等号
错误原因六: printf("f(%.2f) = %.lf\n",x,y); y应该保留一位小数
改正方法:改为 printf("f(%.2f) = %.1lf\n",x,y);

(二)学习总结

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

if(a)
   {
    if(b) 
    {
        x=x+1;
    }
   else{ 
        y=y+1;
        } 
   }

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

不能 -10<x<10在c语言中会从左至右运行。先判断x是否大于-10,若是则该式等于1,再判断1是否大于10,若x不大于-10,则该式等于0,再和10比较,但结果都是0
正确表达式应该是-10<x && x<10
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
程序(1)
运行结果:
1242338-20171027141609617-781430050.png
原因:因为a是int类型的,应该是整数,所以不会读入a,而b没有输入,输出的b为随机数
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2)
运行结果:
1242338-20171027141952851-1001057841.png
原因:a,b,n皆为int类型的,而输入的只有123 45符合要求而scanf会输出符合要求的个数,即为2
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:
1242338-20171027142429976-1428696658.png

源代码

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

return 0;

}

4.对其他你认为需要进行总结的内容进行总结。
自己做了这么多道题,改了很多错误,发现学习真的非常非常非常需要耐心和细心,英文的符号和中文的看起来差不多,却会引发完全不同的结果。另外还要注意编写代码时要规范,既方便自己不会看错搞混,也不会让其他人看着一脸懵逼。在设计程序时也要
注意要考虑周全,考虑到输入非法字符时应该怎么办,如何编写的尽量简洁,你一串很长的代码别人可能一两行就解决了。总之,要学的还有很多。

(三)(实验总结)

(1) 计算分段函数
1242338-20171027144410289-116129105.png
(2)流程图
1242338-20171027145020586-1551079668.png
(3)源代码

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

(4)测试数据及运行结果
1242338-20171027145103883-538206358.png
(5)实验分析
这道题应注意输入的可以是小数,所以x,y都要设成double以及最后的输出结果应该保留两位小数,注意格式。

(1) 算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商。
(2)流程图
1242338-20171027145814289-565058472.png

(3)源代码

#include<stdio.h>
int main()
{
int x,y,a,b,c;
double d;
scanf("%d%d",&x,&y);
a = x + y;
b = x - y;
c = x * y;
if(x%y == 0)
    {
    d = x / y;
    printf("%d + %d = %d\n",x,y,a);
    printf("%d - %d = %d\n",x,y,b);
    printf("%d * %d = %d\n",x,y,c);
    printf("%d / %d = %.0f\n",x,y,d);
    }
     else
    {
    d = (double)x/y;
    printf("%d + %d = %d\n",x,y,a);
    printf("%d - %d = %d\n",x,y,b);
    printf("%d * %d = %d\n",x,y,c);
    printf("%d / %d = %.2f\n",x,y,d);
}

return 0;
}

(4)测试数据及运行结果
1242338-20171027145915664-1182385808.png
(5)实验分析
此题仍然要注意小数的情况,a能不能被b整除有着区分,一个直接输出整数,一个保留两位小数。当结果不是小数是应该用double进行强制转化

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

​​ ,其中s=(a+b+c)/2。
(2)流程图
1242338-20171027150946601-1851993915.png
(3)源代码

    #include<stdio.h>
    #include<math.h>
    int main()
    {
int a,b,c;
double x,y,s;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
{
    s = (a+b+c)/2;
    x = a+b+c;
    y= sqrt(s*(s-a)*(s-b)*(s-c));
    printf("area = %0.2f; perimeter = %0.2f",y,x);
}
else
{
    printf("These sides do not correspond to a valid triangle");
}
return 0;
    }

(4)测试数据及运行结果
1242338-20171027151812258-1273621217.png
1242338-20171027151200820-976791995.png
(5)实验结果
问题1:计算结果错误
原因:计算面积时公式用错
解决办法:改正公式
这道题应该主要因为使用了sqrt函数,所以要在应该在开头加入#include<math.h>这个头文件,其次主要保留小数

(1)出租车计价

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

(3)源代码

    #include<stdio.h>
    int main()
    {
int b;
double a,c,e,d;
scanf("%lf%d",&a,&b);
if(a <= 3)
{
c = 10;
}
else if(a>=3 && a<=10)
{
c = (a-3)*2+10;
}
else
{
c = (a-10)*3+24;
}
d = b / 5 * 2;
e = c + d;
printf("%.0f",e);
return 0; 
    }

(4)测试数据及运行结果
1242338-20171027153242976-884624732.png
1242338-20171027153307039-944445217.png
1242338-20171027153539242-75044467.png

(5)实验分析
依旧需要注意小数的问题。。。

(四)(PTA提交列表)

1242338-20171027154026508-1732069062.png
1242338-20171027154037476-1218190420.png
1242338-20171027154047086-843170092.png

转载于:https://www.cnblogs.com/moying456/p/7742851.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值