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
源程序(有错误的程序)
(1)错误信息:
错误原因:1/x后没有加;导致句子不完整
改正方法:在1/x后加;
(2)错误信息:
错误原因:if(x =10 )后加了; 导致后面的else没有对应的if
改正方法:把if(x =10 )后;删去
(3)错误信息:
错误原因:xy之间没有加,
改正方法:在xy之间加上,
(4)错误信息
错误原因:输入语句x前没有加取地址符
改正方法:在x前加&
(5)错误信息
错误原因:要求输出保留1位小数,实际不符
改正方法:%.2f改为%.1f
(6)错误信息
错误原因:明确是double类型 就应该是%lf,而且多了个=
改正方法:把=去掉,改为%lf
(7)错误信息
错误原因:在if语句()== 是等于 , = 是赋值
改正方法:()内加一个=
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
(1)如果满足条件a并且满足条件b,进行x=x+1,若不满足b则进行y=y+1;和第2个if配对;
(2)不能;它是以运算形式进行的;(-10<x&&x<10)
(3)
输入123a,一个数是123 一个是a,a本身存在数据,所以输出的a=123 b=1
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2)
输入的格式不对,输入字母为非法数据,这是会抱错,且b会输出毫无意义的1数字。若将第二个输入时的%d改为%c则正常
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2)
修改程序
scanf()函数的返回值是成功读入数据的个数,成功读入两个所以读出n=2。如果只读出一个n=1。如果没有读取任何数据,则读出n=0。
修改程序(1)
include
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 ,else语句要明确配对最好加上大括号;%lf看清保留位数;一般if()内都==不是赋值=;scanf后要记得加&;语句结束要带;
(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(1)中的3、5、7、9题,学号末位数是双数的同学完成选择结构(1)中的2、4、6、8题。
3.(1)题目
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int a,b,c,d,e,m;
scanf("%d",&m);
a = m/10000;
b = m/1000%10;
c = m/100%100;
d = m%100/10;
e = m%10;
if (a == e)
{
if(b == d)
{
printf("yes");
}
}
else
{
printf("no");
}
return 0;
}
(4)实验数据
(5)实验分析:没有用好大括号导致编程错误
5(1)题目
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
(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&&s<10)
{
if(0<f&&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)实验数据
(5)实验分析:忘记不能用a<x<c
7(1)题目
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图
(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)实验数据
(5)实验分析:计算没有考虑周到
9(1)题目
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
(2)流程图
(3)源代码
include <stdio.h>
int main()
{
int d;
double q;
scanf("%d",&d);
if(d>=0)
{
if(d<=50)
{
q = d*0.53;
printf("cost = %.2f",q);
}
else
{
q = 50*0.53+(d-50)*0.58;
printf("cost = %.2f",q);
}
}
else
{
printf("Invalid Value!");
}
return 0;
}
(4)实验数据
(5)实验分析:无
(四)PTA提交列表