第三次作业
第三次作业
(一)改错题
计算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
源程序
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:
-
错误原因:第9行没有加分号";"。
-
改正方法:在第9行加上一分号";"。
-
错误信息2:
-
错误原因:else 没有对应的 if。
-
改正方法:把括号和里面的条件去掉。
-
错误信息3:
-
错误原因:if后面加了分号,else没有对应的if。
-
改正方法:把if后面的分号";"去掉。
-
错误信息4:
-
错误原因:printf输出中没有加逗号(,)
-
改正方法:在输出中加入逗号","。
-
错误信息5:
-
错误原因:输出的值与应得的值不相等
-
改正方法:把第15行的%.lf改成%.1f
改正后输出正确
- 错误信息6:
- 错误原因:输出答案不正确。
- 改正方法:把scanf中的%f改成%lf,把(x=10)改成(x==10)。
- 错误信息7:
- 错误原因:输出的值不相等
- 改正方法:在scanf中加入取地址符号&。
输出错误!
- 错误信息8:
- 错误原因:格式错误!
- 改正方法:那scanf中的“=”去掉。
改正后输出正确。
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
if(a)
if(b)
{
x=x+1;
}
else
{
y=y+1;
}
含义:判断是否是a b,如果是a,则输出x=x+1;如果是B,则输出是y=y+1。
else与if(b)相匹配。
正确格式
if(a && b)
{
x=x+1;
}
else
{
y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能。因为C语言中是一句一句来判断的,只能是“真”“假”“1”“0”,所以如果按照题目中的来写,先判断的是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;
}
输出结果:
解释:一开始定义的是整形变量,没有定义字符变量,当输入非法字符的时候,默认为还会完成,因为会完成所以为真,则输出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;
}
因为第一次输入的时候都是整型的,读取了俩次,所以返回的时候是2。而第二次没有定义字符型的,则只读取了一次,所以返回的是1。
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:
#include <stdio.h>
int main()
{
int a, b,n;
n = scanf("%d %d", &a, &b);
if(n==2)
{
printf("%d %d",a,b);
}
else
{
printf("Input error!");
}
return 0;
}
4.对其他你认为需要进行总结的内容进行总结
- 1."%c”输入时,空格字符和“转义字符”作为有效字符输入。
- 2.输入相等的时候要用"==",而不是"="。
- 3.if和else是一一对应的关系,在选择判断时不能用镶嵌的格式,只能分开来写。
- 4.在测试的结果的时候我们要格外注意题目所给的格式,否则就会出错,并且输出错误。
- 5.在用到表达式的时候我们要注意格式,注意输出的时候保留几位小数。
(三)实验总结
(1)题目
7-3 回文数
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(2)流程图
(3)源代码
#include <stdio.h>
int main(void)
{
int n,a,b,c,d;
scanf("%d",&n);
n>=10000 && n<=99999;
a=n/10000;
b=n/1000%10;
c=n/10%1000%10;
d=n%10000;
if(a==d,b==c)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析:
问题1:
原因:相等的时候写成了“=”。
解决办法:把“=”改成“==”。
(1)题目
7-5 计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
(3)源代码
#include <stdio.h>
int main(void)
{
int a,b,c,d,e,f,g,h;
a>=1000 && a<=9999;
b>=1000 && b<=9999;
scanf("%d %d",&a,&b);
c=a/100;
d=b/100;
e=a%100;
f=b%100;
g=d-c;
h=f-g;
if(f<e)
{
h=f+60-e;g=d-1-c;
}
else
{
h=f-e;g=d-c;
}
printf("%02d:%02d",g,h);
return 0;
}
(4)测试数据及运行结果
(5)实验分析:
问题1:
原因:在输出的时候,格式错误。
解决办法:把“%2d”改成"%02d"。
(1)题目
7-7 三天打鱼两天晒网
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图
(3)源代码
#include <stdio.h>
int main(void)
{
int N,D;
N<1000 && N>0;
scanf("%d",&N);
D=N%5;
if(D>0 && D<=3)
{
printf("Fishing in day %d",N);
}
else
{
printf("Drying in day %d",N);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析:
问题1:
原因:在if后面加了“;”,没有对应的else。
解决办法:把if后面的“;”去掉。
(1)题目
7-9 阶梯电价
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
(2)流程图
(3)源代码
#include <stdio.h>
int main(void)
{
double x,y;
scanf("%lf",&x);
if(x<50 && x>0)
{
y=x*0.53;
printf("cost = %.2f",y);
}
else if(x>=50)
{
y=50*0.53+(x-50)*0.58;
printf("cost = %.2f",y);
}
else
{
printf("Invalid Value!");
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析:
问题1:
原因:因为是double类型,在scanf输入中应该是“%lf”而不是“%f”。
解决办法:把“%f”改成“%lf”。
(四)PTA提交列表