C语言程序设计第三次作业

(一)改错题
计算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:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029140804008-1618621871.png)

  错误原因:经过检查发现,在if语句中,“y = 1/ x”后缺少“;”
  改正方法:在后边加上”;”

  错误信息2:

  错误原因:if(x = 10);后边加了;
  改正方法:去掉;

   错误信息3:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029141605992-684376290.png)

  错误原因:else后边加东西了
  改正方法:去掉(x != 10)

  错误信息4:

  错误原因:输出语句中 没用逗号分离
  改正方法:在"后边,x后边加上;

   错误信息5:![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029142350148-528824331.png)

  错误原因:输入10.0 后 ,输出不一样,x保留一位小数%.2f是保留两位小数
  改正方法:把%.2f 改为%.1f

  错误信息6:

  错误原因:scanf语句中x前没有&
  改正方法:加上&

   错误信息7;![](http://images2017.cnblogs.com/blog/1242368/201710/1242368-20171029143406398-694031768.png)

  错误原因:输入语句中的不对
  改正方法:把=去掉 改成%lf

  错误信息8:
  错误原因:不应该有\n
改正方法:删去\n

(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:(1)确切含义:ifa,b同时成立,那么输出x=x+1,否则,输出y=y+1
(2)这个else和第二个if更配
(3)if(a && b)
{
printf("x=x+1");
}
else
{
printf("y=y+1");

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答 :(1)不能这么表示。
(2) 这样的话先会比较-10和x的大小,然后再比较后者,这样不会输出正确结果。
(3)(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)输出结果:
(2)因为非法字符无法输出,所以随机输出了。

scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(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;
}
答:(1)
(2)
(3)因为返回值是成功读取变量的个数,所以当输入“123 45”的时候,可以读出两个数据,故n=2;当输入123a的时候因为a为非法数据,不能赋值,所以只将123赋值给了a,所以n=1。

4.总结:通过改这些题,做这些题,注意整形,实型的区别,还有就是if,else语句的用法,注意相关的格式。

(三)实验总结
本次实验总结,学号末位数是单数的同学完成选择结构(1)中的3、5、7、9题,学号末位数是双数的同学完成选择结构(1)中的2、4、6、8题。

(1)题目

(2)流程图

(3)源代码
int main(void)
{
double x,result;
scanf("%lf",&x);
if (x >= 0)
{
result = sqrt(x);
printf("f(%.2f) = %.2f",x,result);
}
else if (x < 0)
{
result = pow((x+1),2)+2*x+1/x ;
printf("f(%.2f) = %.2f",x,result);
}
return 0;
}
(4)测试数据及运行结果

(5)实验分析
记录实验中遇到的问题及解决方法,格式如下:
问题:
解决办法:加上#include<math.h>

4 .
(1)题目
对于输入的两个整数,按照要求输出其和差积商。在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。
(2)流程图

(3)源代码

include<stdio.h>

int main()
{
int a,b;

scanf("%d %d",&a,&b);
if(a%b == 0)
{
	printf("%d + %d = %d\n%d - %d = %d\n%d * %d = %d\n%d / %d = %d",a,b,a+b,a,b,a-b,a,b,a*b,a,b,a/b);
}
else 
{
	printf("%d + %d = %d\n%d - %d = %d\n%d * %d = %d\n%d / %d = %.2f",a,b,a+b,a,b,a-b,a,b,a*b,a,b,a/(double)b);

}

return 0;

}
(4)测试数据及运行结果

(5)实验分析
问题1:
原因:a/b进行小数转化,在前面加(double)
解决办法:XXXXXX

(1)题目
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
​s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
(2)流程图

(3)源代码

include<stdio.h>

include<math.h>

int main()
{
int a,b,c;
double s,area,p;
scanf("%d %d %d",&a,&b,&c);
if (a+b>c && a+c>b && b+c>a)
{
s = (a + b + c)/2.0;
area = sqrt(s(s - a)(s - b)*(s - c));
p = a + b + c;
printf("area = %.2f; perimeter = %.2f",area,p);

}
else
{
printf("These sides do not correspond to a valid triangle");
}

return 0;
}
(4)测试数据及运行结果

(5)实验分析

问题1:输出错误
原因:经检查,未加入数学字符#include

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

(3)源代码

include <stdio.h>

int main()
{
int t,x,m;
double s,q,y;

scanf ("%lf %d",&s,&t);
s = s*10;
if(s>100)
{
	s = s/10;
	q = (s-10)*3+10+14;
}
else
{
	if(s>=30)
	{
		s = s/10;
		q = (s-3)*2+10;
	}
	else
	{
		if (s>=0)
		{
			q = 10;
		}
	}
}
x = t/5;
q = 2*x+q;
m=(int)(q+0.5);
printf("%d\n",m);

return 0;

}
(4)测试数据及运行结果


(5)实验分析
记录实验中遇到的问题及解决方法,格式如下:
问题1:结果运算出来不正确
原因:没有考虑按每5分钟2元计收(不足5分钟则不收费)。
(四)PTA提交列表


posted @ 2017-10-29 17:14  计科02刘骥飞  阅读(1192)  评论(0编辑  收藏  举报