c语言程序设计第三次作业

(一)改错题
计算f(x)的值:输入实数x,计算并输出下列分段函数f(x)的值,输出时保留1位小数。
错误信息 1:

错误原因:第九行的语句后边缺乏分号。
改正方法:在y = 1 / x后加分号,语句后边加分号。
错误信息 2:

错误原因:else后边加了语句。
改正方法:去掉else后边的语句。else后不能加语句,else if后边可以加。
错误信息 3:

错误原因:if后边加了分号
改正方法:去掉if后边的分号,这个if后边永远不要加分号。
错误信息 4:

错误原因:\n后边缺乏逗号,变量之间缺乏逗号。
改正方法:加上逗号,前边与后边变量之间必须加逗号。
错误信息 5:

错误原因:没有在变量前加取地址符。
改正方法:在x前加&,在输入语句中变量前必须加取地址符。
错误信息 6:

错误原因:题目中说的是实数,输入语句的格式错误。
改正方法:将"=%f"改为"=%lf"
错误信息 7:

错误原因:输出结果出现0输出格式有问题。
改正方法:将“%.lf”改成“%.1f”,其中1表示位数。
错误信息 8:

错误原因:输出结果仍然错误
改正方法:将输出语句中的\n去掉。
错误信息 9:

错误原因:运行时格式不对,括号内位数不对。
改正方法:将("f(%.2f) = %.1f",x,y)改为("f(%.1f) = %.1f",x,y);
错误信息 10:

错误原因:输出234结果不变。运算过程出错
改正方法:将if(x = 10)改为if(x == 10)一个为赋值一个为判断,不一样。

(二)学习总结
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)实验分析
问题1:求余经常出问题
原因:运用不熟练
解决办法:请教室友,反复练习
计算火车运行时间
(1)题目
本题要求根据火车的出发时间和达到时间,编写程序计算整个旅途所用的时间。
(2)流程图
(3)源代码
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)实验分析
问题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;

}
(四)PTA提交列表

posted @ 2017-10-29 21:54  付佳伟。  阅读(648)  评论(0编辑  收藏  举报