C语言程序设计第三次作业——选择结构(1)

(一)改错题

计算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; 
     }
错误一

第十行前没有加分号

改正方法:在y=1/x后加分号

错误二

eles没有与之相匹配的if

改正方法 把if后面的分号去掉

错误3

eles后不需加判断

改正方法:把eles后的的判断去掉

错误4

引号与变量需要用逗号隔开  变量之间也需要用逗号隔开

错误五

 

输出语句中为%lf

改正方法 将%.lf改为%.1f

错误六

输出中显示的是一位小数  %.2f应改为%.1f

错误七

scanf语句中因为定义为double类型 

改正方法  应用lf 且把=%f中的=去掉

错误8

scanf语句中没有加取地址符 

改正方法 在x前加入取地址符&

错误九

给出的输出格式中没有换行

改正方法 把第一个printf中的\n去掉

错误十

if后的判断应为等于

改正方法 将=改成==

(二)学习总结

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(b)配对

else应与最近的未配对的if进行配对

if(a)
{
    if(b)
    {
        x=x+1;
    }
else
{
y=y+1;
}
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能 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;
}
输出结果为 a=123 b=1
因为定义的为整型 所以遇到字符型会停止读取 认为已经输入完 所以给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", n);
    return 0;
}
输结果为n=2 n=1因为n为输入的变量的个数 所以输入为123 45是两个都是整型 所以可以读取两个变量
输入123a是 遇到了非法字符 所以停止读取 只能读取123

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

修改如下

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

7-2 计算分段函数[2]

 #include<stdio.h>
 #include<math.h>
 int main(void)
 {
     double x = 0.0,y = 0.0;
     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;
 }

 

 

 

 7-4 算术入门之加减乘除

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

 

 

 

 7-6 输出三角形面积和周长

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

 

 

 

 7-8 出租车计价

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

 

 

 

 

posted on 2017-10-29 12:21  浅忆丶幻梦  阅读(288)  评论(0编辑  收藏  举报

导航