(一)改错题

计算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
源程序(有错误的程序)

(错误一)

错误原因:根据编译发现错误出现在第九行,语句结束时缺少“;”。
改正方法:在第九行结束时加上英文半角的分号。
(错误二)

错误原因:源代码在“else”语句后面条件语句,根据所学,“else”语句后面不能加条件。
改正方法:将“else”语句后面的条件语句删掉。
(错误三)

错误原因:(scanf)语句属于输入语句,而源代码中没有加“&”。
改正方法:在输入语句后面的X前面加上“&”。
(错误四)

错误原因:if判断语句后面不能加分号。
改正方法:将if语句后面的“;”删除。
(错误五)

错误原因:输出语句中,括号里的引号句子输完之后应该用逗号隔开,还有x y中间也应该用逗号隔开,而不是空格。
改正方法:在输出语句,括号里的引号句子输完后加逗号,以及将x y 中间的空格改成逗号。
(错误六)

错误原因:源代码定义的x属于double类型,输入里x的类型不符合。
改正方法:将“%f”改成“%lf”。
(错误七)

错误原因:编译后0错误,但输入样例10.0后,发现不符合预期结果。检查源代码后发现,if语句里边的语句出现错误,在C语言中“=”一个等号表示赋值;“==”两个等号才是等于。
改正方法:在判断语句if的括号里再加一个等号,表示等于。
(错误八)

错误原因:在输入样例中,没有给出换行,但在给出的源代码中输入的时候发现格式不对。
改正方法:将printf语句后面的“/n”去掉。
(错误九)

错误原因:scanf语句输入时没有“=”。
改正方法:将scanf语句后面的等号删除。
(错误十)

错误原因:输出是都是保留一位小数,f括号里保留了两位小数,结果输出错误。最后输出时不能用 "l" ,要用 ”1“。
改正方法:printf("f(%.2f) = %.lf\n" x y); 改成 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)这个else应该与第二个if配对。
(3)若要明确表达这种配对方式,应在每一个if 或else if或else后添加“{ }”(花括号),同时要时刻注意if else配对的优先顺序。
(4)改正后的代码如下:
if(a&b)
{
x=x+1;
}
else
{
y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
(1)给出的表达式不能够表达。原因是这种表达方式在c语言中要先从左到右的判断是真是假,是 0 还是 1,所以不能用来表示这个区间的数。
(2)(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的输出结果如图:

(二)错误原因:输入一个非法字符时,系统会认为输入自动停止, b 将会赋予一个系统产生的随机数,比如系统随机产生的如图所示的“b=1”。
(注:非法字符会使系统停止再读数。)
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的结果如图所示:

(三)原因分析:n读取的是输入能读取的数 的个数。第二次输入时输入非法字符时系统如第一次一样自动停止读取数据,所以只读一个数,得到的返回值就是“1”。
修改程序(1),当输入非法数据时,输出“Input error!".源代码如下:

include <stdio.h>

int main()
{
int a, b,n;
n = scanf("%d %d", &a, &b);
if(n == 2)
{
printf("a = %d, b = %d\n", a, b);
}
else
{
printf("Input error!");
}
return 0;
}
4.对其他你认为需要进行总结的内容进行总结。
(一)输入语句中千万不能丢掉“&”;
(二)使用“if” “else”语句切记在语句后面没有分号表示语句结束,注意“if” “else”的优先配对原则;
(三)注意题中给出的变量类型,在定义为double类型时,记得在scanf语句中应该输入对应的“%lf”与其对应;
(四)最后最重要是一点是切记看清题目给出的输入以及输出格式,尤其是空格部分,在pta的作业对此要求最为严格。

三:实验总结:

1:计算分段函数:
(1)题目
本题目要求计算下列分段函数f(x)的值:
注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。
(2)流程图:

(3)源代码:

(4)测试结果如图:
输入所给样例数据“10”,结果如下:

符合样例数据,输入数据“-0.5”,结果如图:

符合样例数据。
(5)实验分析:注意本题目为分段函数,应注意临界值和分界点的问题。
2.算术入门之加减乘除
(1)题目
对于输入的两个整数,按照要求输出其和差积商。
(2)流程图:

(3)源代码:

(4)测试结果如图:
输入样例1:“6 3“”,结果如图:

符合样例数据,输入第二组:“8 6”,结果如图:

符合样例数据。
(5)实验分析
(一)本道题为加减乘除运算,其中要注意题目要求,问题出现在除法运算的判断上,引入“if” “else”语句进行判断输入的两个数能否整除,然后分两种情况进行。
(二)其次应该注意数据类型,整型除以整型结果依旧为整型,所以需要时需要进行强行转换成“double”类型。
3.输出三角形面积和周长
(1)题目
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
(2)流程图:

(3)源代码:

(4)测试结果如图;
输入样例1: 5 5 3,结果如图;

符合样例数据,输入第二组数据:1 4 1,结果如图;

符合样例数据。
(5)实验分析
(一)再次强调注意看清题目所给的输入以及输出格式;
(二)题目中的公式运用到了数学中的开方问题,记得在源代码开头标记“math”函数;
(三)本题要求保留小数以及输入为实数,所以在定义变量的时候可以全部定义为“double”类型。
4.出租车计价
(1)题目
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
• 起步里程为3公里,起步费10元;
• 超起步里程后10公里内,每公里2元;
• 超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
• 营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图

(3)源代码:

(4)测试结果如图:
输入样例1: 2.6 2,结果如图:

符合样例数据,输入第二组数据: 5.1 4 ,结果如图:

符合样例数据,输入第三组数据: 12.5 9 ,结果如图:

符合样例数据。
(5)实验分析
(一)认真读题,正确理解本题的意思,可以理解成数学中的分段函数,然后理清思路;
(二)本题中尤其应该注意的是停车时间的计算,以及停车费用的相关计算。

(四)PTA提交列表,如图所示: