博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
C语言程序设计第三次作业
阅读量:5318 次
发布时间:2019-06-14

本文共 3704 字,大约阅读时间需要 12 分钟。

(一)改错题

计算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 
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:

1245552-20171028214500086-1859061742.png
错误原因:第九行的算式后面没有加分号。
改正方法:在第九行的算式后面加上分号。
错误信息2:
1245552-20171028215733195-891838532.png
错误原因:第七行判断语句后面多加了分号。
改正方法:删去第七行后面的分号。
错误信息3:
1245552-20171028214737664-636025625.png
错误原因:第十一行else语句后面多了条件。
改正方法:删去第十一行后面的条件。
错误信息4:
1245552-20171028215928445-1990237794.png
错误原因4:第十五行引号后面少了逗号。
改正方法:在第十五行引号后面加上逗号。
错误信息5:
1245552-20171028220128773-1983631564.png
错误原因:第十五行变量之间少了逗号。
改正方法:在第十五行变量之间加上逗号。
错误信息6:
1245552-20171028220505351-674934047.png
错误原因:第一个输出语句多加了\n。
改正方法:删去\n。
错误信息7:
1245552-20171028220802430-827689891.png
错误原因:最后的输出语句x对应的值错了。
改正方法:把第十五行的输出语句中的变量 x 对应的 %.2f 改为 %.1f 。
错误信息8:
1245552-20171028221024226-611567926.png
错误原因:输入语句后面没有加取地址符。
改正方法:在输入语句x前面加上取地址符。
错误信息9:
1245552-20171028221352305-505713586.png
错误原因:第十五行的输出语句中变量 y 对应的为 %.lf 。
改正方法:把第十五行的输出语句中的变量 y 对应的 %.lf 改为 %.1f 。
错误信息10:
1245552-20171028221529836-1099836244.png
错误原因:第六行的输入语句中 &x 对应的为 =%f。
改正方法:把第六行的输入语句中 &x 对应的 =%f 改为 %lf。
错误信息11:
1245552-20171028221650398-187523399.png
错误原因:判断语句条件错误。
改正方法:条件中再加一个“=”号。

(二)学习总结

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:确切含义为若同时符合条件a,b则运行x=x+1;若不符合条件a,则运行y=y+1。
else和离它最近的第二个if配对。
代码:

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

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

答:不能。因为条件从左到右运行。
正确表达式应为:
if(x>-10 && x<10)

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

程序(1)

#include 
int main(){ int a, b; scanf("%d %d", &a, &b); printf("a = %d, b = %d\n", a, b); return 0;}

输入123a后结果为:

1245552-20171028223125742-863889504.png
原因:遇到非法字符%d不能识别,所以输出结果错误,有问题,123a为一个数据,相当于b没有输入数据,所以输出为随机数1。
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(二)

#include 
int main(){ int a, b,n; n = scanf("%d %d", &a, &b); printf("n = %d\n", n); return 0;}

输出结果:

1245552-20171028224133883-1407305134.png
当你成功输入两个变量的时候第一次两个变量都合法,所以n读出为2。当你输入123a的时候含有非法字符,它不能读取出来,所以n只能读出一个整形常量,所以n=1。

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

1245552-20171028224505258-925660012.png

4.对其他你认为需要进行总结的内容进行总结。

在用else if语句的时候要注意每个else和if的对应关系,每个else,if语句执行时要加上中括号。
注意else if后面不能加分号。
不能忘了在输入语句后面的变量前面加取地址符。

(三)实验总结

  1. (1)题目

    判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
    (2)流程图
    1245552-20171028230542633-1568456772.png
    (3)源代码

    # include<stdio.h>

    int main()
    {
    int n,w,q,s,g;
    scanf("%d",&n);
    w=n/10000;
    g=n%10;
    q=n/10%10;
    s=n%10000/1000;
    if(w==g && q==s )
    {
    printf("yes");
    }
    else
    printf("no");

    return 0;

    }

(4)测试数据及运行结果

1245552-20171028230919789-428733730.png
(5)实验分析
问题1:一开始不会分离各个位数。
解决办法:通过询问老师会了。

  1. (1)题目

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

    # include <stdio.h>

    int main()
    {
    int a,b,c,d,s,f,m,n;
    scanf("%d %d",&m,&n);
    a = m/100;
    b = n/100;
    c = m%100;
    d = n%100;
    f = (b-a)*60+(d-c);
    s = f/60;
    f = f%60;
    if(0<s<10)
    {
    if(0<f<10)
    {
    printf("%02d:%02d",s,f);
    }
    else
    {
    printf("%02d:%d",s,f);
    }
    }
    else
    {
    if(24>=s>=10)
    {
    if(0<f<10)
    {
    printf("%d:%02d",s,f);
    }
    else
    {
    printf("%d:%d",s,f);
    }
    }
    }

    return 0;

    }

(4)测试数据及运行结果

1245552-20171028231747930-213522459.png
(5)实验分析
问题:一开始没有考虑小于10分钟的情况。
解决办法:加了一个判断条件。

  1. (1)题目

    中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
    (2)流程图
    1245552-20171028232116680-1427192144.png
    (3)源代码

    # include <stdio.h>

    int main()
    {
    int n,m;

    scanf("%d",&n);  m = n%5;  if (1000>=n>0);  {      if(m==0)      {          printf("Drying in day %d",n);      }      else      {          if(m<=3)          {              printf("Fishing in day %d",n);          }          else          {              printf("Drying in day %d",n);          }      }  }  return 0;

    }

(4)测试数据及实验结果

1245552-20171028232409945-424100731.png
1245552-20171028232458180-1565960074.png

  1. (1)题目

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

    # include <stdio.h>

    int main()
    {
    int n;
    double m;
    scanf("%d",&n);
    if(n>=0)
    {
    if(n<=50)
    {
    m = n0.53;
    printf("cost = %.2f",m);
    }
    else
    {
    m = 50
    0.53+(n-50)*0.58;
    printf("cost = %.2f",m);
    }
    }
    else
    {
    printf("Invalid Value!");
    }
    return 0;
    }

(4)测试数据及运行结果

1245552-20171028233105539-1634675991.png
1245552-20171028233114586-84276328.png

(四)PTA提交列表

1245552-20171028233632883-539799040.png
1245552-20171028233643758-1657326358.png
1245552-20171028233654008-2109111992.png
1245552-20171028233709180-364818471.png

转载于:https://www.cnblogs.com/lyw7777777/p/7748594.html

你可能感兴趣的文章