C语言程序设计第三次作业——选择结构(1)
一.改错题
计算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)
错误原因:第九行缺少分号。
改正方法:加上缺少的分号。
错误信息(2)
错误原因:第十一行else后不应该有条件。
改正方法:去掉else后多余的信息。
错误信息(3)
错误原因:第七行if语句后没有“;”
改正方法:将“;”号去掉。
错误信息(4)
错误原因:十五行xy之间缺少“,”号。
改正方法:加上“,”号
错误信息(5)
错误原因:十五行x前不应有空格。
改正方法:将x之前的空格删掉。
错误信息(6)
错误原因:十五行x前应有“,”。
改正方法:加上“,”。
编译无错误,但程序中还有错误。
错误信息(7)
错误原因:输入时没有加“&”符号。
改正方法:去掉空格加上“&”。
编译无错误,运行结果出错。
错误信息(8)
错误原因:输入应该为浮点型
改正方法:应为“lf"
错误信息(9)
错误原因:条件语句中等于应该用”“表示。
改正方法:将”=“号换为”“。
错误信息(10)
错误原因:第五行输出时不应该换行。
改正方法:将”\n“去掉。
错误信息(11)
错误原因:scanf中没有”=“号。
改正方法:将“=”去掉。
错误信息(12)
错误原因:输出时应前后统一
改正方法:改为printf("f(%.1f) = %.1f\n" x y);
正确
二.学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写
(1)确切含义是判断是否为a且b条件,如果为真,执行“x=x+1",如果为假,则执行“y=y+1"这条语句;
(2)根据if配对原则,else应该与离它最近的if配对,所以应该与第二个if配对;
(3)在选择语句后添加"{}",还应该注意if.else的配对信息。
(4)改正
if(a&&b)
{
x=x+1;
}
else
{
y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
(1)不能;
(2)表达式从左向右判断是否正确,为真输出1,假则为0。所以不管x输的数为多少,都会小于10;
(3)正确的表达式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中a为非法字符,输入结束。
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;
}
输入123 45
输入123a
修改程序:
结果
4.对其他你认为需要进行总结的内容进行总结。
(1)输入语句中不要忘记&。
(2)要分清"="与"=="在C语言中的不同含义。
(3)输入类型为double时,对应为"%lf"。
(4)要清楚if else的配对原则。
三.实验总结
3.(1)题目
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。。
(2)流程图
(3)源代码
include<stdio.h>
int main(void)
{
int m,a,b,c,d,e;
scanf("%d",&m);
a = m%10;
b = m%100/10;
c = m%1000/100;
d = m%10000/1000;
e = m/10000;
if((ae)&&(bd))
{printf("yes");
}
else
{printf("no");
}
return 0;
}
(4)测试数据及运行及如果
(5)实验分析
问题1:格式错误
原因:if else 没有配对,if后出现多余";"
解决办法:去掉";"
5.(1)问题
计算火车运行时间本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
(3)源程序
include<stdio.h>
int main()
{
int a,b,c,d,x,y,m,n;
scanf("%d %d",&a,&b);
x = a / 100;
y = a % 100;
m = b / 100;
n = b % 100;
if(n>=y)
{
c=m-x;
d=n-y;
}
else
{
c=m-x-1;
d=n+60-y;
}
printf("%02d:%02d",c,d);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
问题1:结果错误
原因:由于d<b而引起的
解决办法:注意借位
问题2:结果不对
原因:位数不对
解决办法:注意%02d的运用
7.(1)题目
. 三天打鱼两天晒网,中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图
(3)源代码
include<stdio.h>
int main()
{
int N,Fashing,Drying;
(N>=0)&&(N<=1000);
scanf("%d",&N);
if(N%5<=3)
{
printf("Fashinng 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 t,money;
double km;
scanf("%lf %d",&km,&t);
if(km<=3)
{
money=10+t/52;
printf("%d",money);
}
else if(km>3&&km<=10)
{
money=10+(km-3)2+t/52+0.5;
printf("%d",money);
}
else
{
money=10+72+(km-10)3+t/52+0.5;
printf("%d",money);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
问题:没有保留整数
原因:直接按浮点型数据输出
解决办法:结果加上0.5,再按整型输出
四.PTA提交列表