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: \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:

错误原因:

if表达式后面不加分号

改正方法:

把if表达式后面分号去掉

错误信息2:

错误原因:

(1/x)后面缺分号

改正方法:

在(1/x)后面加上分号

错误信息3:

错误原因:

else后面没有表达式:

改正方法:

else后面加上if

错误信息4:

错误原因:

xy前缺逗号

改正方法:

xy前加上逗号

错误信息5:

错误原因:

不应该换行

改正方法:

把\n去掉

错误信息6:

错误原因:

与结果不符,存在多处错误

改正方法:

scanf括号中x前加上&,把"=%f"换为"%lf"
if表达式中把x = 10换为x == 10
把printf("f(%.2f) = %.lf\n换为printf("f(%.1f) = %.1lf\n
把1/x换为1.0/x

(二)学习总结

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)配对
规范化格式

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

不能.C语言中不能直接进行关系运算用逻辑运算符链接.正确表达式:(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;
}
输出结果:

原因:输入123a没有空格所以b没有输入b产生的是随机数,a输入123a,a为整型只能读入123

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;
}
运算结果:

原因:scanf()函数成功读入了俩个数据,则n=2,这俩数据是123 45,123a为非法数据不能读入

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

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

取地址符号不能忘记.编码时一定得理解题的要求,不能盲目去做.逻辑运算符的短路性:若表达式的值可由先计算的左操作值单独推导出来,那么将不再计算右操作的值

(三)实验总结

3.回文数

(1)题目

判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。

(2)流程图

(3)源代码

include <stdio.h>

int main(void)
{
int n,a,b,c,d;
scanf("%d",&n);
a = n / 10000;
b = n % 10;
c = n / 10 % 10;
d = n % 10000 / 1000;
if(ab&&cd)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}

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


(5)实验分析

无错误

5 计算火车运行时间

(1)题目

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

(2)流程图


(3)源代码

include <stdio.h>

int main(void)
{
int A,B,C,D,E,F,G,H,J,I;
scanf("%d %d",&A,&B);
C = A / 100;
D = B / 100;
E = A % 100;
F = B % 100;
G = D - C;
H = F - E;
if (F>=E)
{
printf("%02d:%02d",G,H);
}
else
{
D = D - 1;
F = F + 60;
J = D - C;
I = F - E;
printf("%02d:%02d",J,I);
}
return 0;
}

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

(5)实验分析

问题一:流程图输出小时分钟忘了
原因:没有加c+,d+
改正方法:在"c"前加c+在"d"前加d+

7 三天打鱼两天晒网

(1)题目

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

(2)流程图

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

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


(5)实验分析

没错误

9阶梯电价

(1)题目

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

(2)流程图

(3)源代码

include<stdio.h>

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

  return 0;

}

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


(5)实验分析

无错误

(四)PTA提交列表





posted on 2017-10-28 22:23  计科二班何强  阅读(392)  评论(0编辑  收藏  举报