C语言程序设计第三次作业
(一)改错题
(1)对原源代码进行编译如下图
错误信息:赋值语句出错
错误原因:y = 1 / x 后缺少“;”
改正方法:在y = 1 / x后加上“;”
(2)错误的源代码
错误信息:if else 格式不对
错误原因:if(x = 10)后有";"
改正方法:把“if(x = 10);”中的“;”去掉
(3)错误的源代码
错误信息:if else 格式不对
错误原因:因为题干中x有两种情况所以只用一个 (if else)结构就可以,else后面不需要加语句,而源代码中else后加了语句
改正方法:把“ else (x != 10)”语句中“ (x != 10)”去掉
(4)错误源代码
错误信息:输出语句有错误
错误原因:输出语句中双引号后面缺少“,”
改正方法:在输出语句中双引号后面加上“,”
(5)错误源代码
错误信息:输出语句中变量之间有错误
错误原因:输出语句中变量之间缺少“,”
改正原因:输出语句中变量之间加“,”
(6)错误源代码
错误信息:Enterr x: 10.0不分行
错误原因 printf("Enter x: \n"); 中不加\n
改正方法:把 printf("Enter x: \n"); 中的\n去掉
(7)错误源代码
错误信息:输出结果错误
错误原因:在scanf("=%f", x);语句中x前面缺少“&”,printf("f(%.2f) = %.lf\n" ,x, y);语句中取小数符号错误
改正方法:把scanf("=%f", x)改为scanf("=%f", &x),把printf("f(%.2f) = %.lf\n" ,x, y); 改为printf("f(%.1f) = %.1f\n" ,x, y);
(8)错误源代码
错误信息:输出结果错误
错误信息: scanf("=%f", &x);中 "=%f"符号错误,if(x = 10)中x = 10为赋值而不是等于
改正方法:把 scanf("=%f", &x);改成 scanf("%lf", &x);,把if(x = 10)改成if(x == 10)
(9)正确源代码
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
(1)含义:如果变量为a则进行x=x+1的运算;否则如果变量为b则进行y=y+1的运算
(2)这个else应该和if(a)配对
(3)在if(a)后加大括号,把“x=x+1;”放在大括号里面;把if(b)语句放到else后面,在else if(b)后面加大括号,把“y=y+1;”在大括号里面
(4)
if(a)
{
x=x+1;
}
else if(b)
{
y=y+1;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
(1)不能;因为在c语言中用表达式 (-10< x <10)的含义为小于从左到右运算,(-10<x)若正确则值为1,错误则为0。然后再与10进行比较
(2)正确表达式:(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;
}
(1)原因:当输入非法字符时系统会自动结束输入,而scanf()函数是有返回值的,所以当输入123a时123赋给a,而输入的a为非法字符,由于scanf()函数具有返回值的当输入123a时123被成功读取且读取一次故把1赋值给b
运行程序(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;
}
(2)因为scanf()函数的返回值是成功读入数据的个数。在此程序中a,b为整型变量;输入123 45时为输入俩个可读变量故返回值为2;输入123a时a为非法变量所以只能成功读取一个变量故返回值为1
4.修改程序
include <stdio.h>
int main()
{
int a, b;
scanf("%d %d", &a, &b);
printf("a = %d, b = %d\n", a, b);
return 0;
}
5总结
(1)注意if else的格式和用法并且学会正确使用if和else的搭配
(2)关系运算符及其性质,关系运算符有六种: < <= = >= > != 其结合顺序从左到右
(3)注意c语言语句中卡区间范围所用的语句与一般语句的区别
(4)使用字符时注意要标记字符,注意scanf()函数的返回值
(三)实验总结
1.题目:回文数
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(1)流程图
(2)源代码
(3)测试数据及运行结果
(4)实验分析
问题1:得不出每一位上的数字
原因:不会合理使用求余,求商
解决办法:老师讲解,给出思路,自己 推导得出正确结果
2.计算火车运行时间
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(1)流程图
(2)源代码
(3)测试数据及运行结果
(4)实验分析
问题1:输入的数值为四位,且不能以0开头
原因:因为输入的为时间和分钟故须输入四位数但必须是在(1000,9999)之间。
解决办法:多次实验,询问同学得出答案
问题2:分别求出小时和分钟然后求差值,当到达时间的分钟小于出发时间的分钟时不会求差值
原因:不会正确搭配求商和求余;不会向小时借一位来求值
解决办法:老师给出思路,同学之间讨论,多次实验的出正确结果
3.. 三天打鱼两天晒网
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(1)流程图
(2)源代码
(3)测试数据及运行结果
(4)实验分析
问题1:怎样判断某天是打鱼还是晒网
原因:不会发现规律,题目中打鱼和晒网的天数是5的倍数,所以与5求余就可得出
解决方法:询问同学,总结规律,多次实验得出正确答案
4.阶梯电价
为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。
(1)流程图
(2)源代码
(3)测试数据及运行结果
(4)实验分析
问题1:分析题干,用常规思路不易解题,且步骤繁琐
原因:此题目需判断用电度数,故需用判断语句来完成题目
解决办法:询问同学,完成语句步骤
问题2:题干要求结果保留俩位小数,不能用整型变量标记
原因:因为用电度数有小数,所以需用double类型语句,且输出结果要保留俩位小数
解决办法:查课上老师强调的重点笔记,对错误源代码进行修改