第三次作业

第三次作业

(一)改错题

计算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
源程序
     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:

  • 错误原因:第9行没有加分号";"。

  • 改正方法:在第9行加上一分号";"。

  • 错误信息2:

  • 错误原因:else 没有对应的 if。

  • 改正方法:把括号和里面的条件去掉。

  • 错误信息3:

  • 错误原因:if后面加了分号,else没有对应的if。

  • 改正方法:把if后面的分号";"去掉。

  • 错误信息4:

  • 错误原因:printf输出中没有加逗号(,)

  • 改正方法:在输出中加入逗号","。

  • 错误信息5:

  • 错误原因:输出的值与应得的值不相等

  • 改正方法:把第15行的%.lf改成%.1f

改正后输出正确
  • 错误信息6:
  • 错误原因:输出答案不正确。
  • 改正方法:把scanf中的%f改成%lf,把(x=10)改成(x==10)。
  • 错误信息7:
  • 错误原因:输出的值不相等
  • 改正方法:在scanf中加入取地址符号&。
输出错误!
  • 错误信息8:
  • 错误原因:格式错误!
  • 改正方法:那scanf中的“=”去掉。
改正后输出正确。

(二)学习总结

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

if(a)
if(b)
{
    x=x+1;
}
else
{
	y=y+1;
}
含义:判断是否是a b,如果是a,则输出x=x+1;如果是B,则输出是y=y+1。
else与if(b)相匹配。
正确格式
if(a && b)
{
    x=x+1;
}
else
{
    y=y+1;
}

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

不能。因为C语言中是一句一句来判断的,只能是“真”“假”“1”“0”,所以如果按照题目中的来写,先判断的是x>-10这个,然后判断出的结果再和10作比较。
正确格式

(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;
}
输出结果:

解释:一开始定义的是整形变量,没有定义字符变量,当输入非法字符的时候,默认为还会完成,因为会完成所以为真,则输出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", n);
    return 0;
}


因为第一次输入的时候都是整型的,读取了俩次,所以返回的时候是2。而第二次没有定义字符型的,则只读取了一次,所以返回的是1。

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

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

4.对其他你认为需要进行总结的内容进行总结

  • 1."%c”输入时,空格字符和“转义字符”作为有效字符输入。
  • 2.输入相等的时候要用"==",而不是"="。
  • 3.if和else是一一对应的关系,在选择判断时不能用镶嵌的格式,只能分开来写。
  • 4.在测试的结果的时候我们要格外注意题目所给的格式,否则就会出错,并且输出错误。
  • 5.在用到表达式的时候我们要注意格式,注意输出的时候保留几位小数。

(三)实验总结

(1)题目

7-3 回文数

判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。

(2)流程图

(3)源代码
#include <stdio.h>
int main(void)
{
	int n,a,b,c,d;
	scanf("%d",&n);
	n>=10000 && n<=99999;
	a=n/10000;
	b=n/1000%10;
	c=n/10%1000%10;
	d=n%10000;
	if(a==d,b==c)
	{
	printf("yes");
	}
	else
	{
	printf("no");
	}
	
	return 0;
}
(4)测试数据及运行结果


(5)实验分析:

问题1:

原因:相等的时候写成了“=”。

解决办法:把“=”改成“==”。

(1)题目

7-5 计算火车运行时间

本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。

(2)流程图

(3)源代码
#include <stdio.h>
int main(void)
{
	int a,b,c,d,e,f,g,h;
	a>=1000 && a<=9999;
	b>=1000 && b<=9999;
	scanf("%d %d",&a,&b);
	c=a/100;
	d=b/100;
	e=a%100;
	f=b%100;
	g=d-c;
	h=f-g;
	if(f<e)
	{
	h=f+60-e;g=d-1-c;
	}
	else
	{
	h=f-e;g=d-c;
	}
	printf("%02d:%02d",g,h);
	
	return 0;
} 
(4)测试数据及运行结果

(5)实验分析:

问题1:

原因:在输出的时候,格式错误。

解决办法:把“%2d”改成"%02d"。

(1)题目

7-7 三天打鱼两天晒网

中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?

(2)流程图

(3)源代码
#include <stdio.h>
int main(void)
{
	int N,D;
	N<1000 && N>0;
	scanf("%d",&N);
	D=N%5;
	if(D>0 && D<=3)
	{
	printf("Fishing in day %d",N);
	}
	else
	{
	printf("Drying in day %d",N);
    }
    
    return 0;
}
(4)测试数据及运行结果


(5)实验分析:

问题1:

原因:在if后面加了“;”,没有对应的else。

解决办法:把if后面的“;”去掉。

(1)题目

7-9 阶梯电价

为了提倡居民节约用电,某省电力公司执行“阶梯电价”,安装一户一表的居民用户电价分为两个“阶梯”:月用电量50千瓦时(含50千瓦时)以内的,电价为0.53元/千瓦时;超过50千瓦时的,超出部分的用电量,电价上调0.05元/千瓦时。请编写程序计算电费。

(2)流程图

(3)源代码
#include <stdio.h>
int main(void)
{
	double x,y;
	scanf("%lf",&x);
	if(x<50 && x>0)
	{
		y=x*0.53;
		printf("cost = %.2f",y);
	}
	else if(x>=50)
	{
		y=50*0.53+(x-50)*0.58;
	
	printf("cost = %.2f",y);
    }
	else
	{
		printf("Invalid Value!");
	}
	return 0;
}
(4)测试数据及运行结果


(5)实验分析:

问题1:

原因:因为是double类型,在scanf输入中应该是“%lf”而不是“%f”。

解决办法:把“%f”改成“%lf”。

(四)PTA提交列表


posted @ 2017-10-28 23:44  一只猫の磊☀  阅读(275)  评论(0编辑  收藏  举报