C语言第三次作业

(一)改错题
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
错误信息1:
错误原因:缺少语句结束的那个分号
改正方法:y = 1 / x后面加;

错误信息2:
错误原因:上面那个if语句有;
改正方法:删去;

错误信息3:
错误原因:else语句多出if语句
改正方法:删掉括号里的语句

错误信息4:
错误原因:输出内格式有问题
改正方法:应该为printf("f(%.2f) = %.lf\n", x,y);

错误信息5:
错误原因:由于输出与题不符,此处缺少取地址符
改正方法:应该为&x

错误信息6:
错误原因:输出语句内与题意不符
改正方法:应该为scanf("%lf",&x);

错误信息7:
错误原因:结果不符合期望
改正方法:将源代码中输出语句“%.lf”改成“%.1f”,将输出中的“\n”去掉

错误信息8:
错误原因:输出f括号内有两位小数
改正方法:将2f改为printf("f(%.1f) = %.1f",x,y);

错误信息9:
错误原因:输入234.0输出没变
改正方法:if语句存在问题应该为if(x == 10)

错误信息10:
错误原因:输入分行了
改正方法:将输入语句中的\n删去

改正后源代码:

(二)学习总结

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
答:含义:判断a和b,若成立,则运算“x=x+1”;若不成立,则运算“y=y+1”。
其中else应该和第二个。
明确表达,应该在每个if和else语句后加括号“{}”
代码:

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

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
答:不能
原因:这种表达方式在c语言中要先从左到右的判断是 0 还是 1,并不能用来表示这个区间的数。
正确的表达式:(x>-10 && x<10);

3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?,
程序
(1)结果:
(2)原因:当我们输入一个非法字符时,系统会认为输入自动停止,然后就出现了这个图的现象b被赋值了一个无意义的1

运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?

因为scanf()函数有返回值且为int型。 scanf()函数返回的值为:正确按指定格式输入变量的个数;也即能正确接收到值的变量个数。scanf("%d%d", &a, &b);如果a和b都被成功读入,那么scanf的返回值就是2如果只有a被成功读入,返回值为1。

修改程序(1)

#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.对其他你认为需要进行总结的内容进行总结。
一丶区分“”与“=”的本质区别,=为转换,为赋值
二丶在输入的时候double类型的需要输入 ”%lf“ 不能丢掉 ”l“
三丶在写if条件语句是,if后不能加分号
我们才刚刚开始,路还长,现在需要的是积累,如果问题存在,那我们必须改,这都是在为以后铺路!也希望自己能够越来越好。

(三)实验总结

1。回文数
(1)题目:判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(2)流程图:
(3)源代码:

# include <stdio.h>
int main()
{
	    int a,b,c,d,e,m;

    scanf("%d",&m);
    a = m/10000;
    b = m/1000%10;
    c = m/100%100;
    d = m%100/10;
    e = m%10;

    if (e == a)
    {
	    if(b == d)
	    {
		    printf("yes");
	    }
    }
    else
    {
        printf("no");
    }


    return 0;
}

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

(5)实验分析
问题1:求余经常出问题
原因:运用不熟练
解决办法:请教室友,反复练习

  1. 计算火车运行时间
    (1)题目
    本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
    (2)流程图

    (3)源代码

    include <stdio.h>

    int main()
    {
    int a,b,c,d,s,f,m,n;
    scanf("%d %d",&m,&n);
    a = m/100;
    b = n/100;
    c = m%100;
    d = n%100;
    f = (b-a)*60+(d-c);
    s = f/60;
    f = f%60;
    if(0<s<10)
    {
    if(0<f<10)
    {
    printf("%02d:%02d",s,f);
    }
    else
    {
    printf("%02d:%d",s,f);
    }
    }
    else
    {
    if(24>=s>=10)
    {
    if(0<f<10)
    {
    printf("%d:%02d",s,f);
    }
    else
    {
    printf("%d:%d",s,f);
    }
    }
    }

    return 0;
    }

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

(5)实验分析
问题1:时间进制运算出现问题
原因:没有弄懂怎么运算大于一小时的值
解决办法:向同班这个做得好的同学请教

3:题目
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图

( 3)源代码

# include<stdio.h>
int main()
{
    int N,m;

    scanf("%d",&N);
    m = N%5;
        if(1000>=N>0)
    {
	    if(m==0)
	    {
		    printf("Drying in day %d",N);
       }
    else
    {
		    if(m<=3)
	    {
		    printf("Fishing in day %d",N);
	    }
	    else
	    {
		    printf("Drying in day %d",N);
	    }
         }
    }

    return 0;
}

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

(5)实验分析
问题1:求余出错
原因:思路不清楚
解决办法:询问老师,助教

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

(3)源代码

# include<stdio.h>
int main()
{
    int d;
    double q;

    scanf("%d",&d);
    if(d>=0)
    {
	    if(d<=50)
	    {
		    q=d*0.53;
		    printf("cost = %.2f",q);
	    }
	    else
	    {
		    q=50*0.53+(d-50)*0.58;
		    printf("cost = %.2f",q);
	    }
    }
    	else
    {
	    printf("Invalid Value!");
    }

    return 0;
}

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

(5)实验分析
此题没有太大问题

(四)PTA提交列表


谢谢!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!辛苦了!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

posted @ 2017-10-27 15:18  折翼之舞、  阅读(567)  评论(2编辑  收藏  举报