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

(一)改错题:
(1)将题目给出的源程序输入编译器

错误信息一:进行编译后,发现错误信息1,错误信息如图

错误原因:y = 1/x后面没有加分号。
改正方法:在y = 1/x后面加分号。正确格式 y = 1/x;
错误信息二:经过改正错误信息一,进行编译后,发现错误信息二,错误信息如图

错误原因:if语句后面加了分号
改正方法:if语句后面不应该加分号。正确格式:if(x = 10)
错误信息三:经过改正错误信息二,进行编译后,发现错误信息三,错误信息如图

错误原因:else语句错误。如果只用else 就不能加条件。
改正方法:去掉(x != 10) 正确格式 else
经过改正错误信息三,进行编译后,编译结果显示没有错误,
输入10.0结果显示:
错误信息四: 。错误信息如图
错误原因:x保留一位小数%.2f是保留两位小数。
改正方法:把2改成1.正确格式 f(%.1f)
错误信息五 :
错误原因:y定义的是double类型,输出时是%f不是%lf。运行结果中不相符。因为有换行符(\n)。
改正方法:因为输出时保留一位小数所以把l改成1.正确格式 %.1f 把换行符\n删掉。
错误信息六:
错误原因:没有&,输入时没有=,double类型的变量输入时是%lf
改正方法:去掉= 在f前加上l 在x前加上& 正确格式 ("%lf,&x);
输入10.0后运行显示:
输入234.0后运行显示:
错误信息六:输入234.0后f(10.0)=10.0
错误原因:x=10中等于号是赋值。在c语言中等于的符号是==
改正方法:把=改成==
正确程序:
正确运行结果:

(二)学习总结

1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
[答] (1)确切含义:此题如果a和b同时成立时输出x=x+1.否则输出y=y+1
(2)else和第二个if配对。
(3)正确格式:

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

2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
C语言的表达式 (-10< x <10)不能够表达x在区间(-10,10)
(2)在c语言中如果(-10<x<10)从左到右先判断-10<x,如果正确是1错误是0,之后是0或1和10进行比较大小了
(3)正确的表达式:(x>-10 && x<10)
3.运行程序(1)输入123a结果为

出现此结果的原因:a 定义的是整数,输入123a中a为非法字符,所以a之前输入结束,所以a被赋值为123,非法字符不能被赋值所以b被系统赋值1。
运行程序(2)输入123 45结果为:
出现此结果的原因:scanf()函数的返回值是成功读入数据的个数,输出n=2,所以成功读入的数据个数为2。
输入123a结果为:
出现此结果的原因:因为a为非法字符所以输入终止,成功读入的数据为1。

修改程序(1)
输入123 45结果为:
输入123a结果为:
4总结: (1)if语句的嵌套:当if语句的条件满足或不满足时要执行的语句也是一条if或if...else语句,称为if语句的嵌套。
(2)else的匹配问题:if~else配对原则:省略{}时else总是和它上面离它最近的未配对的if配对。
(3)关系表达式a>b>c应该是a>b && b>c
(4)在C语言中真用1表示,假用0表示。

(三)实验总结
1.
计算分段函数
(1)题目

(2)流程图

(3)源代码

(4)结果:


(5)实验分析
问题1:
原因:语句中有数学运算
解决办法:加上
2.
算术入门之加减乘除
(1)题目
对于输入的两个整数,按照要求输出其和差积商。在一行内输入两个不超过100的非负整数a和b,中间以一个空格间隔,且保证b不为0。
(2)流程图

(3)源代码

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


(5)实验分析
问题1:
解决办法:a/b进行小数转化,在前面加(double)
问题2
原因:a%b等于0,a%b=0中=是赋值。
解决办法:把=改成==
3.
输出三角形面积和周长
(1)题目
根据输入的三角形的三条边a、b、c,计算并输出面积和周长
(2)流程图

(3)源代码

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


(5)实验分析
问题一:输出不来结果。
解决:加上#include<math.h>

(1)题目 :出租车计价.起步里程为3公里,起步费10元;
超起步里程后10公里内,每公里2元;
超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)流程图

(3)源代码

#include<stdio.h>
#include<math.h>
int main (void)
{
 int t,g;
 double km,yuan;
 scanf("%lf %d",&km,&t);
 g=t/5*2;
 if(km<=3)
 {
	yuan=10+g;
 printf("%.0lf",yuan);	
 }
 if(km>3&&km<=10)
 {
	yuan=10+(km-3)*2+g;
	printf("%.0f",yuan);
 }
 else if(km>10)
 {
	yuan=10+14+(km-10)*3+g;
	printf("%.0f",yuan);
 }
 return 0 ;
}

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



(5)实验分析
问题一:结果运算出来不正确。
原因:没有考虑按每5分钟2元计收(不足5分钟则不收费)。
解决:g=t/5*2;并把g加进钱数上。
(四)PTA提交列表



posted @ 2017-10-28 22:55  氧气wq  阅读(411)  评论(0编辑  收藏  举报