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类型语句,且输出结果要保留俩位小数

解决办法:查课上老师强调的重点笔记,对错误源代码进行修改

四.PTA提交列表

posted @ 2017-10-28 11:19  赵晓辉  阅读(377)  评论(0编辑  收藏  举报