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

源程序(有错误的程序)

  #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:
错误原因:大括号里的语句没有加括号
改正方法:在y=1/x后加封号
错误信息2:
错误原因:else后面有语句
改正方法:将else后面的语句删掉
错误信息3:
错误原因:if后面加了封号
改正方法:把if后面的封号去掉
错误信息4:
错误原因:x前后都没有逗号
改正方法:在x前后加上逗号
错误信息5:
错误原因:printf后面加了
改正方法:把 去掉
错误信息6:
错误原因:if语句中用了一个=,使其变成了赋值语句
改正方法:加上一个=就行
输出样式正确,如下图

(二)学习总结

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)吗?为什么?如果不能,正确的表达式应该怎么写?

表达式不能够表达在这个区间,因为这是逻辑运算符,只表达结果为真或假,如果x>-10为真,这是x被赋值为1,如果1<10为真,这时整个表达式为1。正确的表达式应为(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;
}

输出结果如图:
原因:当输入123后,继续输入a,系统认为输入非法字符,输出停止

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;
}

输入123 45时:
输入123a时:
原因:第一次输入时两个数符合整形量;第二次输入时a为字符型变量,但是输出时%d输出的,所以a无法输出,只能输出整形量123。

修改程序(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 ", a, b);
}
else
{
printf("Input error");
}
return 0;
}

4.对其他你认为需要进行总结的内容进行总结
*if里面是判断语句,不是赋值语句
*注意double int float 和char之间的不同,double是用%lf来定义,int是用%d来定义,float是用%f来定义,而char是用%c来定义
*每条switch语句后面都得有break;

(三)实验总结
我的学号尾数是单数,应完成选择结构的3、5、7、9

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

(3)源代码

include<stdio.h>

int main(void)
{
int i,a,b,c,d,e;
scanf("%d",&i);
a = i/10000;
b = (i/1000)%10;
c = (i/100)%10;
d = (i/10)%10;
e = i%10;
if(a == e&&b == d)
{
printf("yes");
}
else
{
printf("no");
}
return 0;

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

(5)实验分析
问题:不会求个位十位上的数
解决方法:请教同学,现在懂了

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


(3)源代码

include <stdio.h>

int main ()
{
int a,b,c,d,e,f,g,h;
scanf("%d%d",&a,&b);
c = a / 100;
d = a % 100;
e = b / 100;
f = b % 100;
g = e - c;
h = f - d;
if(f < d)
{
g = g - 1;
h = 60 + h;
}
printf("%02d:%02d",g,h);
return 0;
}

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

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

(3)源代码

include <stdio.h>

int main (void)
{
int N;
scanf("%d",&N);
if(N % 5 == 1 || N % 5 == 2 || N % 5 == 3)
{
printf("Fishing in day %d",N);
}
if(N % 5 == 4 || N % 5 == 0)
{
printf("Drying in day %d",N);
}
return 0;
}
(4)测试数据及运行结果

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

(3)源代码

include <stdio.h>

int main (void)
{
int n;
double x=0,y=0;
scanf("%d",&n);
if(n>=0&&n<=50)
{
x=n0.53;
printf("cost=%.2f",x);
}
else if(n>50)
{
y=50
0.53+(n-50)*0.58;
printf("cost=%.2f",y);
}
else
{
printf("Invalid Value!");
}
return 0;

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

(5)实验分析
在scanf中一直丢&符号,printf后忘加封号。

(四)PTA提交列表

PTA中完成选择结构(1)习题集的提交列表截图。注意:截图必须显示题目集名称和用户名

原文地址:https://www.cnblogs.com/zrx--/p/7746615.html