第三次作业
改错题
错误信息:![](http://images2017.cnblogs.com/blog/1242824/201710/1242824-20171027112926586-913924886.png)
错误原因:有语句没加分号
改正方法:在y=1/x后加;
错误信息:
错误原因:if语句后面有分号
改正方法:去掉if语句后面的分号
错误信息:
错误原因:else后面加了条件
改正方法:去掉else后面的条件
错误信息:
错误原因:xy之间和之前缺少,
改正方法:xy之间之前加,
错误信息:
错误原因:输入缺少地址符
改正方法:scanf("%f", &x);
错误信息:
错误原因:if后面的等于误用为赋值
改正方法: if(x ==10)
错误信息:
错误原因:double变量的输入格式字符串用了f
改正方法:scanf("%lf",&x);
错误信息:
错误原因:输出的格式字符串1写成l
改正方法:printf("f(%.2f) = %.1f\n",x,y);
错误信息:
错误原因:输出f()内应为一位小数,.2f是两位小数
学习总结
1.if(a)if(b) x=x+1;else y=y+1; 的确切含义是什么?这个else应该和哪个if配对?如何明确表达这种配对方法?将该段代码按照规范化的格式进行书写。
(1)如果a是真则判断b,b是真则给x+1,b是假则给y+1
(2)和第二个
(3)
#include<stdio.h>
int main()
{
if(a)
{
if(b)
{x=x+1}
else
{y=y+1}
}
return 0;
}
2.C语言的表达式 (-10< x <10)能够表达x在区间(-10,10)吗?为什么?如果不能,正确的表达式应该怎么写?
(1)不能
(2)两个条件要想合在一起应该用&&
(3)(x<10&&x>-10)
3.C语言中输入数据时,如果遇到非法字符,则认为输入结束。运行程序(1),输入123a,看看输出结果是什么?你能解释是为什么吗?
(1)a=123,b=1
(2)如果有空格,则以空格为分界分成两个数,如果没空格,则默认除了第一个数每多两个数都会算为第一个数,并把最后一位当做第二个数。遇到非法字符,则非法字符及以后的字符全作废,若没有正常字符,则第一个数算0,第二个算1
4.分别输入123 45和123a,看看输出结果是什么?为什么?
(1)n=2,n=1
(2)把scanf赋值给变量时,scanf的值是输入的合法字符的个数
5.修改程序(1),当输入非法数据时,输出“Input error!".
#include <stdio.h>
int main()
{
int a,b,n;
n=scanf("%d%d", &a, &b);
if(n==0||n==1)
{
printf("Input error!");
}
else
{
printf("a = %d,b = %d",a,b);
}
return 0;
}
6.对其他你认为需要进行总结的内容进行总结。
ifelse结构里,如果if下面是else,则如果if条件为真旳话直接进行这个后跳出,还是if旳话把所有if都判断一遍再往真的条件下进行。switchcase中,如果case下面有break旳话进行完这个case马上跳出,没有旳话把此case及以后所有case下的都运行一遍再跳出,如果所有case都不符合计算要求就在default里计算,没有default直接跳出。
实验总结
计算分段函数
(1)本题目要求计算下列分段函数f(x)的值
(2)
(3)
#include<stdio.h>
#include<math.h>
int main()
{
double x,y;
scanf("%lf",&x);
if(x>=0)
{
y=pow(x,0.5);
}
else
{
y=pow(x+1,2)+2*x+1/x;
}
printf("f(%.2f) = %.2f",x,y);
return 0;
}
(4)
(5)
问题1:程序运行停止
原因:没输地址符
解决办法:在变量前输入地址符
算数入门之加减乘除
(1)
对于输入的两个整数,按照要求输出其和差积商。
(2)
(3)
#include<stdio.h>
int main()
{
int A,B,a,b,c,d;
double e,f;
scanf("%d%d",&A,&B);
a=A+B;
b=A-B;
c=A*B;
printf("%d + %d = %d\n",A,B,a);
printf("%d - %d = %d\n",A,B,b);
printf("%d * %d = %d\n",A,B,c);
f=A%B;
if(f==0)
{
d=A/B;
printf("%d / %d = %d",A,B,d);
}
else
{
e=A*1.0/B;
printf("%d / %d = %.2f",A,B,e);
}
return 0;
}
(4)
(5)
问题1:if处报错
原因:等于应该由组成,写成了=
解决办法:把=改成
输出三角形面积和周长
(1)本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
(2)
(3)
#include<stdio.h>
#include<math.h>
int main()
{
int a,b,c;
double s,area,perimeter;
scanf("%d%d%d",&a,&b,&c);
if(a+b>c && b+c>a && c+a>b)
{
s=(a+b+c)/2.0;
area=sqrt(s*(s-a)*(s-b)*(s-c));
perimeter=a+b+c;
printf("area = %.2f; perimeter = %.2f",area,perimeter);
}
else
{
printf("These sides do not correspond to a valid triangle");
}
return 0;
}
(4)
(5)问题1:停止运行
原因:未加地址符
解决办法:scanf后面的变量前加地址符
出租车计价
(1)
本题要求根据某城市普通出租车收费标准编写程序进行车费计算。具体标准如下:
•起步里程为3公里,起步费10元;
•超起步里程后10公里内,每公里2元;
•超过10公里以上的部分加收50%的回空补贴费,即每公里3元;
•营运过程中,因路阻及乘客要求临时停车的,按每5分钟2元计收(不足5分钟则不收费)。
(2)
(3)
#include<stdio.h>
int main()
{
int t;
double km,yuan;
scanf("%lf%d",&km,&t);
if(km<=3)
{
yuan=10+t/5*2;
printf("%.0f",yuan);
}
else if(km>3&&km<=10)
{
yuan=10+(km-3)*2+t/5*2;
printf("%.0f",yuan);
}
else
{
yuan=10+7*2+(km-10)*3+t/5*2;
printf("%.0f",yuan);
}
return 0;
}
(4)
(5)
问题1:提交结果总是答案错误
原因:把yuan变量给强制int化,导致后面小数被略掉
解决办法:去掉int强制化,输出格式字符串改成%.0f,让其四舍五入