作业要求:【https://edu.cnblogs.com/campus/hljkj/CS201801/homework/2293】
第三次作业 题目7-1 计算火车运行时间
第二步:输入整数变量a,b的值,a的值表示火车出发时间,b的值表示火车到达时间。
第三步:计算出整数变量c的值。c的值为b/100-a/100的值。即火车到达时间除以100取留下的整数部分就是火车到达时的小时数,再减去火车出发时间除以100取留下的整数部分即火车出发时的小时数,就等于旅途时所用的小时数。
第四步:计算出整数变量d的值。c的值为b%100-a%100的值。即火车到达时间除以100取余就是火车到达时的分钟数,再减去火车出发时间除以100取余即火车出发时的分钟数,就等于旅途时所用的分钟数。
第三次作业 题目7-1 计算火车运行时间
1 #include<stdio.h> 2 int main(void) 3 { 4 int a,b,c,d; 5 scanf("%d %d",&a,&b); 6 c=b/100-a/100; 7 d=b%100-a%100; 8 if(d<0) { 9 d=60+d; 10 c=c-1; 11 } 12 printf("%02d:%02d",c,d); 13 return 0; 14 }
解题思路
第一步:先定义四个整数变量a,b,c,d;第二步:输入整数变量a,b的值,a的值表示火车出发时间,b的值表示火车到达时间。
第三步:计算出整数变量c的值。c的值为b/100-a/100的值。即火车到达时间除以100取留下的整数部分就是火车到达时的小时数,再减去火车出发时间除以100取留下的整数部分即火车出发时的小时数,就等于旅途时所用的小时数。
第四步:计算出整数变量d的值。c的值为b%100-a%100的值。即火车到达时间除以100取余就是火车到达时的分钟数,再减去火车出发时间除以100取余即火车出发时的分钟数,就等于旅途时所用的分钟数。
第五步:因为是减法,会考虑到分钟可能为负数的情况,所以要向小时借位。所以进行一步判断,判断计算出旅途所用的分钟数d是否小于0,如果小于零执行第六步,否则直接跳转第七步。
第六步:因为分钟数已经小于零了,所以需要在小时上减去1,在分钟上加上60,即d=60+d ,c=c-1。这样就避免了分钟会出现负数的情况。
第七步:输出最后算出的值。02d代表了输出2位整数,如果不足就用0补齐,这样就符合了题目的条件。
流程图
程序运行时的结果
本题调试过程碰到问题及解决办法
在换个数据时,即到达分钟数比出发分钟数小的时候,结果就与题目不符,出现了负号。
调试过后问题解决了,但是输出的问题还存在着如果分钟或者小时小于2位,那么前面的0如何输出,最后思考并多次试验无果后,在网上寻找了解决方法,并将这种方法记了下来。02d就是输出2位整数,如果不够的话计算机会在前面补0,这种方法还是非常适用于这种时间题目的。
然后思考后在加上在慕课网上的学习,我了解到没有考虑分钟借位的问题,我尝试着修改程序,最后添加了if 语句后调试解决了这个问题,即当分钟数相减后小于0时,将分钟数加上60,并将小时数减去1即可,这样就不会出现分钟为负数的情况
个人总结
本周我学习主要是在慕课网上的学习,知道了#deline指定的一个数没有办法进行更换,还有if语句的使用,以及简单,多重,嵌套的if else 语句的使用,我们做题简便性取决于你使用的是哪类语句,有些语句虽然处理方法相同,但是却不一定适合某些题目。
遇到的问题
当我使用if语句的时候,经常会在if语句的后方加上分号,这是初学者所容易犯得错误,在使用else时,经常会搞混与这个else结合的if时那个,并且在使用else if 时,括号内的范围总是摸索不清,但经过多次联系,这些问题已经基本解决。
第四次作业 题目7-2 高速公路超速处罚
解题思路
#include<stdio.h> int main(void) { double a,b,c,d; scanf("%lf %lf",&a,&b); c=a-b; d=((a/b)-1)*100; if(c<b*0.1){ printf("OK");} else if(c>=b*0.5){ printf("Exceed %.0f%%. License Revoked",d); } else{ printf("Exceed %.0f%%. Ticket 200",d); } return 0; }
第一步:定义三个整型变量,a,b,c,d
第二步:输入整型变量a,b的值,a代表车速,b代表限速。
第三步:计算出车速超出限速的多少,即c的值。
第四步:计算出超速百分比,即超出的速度比上限制的速度在乘上100,就是超速的百分比数值。
第五步:进行判断,如果超出的速度低于本车道限速的10%,就将进行第六步,如果达到或超出本车道限速50%,就将进行第七步,否则,进行第八步,这里需要用到else if语句。
第六步:输出OK!。
第七步:输出Exceed %.0f%%. License Revoked,其中%.0f代表着输出的超速百分比为没有小数,而两个百分号是为了在输出时出现百分号。
第八步:输出Exceed %.0f%%. Ticket 200,其中的%.0f也代表着超速百分比。
流程图
当我刚开始编完程序后去调试时候没有任何问题,程序可以照常执行,但是结果却和题目对不上,无法输出那个百分号。
我尝试着在前方加入百分号,但结果仍然不对,但当我在后方加入百分号后,程序输出就出现了百分号,这是我理解到如果想要输出一个百分号,必须在程序中写入两个百分号,我因此又学到了一些东西。
程序正确执行
本周总结
本周我依旧在慕课网上学习,我学到了while和for循环结构,do while循环结构,switch case跳转,这些语句都很常用,特别是循环结构,有时候如果用上循环,会比你不用循环然后敲出几百行代码来的简单,而switch case 语句,是制定个变量,当你变量是某个整数值时,如果这时候case正好等于这个值,程序将会直接跳转到那条语句上,但是,case并不能阻挡程序的进行,如果想结束程序,必须用break弹出这个循环,并且switch制定的变量必须是整数。
遇到的问题和解决办法
在刚开始使用循环语句时,经常不懂到底是该用for循环结构还是while更或者是do while循环结构。当一种需要循环结构的题,我会试着用三种循环结构都适用一下,比较一下。比较后,我发现for语句是适合于已知次数的循环,do while语句适合于先执行循环的题,而剩下的情况用while比较好。在其他问题方面上我不会的也会去请教同学,如果同学也不懂的话,我回去网上搜索解决的方法,如果网上实在解决不了的情况下。我会向老师去请教问题。
统计图表