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

(一)改错题
1、题目
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
(1)错误信息:
   错误原因:y = 1 / x语句没有加分号
   改正方法:在y=1/x语句后加个分号
(2)错误信息:
   错误原因:if语句后不加分号
   改正方法:把if语句后边分号去掉
(3)错误信息:
   错误原因:else语句后边不加条件
   改正方法:把 (x != 10) 去掉
(4)错误信息:
   错误原因:printf语句格式错误
   改正方法:printf语句双引号后应加逗号,xy之间也应该加逗号
(5)错误信息:
   错误原因:保留小数位数与题目要求不符
   改正方法:第二个printf语句应该把%.2f改成%.1f,把%.lf改成%.1f
(6)错误信息:
   错误原因:scanf语句格式错误
   改正方法:把=%f改成%lf,在x前加&符号
(7)错误信息:
   错误原因:if语句符号错误
   改正方法:把=号改成==号
(8)错误信息:
   错误原因:输入格式错误
   改正方法:把\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分别用{}括号括起来;

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)流程图

(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)测试数据及运行结果


(5)实验分析
问题:
原因:没有加math头文件
解决办法:在开始加上#include <math.h>语句

4、
(1)题目
对于输入的两个整数,按照要求输出其和差积商
(2)流程图


(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=a*b;
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)测试数据及运行结果


(5)实验分析
问题:
原因:没有强制转换
解决办法:在a或b前边加上(double)

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

(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)测试数据及运行结果


(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)流程图


(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)测试数据及运行结果


(5)实验分析
问题:


原因:if条件句条件错误
解决办法:写清>=和<=的情况
(四)PTA提交列表

posted @ 2017-10-27 17:44  路明非丶丶  阅读(483)  评论(0编辑  收藏  举报