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
源程序(有错误的程序)
#include <stdio.h>
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:
错误原因1:x后面没有加;
改正方法1:x后面加上;
错误信息2:
错误原因2:if后边加了符号;
改正方法2:去掉;
错误信息3:
错误原因3:没有加逗号隔开
改正方法3:在“后加上, x后加上,
错误信息4:
错误原因4:else后边加了条件
改正方法4:去掉条件
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:①如果满足a并且满足b,x=x+1,否则,y=y+1。 ②与最后一个if配对。 ③加大括号。
if(a&&b)
{
x=x+1;
}
else
{
y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答:不能,格式错误,-10<x&&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;
}
结果:a = 123,b = 1;
原因:b随机分配了一个值。
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 结果:n = 2,成功读取到两个数据 123 ,45,所以n=2
输入123a 结果:n = 1,成功读取到1个数据123,所以n=1
修改程序:
#include <stdio.h>
int main()
{
int a,b,n;
scanf("%d %d", &a, &b);
n = scanf("%d %d", &a, &b);
if(n==2)
{
printf("a = %d, b = %d", a, b);
}
else
{
printf("Input error!");
}
return 0;
}
4对其他你认为需要进行总结的内容进行总结。
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0,n = scanf("%d %d", &a, &b),我觉得拓展知识很重要啊。。。了解到了新的scanf用处!
(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(1)中的3、5、7、9题,学号末位数是双数的同学完成选择结构(1)中的2、4、6、8题。
格式如下:
1.(1)题目
计算分段函数
(2)流程图
(3)源代码
# include <stdio.h>
# include <math.h>
int main(void)
{
double x,result;
scanf("%lf",&x);
if(x>=0)
{
result=sqrt(x);
}
else
{
result=(x+1)*(x+1)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,result);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
没有问题
2.(2)题目
算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商
(2)流程图
(3)源代码
# include <stdio.h>
int main(void)
{
int a,b,c,d,e;
double f;
scanf("%d %d",&a,&b);
c=a+b;
d=a-b;
e=a*b;
printf("%d + %d = %d\n",a,b,c);
printf("%d - %d = %d\n",a,b,d);
printf("%d * %d = %d\n",a,b,e);
if(a%b==0)
{
f=a/b;
printf("%d / %d = %.f\n",a,b,f);
}
else
{
f=(double)a/b;
printf("%d / %d = %.2f\n",a,b,f);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
没有问题
3.(1)题目
输出三角形面积和周长(10 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。
(2)流程图
(3)源代码
# include <stdio.h>
# include <math.h>
int main(void)
{
int a,b,c;
double area,perimeter,s;
scanf("%d %d %d",&a,&b,&c);
if(a+b>c&&a+c>b&&b+c>a)
{
s=(double)(a+b+c)/2;
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)实验分析
没有问题
5.(1)题目
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图
(3)源代码
# include <stdio.h>
int main(void)
{
int h;
double n, money;
scanf("%lf %d",&n,&h);
if(n<=3)
{
money=10;
}
else if(3<n&&n<=10)
{
money=10+(n-3)2;
}
else
{
money=10+(10-3)2+(n-10)3;
}
money=money+h/52;
printf("%.0f",money);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
没有问题
(四)PTA提交列表
PTA中完成选择结构(1)习题集的提交列表截图。注意:截图必须显示题目集名称和用户名