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
源程序(有错误的程序)
错误信息:
错误原因:缺少分号
改正方法:y = 1 / x后加分号
错误信息:
错误原因:if else 语句使用不熟练
改正方法:删去 (x != 10),if后的;
错误信息:
错误原因:x y缺少逗号
改正方法:x前后加上分号
错误信息:
错误原因:输出格式错误
改正方法:%.2f改为%.1f,%.lf为%.1f
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
判断a,b,若成立,则执行x=x+1,若不成立,执行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语言中 (-10< x <10)是从左往右运行(-10< x)结果不是0就是1,那么1<10或0<10一直成立,该式之恒为1,所以不能。
(x<10 && x>-10)应该是正确的
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
结果:a=123,b=1;原因:a,b是整型变量,输入的a属于非法字符,所以系统随意给了个1输出。老师,这个原因不太确定,我不太会。
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
输入123 45时n=2,输入123a时n=1;原因:123 45时成功读入了2个数据,所以n=2;输入123a时成功读入1个数据,所以n=1。
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:
程序
4.对其他你认为需要进行总结的内容进行总结。
1.注意if else语句使用规范
2.注意if语句是非问题
(三)实验总结
1.计算分段函数
(1)题目
本题目要求计算下列分段函数f(x)的值:
(2)流程图
(3)源代码
include <stdio.h>
include <math.h>
int main(void)
{
double x,result;
scanf("%lf",&x);
if (x>=0)
{
result = sqrt(x);
printf("f(%.2f) = %.2f",x,result);
}
else
{
result = pow((x+1),2)+2*x+1/x;
printf("f(%.2f) = %.2f",x,result);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
没有问题
2.算术入门之加减乘除
(1)题目
对于输入的两个整数,按照要求输出其和差积商。
(2)流程图
(3)源代码
include <stdio.h>
int main(void)
{
int a,b;
scanf("%d %d",&a,&b);
printf("%d + %d = %d\n",a,b,a + b);
printf("%d - %d = %d\n",a,b,a - b);
printf("%d * %d = %d\n",a,b,a * b);
if (a%b==0)
{
printf("%d / %d = %d\n",a,b,a / b);
}
else
{
printf("%d / %d = %.2f\n",a,b,(double)a / b);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
问题:不能有效计算除法运算
原因:定义变量时没有考虑周全
解决办法:老师帮助
3. 输出三角形面积和周长
(1)题目
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
(2)流程图
(3)源代码
include <stdio.h>
include <math.h>
int main(void)
{
int a,b,c;
double s,area,perimeter;
scanf("%d %d %d",&a,&b,&c);
if (a+b>c && a+c>b && b+c>a)
{
s = (a + b + c) / 2.0;
area = sqrt(s(s - a)(s - b)*(s - c));
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else
{
printf("These sides do not correspond to a valid triangle");
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
本题没有问题
4.出租车计价
(1)题目
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图
(3)源代码
include <stdio.h>
int main(void)
{
int t;
double s,p,p1,p2;
scanf("%lf %d",&s,&t);
if (s <= 3)
{
p1 = 10;
}
else if (s > 3 && s <= 10)
{
p1 = 10 + 2(s - 3);
}
else
{
p1 = 10 + 27 + 3*(s - 10);
}
if (t<5)
{
p2 = 0;
}
else
{
p2 = t / 5 * 2;
}
p = p1 + p2;
printf("%.0f",p);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
问题:不知道该如何下手
原因:不能理解题意
解决办法:认真分析,老师点播,不断计算
实验内容的每道题都按照上面的格式书写。
(四)PTA提交列表
PTA中完成选择结构(1)习题集的提交列表截图。