# 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; 
 }

错误信息:quAXuur.png

错误原因:输入函数中不能有等号

改正方法:2vG81pB.png

错误信息:2vG81pB.png

错误原因:x是double类型的,输入函数不对

改正方法:m4g5qio.png

错误信息:m4g5qio.png

错误原因:输入函数格式不对

改正方法:8eeUZ7m.png

错误信息:y8hWgv1.png

错误原因:if else结构括号不能有分号不能有

改正方法:xWQm9T6.png

错误信息:xWQm9T6.png

错误原因:把输入的值和x比较是否相等不对

改正方法:fCa0qDW.png

错误信息:fCa0qDW.png

错误原因:x是double类型的

改正方法:0qedbse.png

错误信息:3WepL9R.png

错误原因:if else结构不正确

改正方法:CQk7Z22.png

错误信息:adbcl3B.png

错误原因:输出函数格式不正确

改正方法:TFn6Odc.png

错误信息:TFn6Odc.png

错误原因:保留小数位数不正确

改正方法:D0ZVsuz.png

错误信息:D0ZVsuz.png

错误原因:浮点数输出保留一位小数

改正方法:Z2uLYwv.png

错误信息:FcekEcA.png

错误原因:语句后没分号

改正方法:0lBCCOV.png

(二)学习总结

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

答:如果a是真的进入循环,判断如果b是真的, x=x+1,否则, y=y+1。else和离他最近的if(b)匹配。

if(a)
{
     if(b) 
     {
        x=x+1;
     }
     else 
    {
        y=y+1; 
    }
        
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?

答:不能,因为(-10<x<10)表示1,即进行了两个判断-10<x确定的话得到1,不确定得到0,0和1都小于10得到1.
正确的表达式
(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;
}

输出结果
pr2aEVA.png
原因
b没有被赋值,是一个随机数。

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;
}

输入123 45
输出结果:
6th9nPp.png
原因:n=2,因为a=123,b=45,scanf()函数的返回值是成功读入数据的个数,所以只有a,b两个数,所以n=2。
输入123a
输出结果:
S6xtQ0b.png
原因:n=1,因为a=123,b=0,scanf()函数的返回值是成功读入数据的个数,所以只有a一个数,所以n=1。

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

UjzDZyN.png
4wGvAd5.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.对其他你认为需要进行总结的内容进行总结。

在if条件语句中当出现一个“=”是表示将等号右边的值付给左边的变量,而且左边的不可以为式子,当要表示两个量相等时应该输入“==”。

(三)实验总结

3 回文数

(1)题目
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(2)流程图
1242870-20171027162413258-1733315923.png
(3)源代码:

    #include <stdio.h>
    int main(void)
    {
int n,a,b,c,d;
scanf("%d",&n);
a=n/10000;
b=n%10000/1000;
c=n%100/10;
d=n%10;
if(a==d,b==c)
{
    printf("yes");
}
else
{
    printf("no");
}
    
return 0;
    }

(4)测试数据及运行结果:
1242870-20171027160727789-1528298400.png
1242870-20171027160908023-48046502.png
(5)实验分析:
在一开始的运行中发现错误原因在于if条件的=没有改成==,要注意if条件中是判断,一般不使用=。

5 计算火车运行时间

(1)题目
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
1242870-20171027161315148-457847994.png
(3)源代码

#include <stdio.h>
int main()
{
  int t1,t2,h1,m1,h2,m2,h3,m3;
  scanf("%d %d",&t1,&t2);
  h1 = t1/100;
  m1 = t1%100;
  h2 = t2/100;
  m2 = t2%100;
  if((m2-m1)< 0)
  {
    h3=h2-1-h1;
    m3=m2+60-m1;
  }
  else
  {
    h3=h2-h1;
    m3=m2-m1;
  }
  printf("%02d:%02d",h3,m3);
}

(4)测试数据及运行结果
1242870-20171027161833711-1222568995.png
(5)实验分析
此题未出现大问题,主要是编译错误等小问题需要多加细心。

7 三天打鱼两天晒网

(1)题目
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图
1242870-20171027162537055-158217183.png
(3)源代码
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n % 5 <= 3 && n % 5 != 0)
{
printf("Fishing in day %d",n);
}
else
{
printf("Drying in day %d",n);
}
}

(4)测试数据及运行结果
1242870-20171027162750398-112451468.png
1242870-20171027162828039-110092331.png
(5)实验分析
在对n进行求余时要注意除去的应当是几位数。

9 阶梯电价

(1)题目
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
(2)流程图
1242870-20171027163059758-19331133.png
(3)源代码

#include <stdio.h>
int main(void)
{

  double a,b;
  scanf("%lf",&a);
  if(a < 0)
  {
    printf("Invalid Value!");
  } 
  else if(a <= 50)
  {
    b=a*0.53;
    printf("cost = %.2f",b);
  }
  else 
  {
    b=26.5+(a-50)*0.58; 
    printf("cost = %.2f",b);
  }
  return 0;

}

(4)测试数据及运行结果
1242870-20171027163443070-1189261813.png
1242870-20171027163514523-1362647728.png
(5)实验分析
在输入时的数据应当是%lf而不是%f,注意double和flout的区别。

(四)PTA提交列表

PTA中完成选择结构(1)习题集的提交列表截图。
如图:
1242870-20171027163859601-1706805046.png
1242870-20171027163915789-1342286781.png
1242870-20171027163930117-921572857.png

转载于:https://www.cnblogs.com/1701a/p/7744081.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值