---恢复内容开始---
(一)改错题
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
源代码 :
第一次编译:
错误原因:if 后面有分号
改正方法:去掉分号
第二次编译:
错误原因:第九行少分号
改正方法:在第九行的最后加上分号
第三次编译:
错误原因:else后面有条件判断
改正方法:把else后的 条件 删掉
第四次编译:
错误原因:x y 前面没有逗号 xy之间没有逗号
改正方法:在引号后面 xy前面加上逗号 在xy中间加上逗号
错误信息:
错误原因:x保留了两位小数
改正方法:%.2f 变成%.1f
错误信息:
错误原因:scanf语句没有加取地址符号
改正方法:在scanf语句加上取地址符号
错误信息:
错误原因:if后面的判断语句应该用== 而不是=
改正方法:把=改成==
错误信息
错误原因:最后的输出语句把1f写成了lf
改正方法:把lf改成1f
错误信息:
错误原因:输入数字的类型与定义的类型不一样
改正方法:把double 改成float
第一组数据正确
第二组数据正确
最终代码:
include <stdio.h>
int main(void)
{
float x,y;
printf("Enter x:");
scanf("%f",&x);
if(x == 10)
{
y = 1 / x;
}
else
{
y = x;
}
printf("f(%.1f) = %.1f\n",x,y);
return 0;
}
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:此代码的含义是 判断a和b是否同时满足,如果同时满足,则x=x+1;否则y=y+1.
代码应为:
if(a&&b)
{x=x+1;
}
else
{y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答:不能这样写 应该是 ((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;
}
输出结果:
程序在遇到非法运算符时就会停止赋值并且将非法运算符前面的数值赋给a将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;
}
输入结果:
scanf()函数的返回值是成功读入数据的个数 输入了两个数 所以n=2
输入123a的时候遇到了非法运算符a无法继续读取你所输入的值所以只正确读取一次n=1
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:
修改后的代码:
4.对其他你认为需要进行总结的内容进行总结。
敲代码 是一个需要细心和耐心的工作 可能一个小小的逗号分号就能导致错误。
(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(1)中的3、5、7、9题,学号末位数是双数的同学完成选择结构(1)中的2、4、6、8题。
(三)(实验总结)
(1) 计算分段函数
(2)流程图
(3)源代码
#include<stdio.h>
#include<math.h>
int main()
{
double x,y;
scanf("%lf",&x);
if(x >= 0)
{
y = sqrt(x);
}
else
{
y = (x+1)(x+1)+2x+1/x;
}
printf("f(%0.2f) = %0.2f",x,y);
return 0;
}
(4)测试数据及运行结果
(5)实验分析
保留两位小数应该是%0.2f
2.算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商。
(2)流程图:
(3)源代码
include<stdio.h>
int main()
{
int a,b,c,d,e,g;
double f;
scanf("%d %d",&a,&b);
c = a + b;
d = a - b;
e = a * b;
f =(double)a / b;
g = 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)
{
printf("%d / %d = %d\n",a,b,g);
}
else
printf("%d / %d = %.2f\n",a,b,f);
}
(4)测试数据及运行结果
(5)实验分析
注意类型转换 还需加强练习
7-6 输出三角形面积和周长
本题要求编写程序,根据输入的三角形的三条边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()
{
int a,b,c;
float area,s,perimeter;
scanf("%d %d %d",&a,&b,&c);
s=(a+b+c)/2;
if((a+b>c)&&(b+c>a)&&(a+c>b))
{
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");
}
(4)测试数据及运行结果
(5)实验分析
边长的范围总是搞错
7-8 出租车计价(10 分)
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图
(3)源代码
include<stdio.h>
int main()
{
float a,b;
int x,y,z;
scanf("%f %d",&a,&x);
y=(x/5)2;
if(a<=3.0)
{
b=10+y;
z=(int)(b+0.5);
printf("%d",z);
}
else if(a>3&&a<10)
{
b=10+(a-3)2+y;
z=(int)(b+0.5);
printf("%d",z);
}
else
{
b=10+14+3*(a-10)+y;
z=(int)(b+0.5);
printf("%d",z);
}
return 0;
}
(4)运行结果
(5)实验分析
注意格式 总是格式错误
(四)PTA提交列表
---恢复内容结束---