C语言程序设计第三次作业——选择结构(1)

(一)改错题

计算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
错误信息1:
错误原因:语句后缺少分号
改正方法:加分号
错误信息2:
错误原因:if后语句中应为两个=,if后加分号,else后加语句
改正方法:加一个=,去分号,在else后加if
错误信息3:
错误原因:分号后以及xy之间应有逗号
改正方法:加逗号
错误信息4:
错误原因:多了\n
改正方法:去掉\n
错误信息5:
错误原因:scanf语句中有错误
改正方法:=%f改为%lf,x前加&

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

#include<stdio.h>
int main()
{
    int a,b,x,y;
        scanf("%d %d",a,b);
    if(a)
    if(b)
    {
	    x=x+1;
    }
    else
    {
	    y=y+1;
    }
    return 0;
}

(1)判断ab是否成立,成立输出x=x+1,否则输出y=y+1
(2)if(b)
(3)if(b)改为else if(b)
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
不能,此表达式会先判定-10<x,得到的结果只有0 1,(-10<x && x<10)
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?
(1)a=123,b=1 123自动放在了a中,而b是非法字符,所以输出的b为随机数。
scanf()函数的返回值是成功读入数据的个数,如果没有读取任何数据,则返回0。运行程序(2),分别输入123 45和123a,看看输出结果是什么?为什么?
(2)输出n=2 n=1 123 45时n=2是因为scanf中程序认为a为123b为45成功读入了两个数据,123a时则遇到了非法字符,则只读入了一个123所以n=1
修改程序(1),当输入非法数据时,输出“Input error!".
(3)

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

4.自我总结
我认为if后的语句要注意括号内要有两个等号,括号外不加分号,else后不加语句,
出现嵌套时要考虑好哪个语句先说会让程序比较简洁

(三)实验总结
1.回文数
(1)题目
判断一个5位数是不是回文数。例如12321是一个回文数,即它的个位与万位相同,十位与千位相同。
(2)流程图

(3)源代码

#include<stdio.h>
int main()
{
    int A,B,C,D,E;
    scanf("%d",&A);
    B = A / 10000;
    C = A % 10;
    D = A % 10000 / 1000;
    E = A % 100 / 10;
    if(B == C && D == E)
    {
    	printf("yes");
    }
    else
    {
    	printf("no");
    }
    return 0;
}

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


(5)实验分析
问题1:不知道回文数如何判定
原因:。。。
解决办法:询问同学
2.计算火车运行时间
(1)题目
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图

(3)源代码

#include<stdio.h>
int main()
{
    int A,B,C,D,E,F,G,H,I,J;
    scanf("%d %d",&A,&B);
    C = A / 100;
    D = B / 100;
    E = A % 100;
    F = B % 100;
    G = D - C;
    H = F - E;
    if (F>=E)
    {
    	printf("%02d:%02d",G,H);
    }
    else
    {
            D = D - 1;
	    F = F + 60;
	    J = D - C;
	    I = F - E;
	    printf("%02d:%02d",J,I);
    }
    return 0;
}

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

(5)实验分析
问题:未注意分钟数为负数的情况
原因:没认真理解题意
解决办法:验证时发现并改正
3.三天打鱼两天晒网
(1)题目
中国有句俗语叫“三天打鱼两天晒网”。假设某人从某天起,开始“三天打鱼两天晒网”,问这个人在以后的第N天中是“打鱼”还是“晒网”?
(2)流程图

(3)源代码

#include <stdio.h>
int main(void)
{
    int N;
    scanf("%d",&N);
    if(N % 5 == 0 || (N + 1) % 5 == 0)
    {
    	printf("Drying in day %d",N);
    }
    else
    {
       	printf("Fishing in day %d",N);
    }

    return 0;
}

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


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

(3)源代码

#include <stdio.h>
int main(void)
{
    double a,b;
    scanf("%lf",&a);
    if(a >=0)
    {
    	    if(a <= 50)
	    {
	    	    b = a * 0.53;
	    	    printf("cost = %.2f",b); 
	    }
	    else
	    {
		    b = 50 * 0.53 + (a - 50) * 0.58;
		    printf("cost = %.2f",b); 
	    }
    }
    else
    {    
	    printf("Invalid Value!");
    }

    return 0;
}

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


(5)实验分析
无问题

(四)PTA提交列表



posted @ 2017-10-28 10:58  DiRt  阅读(186)  评论(0编辑  收藏  举报