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):
错误原因:y的后边没有加分号
改正方法:加上分号
此处没有了错误
错误信息(2):
错误原因:if 语句后边加了分号
改正方法:把if语句后边的分号删除
此处改对了
错误信息(3):
错误原因:else语句后边添加了(x != 10)
改正方法:将(x != 10)删除,删除之后进行编译
修改正确
错误信息(4):
错误原因:在输出语句中引号,x,y中间没有加逗号。导致格式错误。
改正方法:在上述所述处加上逗号,再次编译
错误信息(5):
错误原因:x,y的值与所定义的值不相同
改正方法:在1的后边加上 .0
错误信息(6):
错误原因:符号错误
改正方法:在if 语句中等于号用== 表示
错误信息(7):
错误原因:x前面没有加取地址符&
改正方法:加上&
错误信息(8):
错误原因:scanf中%=f 错误
改正方法:因为定义的是double类型的 所以在输入语句中用%lf表示 正确的为
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?
答:确切含义是判断a,b是否成立,若成立则输出 X=X+1 若不成立则输出 y=y+1.
源程序如下:
这个else应该与if(b)配对,因为if ~ else 配对原则:缺省{ }时,else总是和它上面离它最近的未配对的if配对。
若要确切表明则每个if ~ else语句都用“{}”(花括号)括住。
这个源程序正确的表达形式是:
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能,因为在C语言中都是二进制只有1和0
正确的表达式:
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
程序(1):
输入源程序:
运行程序(1)输入123得:
原因:定义的为整形变量,123为正确形式而a则属于非法字符,遇到非法字符,则认为输入结束。
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2):
输入源程序:
运行程序(2)分别输入123 45和123a: 输入123得到:
返回值为2
输入123a:
返回值为1
原因:源程序中定义的a,b均为整型(int),scanf中的输入符号也为整型的,所以123 45 时,返回值为2; 而当输入值变为123a是出现了非法字符,导致程序无法正常读取数据,输出的返回值变为1.
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:
修改之后的程序:
4其他总结:选择结构程序设计:1.要牢记if…else 语句
2.牢记关系运算符和表达式,要注意“==”!!!!!
3.牢记四个数学函数
4.要搞清楚if else的配对原则,以及逻辑运算符的短路特性。
5.保持自己的状态,坚持下去。
(三)实验总结
3题目(1):判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。
输入格式:
直接输入一个5位数正整数。
输出格式:
输出“yes”或“no”。此处均为小写字母
(2)流程图:
(3)源程序:
#include<stdio.h>
int main()
{
int x;
scanf("%d",&x);
if (x/10000==x%10 && x%100/10==x%10000/1000)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
(4)测试数据及运行结果:
(5)实验分析:
问题1:不会计算个十百千万每一位的数字。
解决办法:看PPT,问同学。
5.计算火车运行时间
题目(1):本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
输入格式:
输入在一行中给出2个4位正整数,其间以空格分隔,分别表示火车的出发时间和到达时间。每个时间的格式为2位小时数(00-23)和2位分钟数(00-59),假设出发和到达在同一天内。
输出格式:
在一行输出该旅途所用的时间,格式为“hh:mm”,其中hh为2位小时数、mm为2位分钟数。
(2)流程图:
(3)源程序:
#include<stdio.h>
int main()
{
int a,b,c,d,hours,mins;
scanf("%d %d",&a,&b);
if(b%100<a%100)
{
hours=b/100-a/100-1;
mins=b%100-a%100+60;
printf("%02d:%d",hours,mins);
}
else
{
hours=b/100-a/100;
mins=b%100-a%100;
printf("%02d:%d",hours,mins);
}
return 0;
}
(4)测试数据及运行结果:
(5)实验分析:
问题1:第一次做这个题的时候没有思路。
解决办法:咨询老师和同学,并自己思考,从而解决了问题。
问题2:对 if else 语句不是很熟练
解决办法:多多练习
问题3:提交第一次的时候发现输出的结果是3:29
解决办法:在输出语句的%d中加上02 表示宽度。
问题(4):刚开始对于hours和mins的公式不清楚
解决办法:在纸上列式子计算。
7 三天打鱼两天晒网
(1)题目:中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图:
(3)源程序:
#include<stdio.h>
int main()
{
int N,M;
scanf("%d",&N);
M=N%5;
if(M>3||M==0)
{
printf("Drying in day %d",N);
}
else
{
printf("Fishing 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 x;
double yuan;
scanf("%d",&x);
if(x<0)
{
printf("Invalid Value!");
}
else if(x<=50)
{
yuan=0.53*x;
printf("cost = %.2f",yuan);
}
else
{
yuan=0.53*50+(x-50)*0.58;
printf("cost = %.2f",yuan);
}
return 0;
}
(4)测试数据及运行结果:
(5)实验分析:本题没有问题。但要注意所定义的是int还是double。
(四)PTA提交列表
如图:
写的有点乱,感谢老师。