• 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: 
    "); 
        scanf("=%f", x);
        if(x = 10);
        { 
            y = 1 / x
        }
        else (x != 10)
        {
           y = x;
        }
        printf("f(%.2f) = %.lf
    " x y); 
        return 0; 
     }
    

    对源程序进行编译结果如图:

    错误1:在第10行缺少分号
    改正1:加上分号,注意这种错误不能再犯
    继续编译

    错误2:else前边没有定义的if
    改正2:将if后边的分号去掉
    继续编译

    错误3:在else后边加了条件将,格式错误
    改正3:将后边的条件去掉
    继续编译

    错误4:在15行中的x和y中间缺少了逗号,格式有问题
    改正4:在中间加上逗号,粗心,以后要注意。
    编译程序无错误

    但输入数出现停止运行的 情况

    错误5:在代码第六行中输入缺少&,这也属于格式错误
    改正5:中间加上取地址符

    继续编译则输入数有错误

    错误6:输入10.0的时候,输出结果为0与题目中要求不符
    改正:重新检查代码,将lf改成1f

    继续编译

    暂时正确,但输入情况2还有错误

    错误7:当输入整数时结果是错误的依然显示10.00
    改正7:经检查第6行应将f改为lf
    继续编译还是出现错误

    错误8:编译中等号没体现出来,导致结果出现错误
    改正8:将x =10改为x==10
    编译结果正确

    代码如下:

     #include <stdio.h> 
     int main(void)
     { 
        double x,y;
        printf("Enter x: 
    "); 
        scanf("=%lf", &x);
        if(x == 10)
        { 
            y = 1 / x;
        }
        else 
        {
           y = x;
        }
        printf("f(%.2f) = %.1f
    ", x, y); 
        return 0; 
         }
    

    (二)学习总结
    1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
    答:此题主要判断a与b是否同时成立,若成立,则执行x=x+1,若不成立,则执行y=y+1,其中else与第二个if配对
    代码如下:

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

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

    答:不能这样表达,在c语言中程序是从左往右执行来判断是0还是1的,所以在此程序中会先判断最开始是否成立,

    成立为1,不成立为0,接着往下判断正确表达式应该为:(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
    ", a, b);
    return 0;
    }
    

    结果:

    原因:题目要求输入整形数据,而在输入过程输入了123a如果输入非法数据会被认为程序终止运行,所以a=123,b被程序赋予任意值为1

    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);
    return 0;
    }
    

    输出结果:


    原因:

    scanf()函数的返回值是成功读取数据的个数,题目中输入的是整形int,在情况1中读取两个数据返回值为2,而在2中遇到非法字符a,则程序异常停止,读取数据返回值为1

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


    结果:

    4总结
    (1)在写程序时总是粗心忘掉一些必要的符号,导致格式错误
    (2)在赋值的时候总是忘掉“==”写成“=”
    (3)还有就是好多函数的使用规则没弄清楚,基础不扎实

    (三)实验总结

    2
    (1)题目

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

    注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

    (2)流程图

    (3)源代码

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

    (4)结果:

    (5)实验分析
    本题实际要求将x fx定义成double 型而之前没有想到这个,用的整型变量,导致浪费了好长时间也没有运行出结果

    4.(1)题目
    算术入门之加减乘除
    对于输入的两个整数,按照要求输出其和差积商。
    输入格式:
    在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。

    (2)流程图

    (3)源代码

     #include<stdio.h>
    int main()
    {
    int a,b,x,i,j,k;
    float m;
    scanf("%d %d",&a,&b);  
    x=a+b;
    i=a-b;
    j=a*b;
    printf("%d + %d = %d
    ",a,b,x);
    printf("%d - %d = %d
    ",a,b,i);
    printf("%d * %d = %d
    ",a,b,j);
    
    if(a%b==0)
    {
    k=a/b;
    printf("%d / %d = %d
    ",a,b,k);
    }
    else
    {
    float a1=a*1.00;
    float b1=b*1.00;
    m=a1/b1;
    printf("%d / %d = %0.2f
    ",a,b,m);
    }
    return 0;
    }
    

    (4)结果

    (5)总结
    带小数点的转换总是有问题,这一部分有待学习
    6(1)题目
    本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
    ​s(s−a)(s−b)(s−c)

    ​​,其中s=(a+b+c)/2。
    输入格式:
    输入为3个正整数,分别代表三角形的3条边a、b、c。
    输出格式:
    如果输入的边能构成一个三角形,则在一行内,按照
    area = 面积; perimeter = 周长
    的格式输出,保留两位小数。否则,输出
    These sides do not correspond to a valid triangle
    (2)流程图

    (3)源程序

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

    (4)结果

    (5)分析

    这个感觉没什么问题编译直接通过

    8(1)题目

    本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
    起步里程为3公里,起步费10元;
    超起步里程后10公里内,每公里2元;
    超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
    营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
    输入格式:
    输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
    输出格式:
    在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元,
    (2)流程图

    (3)源代码

    #include<stdio.h>
    int main()
    {
       float a,b;
       int x,y,c;
       scanf("%f %d",&a,&x);
       y=(x/5)*2;
    if(a<=3.0)
    {
     b=10+y;
     c=(int)(b+0.5); 
     printf("%d",c);
        }
    else if(a>3&&a<10)
    {
    b=10+(a-3)*2+y;
    c=(int)(b+0.5);
    printf("%d",c);
        }
    else
    {
     
    b=10+14+3*(a-10)+y;
    c=(int)(b+0.5);
    printf("%d",c);
       }
       return 0;
    }
    

    (4)结果

    (5)分析
    (四)PTA提交列表

  • 相关阅读:
    Tomcat域名绑定
    Windows下搭建PHP开发环境
    创业项目该如何选择技术?
    linux mount 挂接新硬盘
    Linux 查看系统硬件信息
    this super的用法
    构造方法
    多态
    抽象类和接口
    继承
  • 原文地址:https://www.cnblogs.com/xing--/p/7740470.html
Copyright © 2020-2023  润新知