C语言程序设计第三次作业——选择结构(1)

(一)改错题
1、题目
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
(1)错误信息:1242331-20171026204642445-2027971149.png
   错误原因:y = 1 / x语句没有加分号
   改正方法:在y=1/x语句后加个分号
(2)错误信息:1242331-20171026204935289-1072440619.png
   错误原因:if语句后不加分号
   改正方法:把if语句后边分号去掉
(3)错误信息:1242331-20171026205023555-1296964130.png
   错误原因:else语句后边不加条件
   改正方法:把 (x != 10) 去掉
(4)错误信息:1242331-20171026205132148-435172483.png
   错误原因:printf语句格式错误
   改正方法:printf语句双引号后应加逗号,xy之间也应该加逗号
(5)错误信息:1242331-20171026205221945-322047571.png
   错误原因:保留小数位数与题目要求不符
   改正方法:第二个printf语句应该把%.2f改成%.1f,把%.lf改成%.1f
(6)错误信息:1242331-20171026205907539-2073601774.png
   错误原因:scanf语句格式错误
   改正方法:把=%f改成%lf,在x前加&符号
(7)错误信息:1242331-20171026210227867-771149796.png
   错误原因:if语句符号错误
   改正方法:把=号改成==号
(8)错误信息:1242331-20171026210814976-2035698664.png
   错误原因:输入格式错误
   改正方法:把\n去掉
(二)学习总结
1、
题目
if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
如果输入b则x=x+1,输入的不是b则y=y+1;
else与if(b)对应;
把x=x+1和y=y+1分别用{}括号括起来;
1242331-20171027124848820-1474475804.png
2、
题目
C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能; (-10< x <10)会先进行-10<x判定,结果只能有0或者1,都会小于10,最后结果为1;
应该为(-10<x && x<10)
3、
题目
C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?
结果a=123,b=1
输入时遇到a,则输入结束,所以a=123,b为随机数
当输入123 45时输出n=2,输入123时输出n=1

include <stdio.h>

int main()
{
int a,b,x;
x=scanf("%d %d", &a, &b);
if(x == 2)
{
printf("a = %d, b = %d\n", a, b);
}
else
{
printf("Input error!");
}
return 0;
}

4、内容总结
在程序中用单引号把一个字符括起来作为字符常量。大小写字母代表不同的字常量,单引号中的空格也是字符常量,字符常量只能包含一个字符。
常用字符的SACII
'a’--'z' 97------122
'A’--'Z' 65-------90
'0'---'9' 48-------57
字符串常量是用双引号括起来,系统会在每个字符串的最后自动加入一个'\0'作为结束标志
'Z'是字符常量,占一个字节,"Z"是字符串常量,占两个字节,其中一个放'\0'

(三)实验总结
2、
(1)题目
本题目要求计算下列分段函数f(x)的值:
(2)流程图
1242331-20171027162132648-1167762841.png
(3)源代码

include <stdio.h>

include <math.h>

int main(void)
{
double x,result;
scanf("%lf",&x);
if (x>=0)
{
result = sqrt(x);
printf("f(%.2f) = %.2f",x,result);
}
else
{
result = pow(x+1,2) + 2 * x + 1/x;
printf("f(%.2f) = %.2f",x,result);
}
return 0;
}
(4)测试数据及运行结果
1242331-20171027162412351-1453269496.png
1242331-20171027162421430-727450706.png
(5)实验分析
问题:1242331-20171027162857539-782508156.png
原因:没有加math头文件
解决办法:在开始加上#include <math.h>语句

4、
(1)题目
对于输入的两个整数,按照要求输出其和差积商
(2)流程图
1242331-20171027164226586-734761630.png
1242331-20171027164231383-734833080.jpg
(3)源代码

include<stdio.h>

include<math.h>

int main(void)
{
int a,b,he,cha,ji;
double shang;
scanf("%d%d",&a,&b);
he=a+b;
printf("%d + %d = %d\n",a,b,he);
cha=a-b;
printf("%d - %d = %d\n",a,b,cha);
ji=ab;
printf("%d
%d = %d\n",a,b,ji);

if (a%b==0)
{
    shang=a/b;
    printf("%d / %d = %.0f\n",a,b,shang);
}
else
{
    shang=(double)a/b;
    printf("%d / %d = %.2f\n",a,b,shang);
}
 

}
(4)测试数据及运行结果
1242331-20171027164500258-754167821.png
1242331-20171027164505617-726044441.png
(5)实验分析
问题:1242331-20171027164846070-1149133847.png
原因:没有强制转换
解决办法:在a或b前边加上(double)

6、
(1)题目
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。
(2)流程图
1242331-20171027170952586-1134332414.png
(3)源代码

include <stdio.h>

include <math.h>

int main(void)
{
int a,b,c;
double s,aera,perimeter;
scanf("%d%d%d",&a,&b,&c);
if((a + b > c) && (a + c > b) && (b + c > a))
{
s = ((double)a + b + c) / 2.0;
aera = sqrt(s * (s - a) * (s - b) * (s - c));
perimeter = a + b + c;
printf("area = %.2f; perimeter = %.2f",aera,perimeter);
}
else
{
printf("These sides do not correspond to a valid triangle");
}
return 0;
}
(4)测试数据及运行结果
1242331-20171027170503101-1540901203.png
1242331-20171027170516351-933842920.png
(5)实验分析
问题:sqrt语句错误
原因:头文件输错了,#include <math.h>输成了#include <stdio.h>
解决办法:把#include <stdio.h>改成#include <math.h>

8、
(1)题目
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图
1242331-20171027171416601-108918448.png
1242331-20171027171426414-1134616380.png
(3)源代码

include <stdio.h>

int main(void)
{
double longth,m1,m3;
int time,m2;
scanf("%lf%d",&longth,&time);
if (longth <= 3)
{
m1 = 10;
}
else if(longth > 3 && longth <= 10)
{
m1 = 10 + 2 * (longth - 3);
}
if(longth > 10 && time < 5)
{
m1 = 10 + (longth - 3) * 2 + (longth - 10) + m2;
}
if(longth > 10 && time >= 5)
{
m1 = 10 + (longth - 3) * 2 + (longth - 10) + m2;
}
if (time >= 5)
{
m2 = (time / 5)* 2;
}
else
{
m2 = 0;
}
m3 = m1 + m2;
printf("%.0f\n",m3);
return 0;
}
(4)测试数据及运行结果
1242331-20171027171606711-965792475.png
1242331-20171027171611211-25346015.png
(5)实验分析
问题:
1242331-20171027172256148-1997970651.png
1242331-20171027172304930-1474934683.png
原因:if条件句条件错误
解决办法:写清>=和<=的情况
(四)PTA提交列表
1242331-20171027173328180-994251313.png
1242331-20171027173334961-1040558086.png

转载于:https://www.cnblogs.com/zxh980818/p/7739803.html

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值