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: 
"); 
    scanf("=%f", x);
    if(x = 10);
    { 
        y = 1 / x
    }
    else (x != 10)
    {
       y = x;
    }
    printf("f(%.2f) = %.lf
" x y); 
    return 0; 
 }

对源程序进行编译结果如图:

错误1:在第10行缺少分号
改正1:加上分号,注意这种错误不能再犯
继续编译

错误2:else前边没有定义的if
改正2:将if后边的分号去掉
继续编译

错误3:在else后边加了条件将,格式错误
改正3:将后边的条件去掉
继续编译

错误4:在15行中的x和y中间缺少了逗号,格式有问题
改正4:在中间加上逗号,粗心,以后要注意。
编译程序无错误

但输入数出现停止运行的 情况

错误5:在代码第六行中输入缺少&,这也属于格式错误
改正5:中间加上取地址符

继续编译则输入数有错误

错误6:输入10.0的时候,输出结果为0与题目中要求不符
改正:重新检查代码,将lf改成1f

继续编译

暂时正确,但输入情况2还有错误

错误7:当输入整数时结果是错误的依然显示10.00
改正7:经检查第6行应将f改为lf
继续编译还是出现错误

错误8:编译中等号没体现出来,导致结果出现错误
改正8:将x =10改为x==10
编译结果正确

代码如下:

 #include <stdio.h> 
 int main(void)
 { 
    double x,y;
    printf("Enter x: 
"); 
    scanf("=%lf", &x);
    if(x == 10)
    { 
        y = 1 / x;
    }
    else 
    {
       y = x;
    }
    printf("f(%.2f) = %.1f
", x, y); 
    return 0; 
     }

(二)学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:此题主要判断a与b是否同时成立,若成立,则执行x=x+1,若不成立,则执行y=y+1,其中else与第二个if配对
代码如下:

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

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

答:不能这样表达,在c语言中程序是从左往右执行来判断是0还是1的,所以在此程序中会先判断最开始是否成立,

成立为1,不成立为0,接着往下判断正确表达式应该为:(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
", a, b);
return 0;
}

结果:

原因:题目要求输入整形数据,而在输入过程输入了123a如果输入非法数据会被认为程序终止运行,所以a=123,b被程序赋予任意值为1

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);
return 0;
}

输出结果:


原因:

scanf()函数的返回值是成功读取数据的个数,题目中输入的是整形int,在情况1中读取两个数据返回值为2,而在2中遇到非法字符a,则程序异常停止,读取数据返回值为1

修改程序(1),当输入非法数据时,输出“Input error!".
程序如下:


结果:

4总结
(1)在写程序时总是粗心忘掉一些必要的符号,导致格式错误
(2)在赋值的时候总是忘掉“==”写成“=”
(3)还有就是好多函数的使用规则没弄清楚,基础不扎实

(三)实验总结

2
(1)题目

.本题目要求计算下列分段函数f(x)的值:

注:可在头文件中包含math.h,并调用sqrt函数求平方根,调用pow函数求幂。

(2)流程图

(3)源代码

#include<stdio.h>
#include<math.h>
int main()
{
  double x,fx;

  scanf("%lf",&x);

  if(x>=0)
  {
  fx=pow(x,0.5);
  printf("f(%.2f) = %.2f",x,fx);
  }
else
  {
    fx=(x+1)*(x+1)+2*x+1/x;
    printf("f(%.2f) = %.2f",x,fx);
	
  }

}

(4)结果:

(5)实验分析
本题实际要求将x fx定义成double 型而之前没有想到这个,用的整型变量,导致浪费了好长时间也没有运行出结果

4.(1)题目
算术入门之加减乘除
对于输入的两个整数,按照要求输出其和差积商。
输入格式:
在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。

(2)流程图

(3)源代码

 #include<stdio.h>
int main()
{
int a,b,x,i,j,k;
float m;
scanf("%d %d",&a,&b);  
x=a+b;
i=a-b;
j=a*b;
printf("%d + %d = %d
",a,b,x);
printf("%d - %d = %d
",a,b,i);
printf("%d * %d = %d
",a,b,j);

if(a%b==0)
{
k=a/b;
printf("%d / %d = %d
",a,b,k);
}
else
{
float a1=a*1.00;
float b1=b*1.00;
m=a1/b1;
printf("%d / %d = %0.2f
",a,b,m);
}
return 0;
}

(4)结果

(5)总结
带小数点的转换总是有问题,这一部分有待学习
6(1)题目
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√
​s(s−a)(s−b)(s−c)

​​,其中s=(a+b+c)/2。
输入格式:
输入为3个正整数,分别代表三角形的3条边a、b、c。
输出格式:
如果输入的边能构成一个三角形,则在一行内,按照
area = 面积; perimeter = 周长
的格式输出,保留两位小数。否则,输出
These sides do not correspond to a valid triangle
(2)流程图

(3)源程序

#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
float e,s,f;

scanf("%d %d %d",&a,&b,&c);

if(a+b>c&&a+c>b&&b+c>a)

{
s=(a+b+c)/2;
e=sqrt(s*(s-a)*(s-b)*(s-c));
f=a+b+c;
printf("area = %.2f; perimeter = %.2f",e,f) ;
}

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


return 0;


}

(4)结果

(5)分析

这个感觉没什么问题编译直接通过

8(1)题目

本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
输入格式:
输入在一行中给出输入行驶里程(单位为公里,精确到小数点后1位)与等待时间(整数,单位为分钟),其间以空格分隔。
输出格式:
在一行中输出乘客应支付的车费(单位为元),结果四舍五入,保留到元,
(2)流程图

(3)源代码

#include<stdio.h>
int main()
{
   float a,b;
   int x,y,c;
   scanf("%f %d",&a,&x);
   y=(x/5)*2;
if(a<=3.0)
{
 b=10+y;
 c=(int)(b+0.5); 
 printf("%d",c);
    }
else if(a>3&&a<10)
{
b=10+(a-3)*2+y;
c=(int)(b+0.5);
printf("%d",c);
    }
else
{
 
b=10+14+3*(a-10)+y;
c=(int)(b+0.5);
printf("%d",c);
   }
   return 0;
}

(4)结果

(5)分析
(四)PTA提交列表

原文地址:https://www.cnblogs.com/xing--/p/7740470.html