C语言程序设计第三次作业——选择结构(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;
}

对源程序进行编译,采用每次修改第一个错误并重新编译的方法,记录每个错误的错误信息、分析错误原因并给出正确的语句。
错误信息1:1245473-20171029211417570-808743993.png
错误原因:第九行的语句最后没有加分号。
改正方法:加上分号。
错误信息2:1245473-20171029211435961-485848090.png
错误原因:第七行的语句最后加上了分号。
改正方法:最后加上分号。
错误信息3:1245473-20171029211532273-2015247455.png
错误原因:第十一行的 else 后加上了判断语句。
改正方法:把判断语句删掉。
错误信息4:1245473-20171029211600930-1819630931.png
错误原因:第十五行的输出语句中,后引号与变量 x 之间没有逗号。
改正方法:在后引号与变量 x 之间加上逗号。
错误信息5:1245473-20171029211618789-2014737849.png
错误原因:第十五行的输出语句中,变量 x 与变量 y 之间没有逗号。
改正方法:在第十五行的输出语句中,在变量 x 与变量 y 之间加上逗号。
错误信息6:1245473-20171029211643414-989950005.png
错误原因:源程序的第五行的输入语句中有 \n
改正方法:把源程序第五行的输入语句中的 \n 去掉。
错误信息7:1245473-20171029211711539-1063498718.png
错误原因:源程序的第十五行的输出语句中变量 x 对应的为 %.2f 。
改正方法:把变量 x 对应的 %.2f 改为 %.1f 。
错误信息8:1245473-20171029211848289-1180785150.png
错误原因:源程序的第六行的输入语句中, x 前没有区地址符。
改正方法:在 x 前加上区地址符
错误信息9:1245473-20171029211922961-1676432085.png
错误原因:源程序的第十五行的输出语句中变量 y 对应的为 %.lf 。
改正方法:把y 对应的 %.lf 改为 %.1f 。
错误信息10:1245473-20171029211958648-1384922616.png
错误原因:第六行的输入语句中 &x 对应的为 =%f。
改正方法:把第 &x 对应的 =%f 改为 %lf。
错误信息11:1245473-20171029212023570-1741020841.png
错误原因:源程序的第七行的判断语句中的等于为 = 。
改正方法:把 = 改为 ==
试运行
1245473-20171029212103758-820450378.png
1245473-20171029212109711-10953767.png
(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:确切含义为如果条件符合a则往后运行,再符合b则运行x=x+1。若不符合a则运行y=y+1。 这个else应该与第二个if配对。每个if、else后均加上大括号。

if(a)
{
    if(b)
    {
        x=x+1;
    }
}
else
{
    y=y+1;

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答:不能,,(-10<x)若正确则值为1,错误则为2。然后再与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;
}

答:scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。这个读取了一个数,所以是1
程序(2)
#include <stdio.h>
int main()
{
int a, b,n;
n = scanf("%d %d", &a, &b);
printf("n = %d\n", n);
return 0;
}
答:输出结果为n = 2和n = 1。scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。如果是读取1个则是1,读取2个则是2
4.对其他你认为需要进行总结的内容进行总结。
总结:应牢记关系运算符及其性质,关系运算符有六种
应熟练掌握和运用 if...else 语句,
应牢记数学函数,数学函数所在的头文件为math.h。
应牢记逻辑运算符,有三种
(三)实验总结
2计算分段函数本题目要求计算下列分段函数f(x)的值
1245473-20171029213430398-1772467739.png
流程图
1245473-20171029213457992-142853269.png
源程序1245473-20171029213516664-328869045.png
运行结果
1245473-20171029213533695-797973649.png
1245473-20171029213539742-1353566957.png
出现的问题
问题:1245473-20171029213608133-1499949464.png
解决办法:经检查发现未加上数学专用字符#include
4.对于输入的两个整数,按照要求输出其和差积商
1245473-20171029213629586-86889923.png
流程图:1245473-20171029213648867-738105101.png
源程序:1245473-20171029213706742-157447001.png
运行结果1245473-20171029213724242-1651589901.png
1245473-20171029213747820-1932999014.png
出现的问题
问题:没考率除法时第一次未考虑除不尽的情况
解决办法:加一种方法
6,本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
流程图:1245473-20171029213934195-816884739.png
源程序:1245473-20171029213945992-1903183538.png
运行结果
1245473-20171029213956586-1574955597.png
1245473-20171029214004805-1060908677.png
出现的问题
问题:未加入数学字符#include
改正方法:加上#include
8,本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
流程图:1245473-20171029214119055-1358985214.png
源程序:1245473-20171029214129367-144413584.png
输出结果1245473-20171029214140398-2090970892.png
出现的问题
问题:输出值全为整数
原因:未考虑使用double型字符
(五)PTA提交列表1245473-20171029214431430-1226101734.png
1245473-20171029214441758-569132334.png

转载于:https://www.cnblogs.com/Sankinv587/p/7751372.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值