(一).改错题
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;
}
错误信息:
错误原因:输入函数中不能有等号
改正方法:
错误信息:
错误原因:x是double类型的,输入函数不对
改正方法:
错误信息:
错误原因:输入函数格式不对
改正方法:
错误信息:
错误原因:if else结构括号不能有分号不能有
改正方法:
错误信息:
错误原因:把输入的值和x比较是否相等不对
改正方法:
错误信息:
错误原因:x是double类型的
改正方法:
错误信息:
错误原因:if else结构不正确
改正方法:
错误信息:
错误原因:输出函数格式不正确
改正方法:
错误信息:
错误原因:保留小数位数不正确
改正方法:
错误信息:
错误原因:浮点数输出保留一位小数
改正方法:
错误信息:
错误原因:语句后没分号
改正方法:
(二)学习总结
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)
{
if(b)
{
x=x+1;
}
else
{
y=y+1;
}
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答:不能,因为(-10<x<10)表示1,即进行了两个判断-10<x确定的话得到1,不确定得到0,0和1都小于10得到1.
正确的表达式
(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;
}
输出结果
原因
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,因为a=123,b=45,scanf()函数的返回值是成功读入数据的个数,所以只有a,b两个数,所以n=2。
输入123a
输出结果:
原因:n=1,因为a=123,b=0,scanf()函数的返回值是成功读入数据的个数,所以只有a一个数,所以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条件语句中当出现一个“=”是表示将等号右边的值付给左边的变量,而且左边的不可以为式子,当要表示两个量相等时应该输入“==”。
(三)实验总结
3 回文数
(1)题目
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(2)流程图
(3)源代码:
#include <stdio.h>
int main(void)
{
int n,a,b,c,d;
scanf("%d",&n);
a=n/10000;
b=n%10000/1000;
c=n%100/10;
d=n%10;
if(a==d,b==c)
{
printf("yes");
}
else
{
printf("no");
}
return 0;
}
(4)测试数据及运行结果:
(5)实验分析:
在一开始的运行中发现错误原因在于if条件的=没有改成==,要注意if条件中是判断,一般不使用=。
5 计算火车运行时间
(1)题目
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int t1,t2,h1,m1,h2,m2,h3,m3;
scanf("%d %d",&t1,&t2);
h1 = t1/100;
m1 = t1%100;
h2 = t2/100;
m2 = t2%100;
if((m2-m1)< 0)
{
h3=h2-1-h1;
m3=m2+60-m1;
}
else
{
h3=h2-h1;
m3=m2-m1;
}
printf("%02d:%02d",h3,m3);
}
(4)测试数据及运行结果
(5)实验分析
此题未出现大问题,主要是编译错误等小问题需要多加细心。
7 三天打鱼两天晒网
(1)题目
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图
(3)源代码
#include <stdio.h>
int main()
{
int n;
scanf("%d",&n);
if(n % 5 <= 3 && n % 5 != 0)
{
printf("Fishing in day %d",n);
}
else
{
printf("Drying in day %d",n);
}
}
(4)测试数据及运行结果
(5)实验分析
在对n进行求余时要注意除去的应当是几位数。
9 阶梯电价
(1)题目
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
(2)流程图
(3)源代码
#include <stdio.h>
int main(void)
{
double a,b;
scanf("%lf",&a);
if(a < 0)
{
printf("Invalid Value!");
}
else if(a <= 50)
{
b=a*0.53;
printf("cost = %.2f",b);
}
else
{
b=26.5+(a-50)*0.58;
printf("cost = %.2f",b);
}
return 0;
}
(4)测试数据及运行结果
(5)实验分析
在输入时的数据应当是%lf而不是%f,注意double和flout的区别。
(四)PTA提交列表
PTA中完成选择结构(1)习题集的提交列表截图。
如图: