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:

错误原因:if后面不应该有分号
解决方法:删去分号
错误信息2:

错误原因:y = 1 / x后面没有分号
解决办法:加上分号
错误信息三:

错误原因:else后面不应该有条件
解决办法:将else后面的删除
错误信息四:

错误原因:字母之间没有用逗号分开
解决办法:在字母间加上逗号
错误信息五:

不符合题目要求
错误原因一:格式符错误
解决办法:将%f改为%lf
错误原因二:1/x的结果为整数
解决办法改成1.0/x
错误原因三:scanf中x前面没有&
改正方法:在x前面加上&
错误原因四:if(x = 10)只有一个等号,一个等号代表赋值
改为if(x == 10)
错误原因五:scanf("=%lf", &x);中的等号会影响输入
改正方法:删去等号
错误原因六: printf("f(%.2f) = %.lf\n",x,y); y应该保留一位小数
改正方法:改为 printf("f(%.2f) = %.1lf\n",x,y);

**(二)学习总结 **

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
如果a成立则判断b是否成立,b成立则x=x+1不成立则y=y+1
else和最近的if配对
规范格式

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

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?

不能 -10<x<10在c语言中会从左至右运行。先判断x是否大于-10,若是则该式等于1,再判断1是否大于10,若x不大于-10,则该式等于0,再和10比较,但结果都是0
正确表达式应该是-10<x && x<10
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
程序(1)
运行结果:

原因:因为a是int类型的,应该是整数,所以不会读入a,而b没有输入,输出的b为随机数
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
程序(2)
运行结果:

原因:a,b,n皆为int类型的,而输入的只有123 45符合要求而scanf会输出符合要求的个数,即为2
修改程序(1),当输入非法数据时,输出“Input error!".样例如下:

源代码

#include <stdio.h>
int main()
{   
    int  a,b,n;
    n = scanf("%d%d",&a,&b);
    if(n == 2)
		{
		printf("a = %d, b = %d\n", a, b);
	}
else
	{
		printf("Input error!");
	}	

return 0;

}

4.对其他你认为需要进行总结的内容进行总结。
自己做了这么多道题,改了很多错误,发现学习真的非常非常非常需要耐心和细心,英文的符号和中文的看起来差不多,却会引发完全不同的结果。另外还要注意编写代码时要规范,既方便自己不会看错搞混,也不会让其他人看着一脸懵逼。在设计程序时也要
注意要考虑周全,考虑到输入非法字符时应该怎么办,如何编写的尽量简洁,你一串很长的代码别人可能一两行就解决了。总之,要学的还有很多。

**(三)(实验总结) **

(1) 计算分段函数

(2)流程图

(3)源代码

    #include<stdio.h>
    #include<math.h>
    int main()
    {
double x,y;
scanf("%lf",&x);
if(x >= 0)
{
	y = sqrt(x);
}
else
{
	y = (x+1)*(x+1)+2*x+1/x;
}
printf("f(%0.2f) = %0.2f",x,y);
return 0;	
    }

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

(5)实验分析
这道题应注意输入的可以是小数,所以x,y都要设成double以及最后的输出结果应该保留两位小数,注意格式。

(1) 算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商。
(2)流程图

(3)源代码

#include<stdio.h>
int main()
{
int x,y,a,b,c;
double d;
scanf("%d%d",&x,&y);
a = x + y;
b = x - y;
c = x * y;
if(x%y == 0)
	{
	d = x / y;
	printf("%d + %d = %d\n",x,y,a);
	printf("%d - %d = %d\n",x,y,b);
	printf("%d * %d = %d\n",x,y,c);
	printf("%d / %d = %.0f\n",x,y,d);
	}
     else
    {
	d = (double)x/y;
	printf("%d + %d = %d\n",x,y,a);
	printf("%d - %d = %d\n",x,y,b);
	printf("%d * %d = %d\n",x,y,c);
	printf("%d / %d = %.2f\n",x,y,d);
}

return 0;
}

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

(5)实验分析
此题仍然要注意小数的情况,a能不能被b整除有着区分,一个直接输出整数,一个保留两位小数。当结果不是小数是应该用double进行强制转化

(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 x,y,s;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c && a+c>b && b+c>a)
{
	s = (a+b+c)/2;
	x = a+b+c;
	y= sqrt(s*(s-a)*(s-b)*(s-c));
	printf("area = %0.2f; perimeter = %0.2f",y,x);
}
else
{
	printf("These sides do not correspond to a valid triangle");
}
return 0;
    }

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


(5)实验结果
问题1:计算结果错误
原因:计算面积时公式用错
解决办法:改正公式
这道题应该主要因为使用了sqrt函数,所以要在应该在开头加入#include<math.h>这个头文件,其次主要保留小数

(1)出租车计价

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

(3)源代码

    #include<stdio.h>
    int main()
    {
int b;
double a,c,e,d;
scanf("%lf%d",&a,&b);
if(a <= 3)
{
c = 10;
}
else if(a>=3 && a<=10)
{
c = (a-3)*2+10;
}
else
{
c = (a-10)*3+24;
}
d = b / 5 * 2;
e = c + d;
printf("%.0f",e);
return 0; 
    }

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


(5)实验分析
依旧需要注意小数的问题。。。

**(四)(PTA提交列表) **



posted @ 2017-10-27 21:13  WH吴晗  阅读(623)  评论(0编辑  收藏  举报