- 要求二
题目7-1 高速公路超速处罚
1.实验代码
1 #include<stdio.h> 2 int main() 3 { 4 int car,x; 5 float percent; 6 char ch='%'; 7 scanf("%d %d",&car,&x); 8 if(car<0||x<=0)printf("the input is error"); 9 else if(car<x*1.1f)printf("OK"); 10 else if(car<x*1.5f){ 11 percent=(car-x)*100.0f/x; 12 printf("Exceed %.0f%c. Ticket 200",percent,ch);} 13 else{ 14 percent=(car-x)*100.0f/x; 15 printf("Exceed %.0f%c. License Revoked",percent,ch);} 16 return 0; 17 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量car(车速)、x(限速),浮点数变量percent(超速百分比)和字符型定量ch(‘%’);
- 第二步:用scanf函数读入整数给car和x;
- 第三步:用if elseif else函数结构先判断输入是否符合范围,再判断超速与否;
- 第四步:其中若超速则判断范围并计算所对应的超速百分比并用printf函数输出百分比(后跟‘%’字符定量)和相应的超速结果语句。
注解:本题细节问题要注意整数与浮点数的转换和超速范围的开闭区间。
(2)流程图
3.本题调试过程碰到问题及解决办法
printf函数中的%显示不出来导致PTA部分错误。
解决办法就是定义一个字符型定量ch=‘%’代替printf函数中原本的%符号。
4.本题PTA提交列表
部分错误即为上述遇到的问题。
题目7-2 计算油费
1.实验代码
1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 char c; 6 double money=0; 7 scanf("%d %d %c",&a,&b,&c); 8 switch(b) 9 { case 90:money=6.95*a;break; 10 case 93:money=7.44*a;break; 11 case 97:money=7.93*a;break; 12 default:printf("error ");break; 13 } 14 if(c=='m') 15 money=money*0.95; 16 else 17 money=money*0.97; 18 printf("%.2lf",money); 19 return 0; 20 }
2.设计思路
(1)主思路
- 第一步 :定义整数型变量a(加油量)、b(汽油品种),字符型变量c(服务类型)和浮点数变量money(应付款额);
- 第二步:用scanf函数读入整数给a和b,读入字符给c;
- 第三步:用switch语句以b的不同情况运行获得相应种类汽油和油量的费用;
- 第四步:用if-else语句对c进行类型的判断并计算出对应折扣后的费用;
- 第五步:用printf函数输出最终结果money。
注解:本题细节问题要注意整数与浮点数的转换和结果应保留两位小数。
(2)流程图
3.本题调试过程碰到问题及解决办法
用if函数判断字符变量时没有用单引号括中,导致编程错误。
解决办法就是用单引号括中m,即。
4.本题PTA提交列表
第一个部分正确是由于浮点型变量用的float定义导致错误;
第二个部分正确是修改时程序时粗心顺手删掉了if函数中的符号导致错误。
题目7-3 比较大小
1.实验代码
1 #include<stdio.h> 2 int main() 3 { 4 int a,b,c,x; 5 scanf("%d %d %d",&a,&b,&c); 6 if(a<b){ 7 x=a; 8 a=b; 9 b=x;} 10 if(a<c){ 11 x=a; 12 a=c; 13 c=x;} 14 if(b<c){ 15 x=b; 16 b=c; 17 c=x;} 18 printf("%d->%d->%d",c,b,a); 19 return 0; 20 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量a,b,c(三个比较大小的数字)和x(赋值过程中间变量);
- 第二步:用scanf函数读入整数给a,b,c;
- 第三步:用三个if函数分别判断每两个数字的大小,再根据需要中途以x为中间变量进行赋值交换数字,最终使a,b,c大小呈依次递增;
- 第四步:用printf函数按照题目要求格式输出即可。
注解:重点在于三个数字分别比较大小并按预定结果进行赋值交换,以及最终结果其间以“->”相连。
(2)流程图
3.本题调试过程碰到问题及解决办法
本题为课堂练习固没有错误,但是在具体编程进行数字交换时比较容易弄混。
4.本题PTA提交列表
题目7-4 两个数的简单计算器
1.实验代码
1 #include<stdio.h> 2 int main() 3 { 4 int a,b; 5 char ch; 6 scanf("%d %c %d",&a,&ch,&b); 7 switch(ch){ 8 case '+':printf("%d",a+b);break; 9 case '-':printf("%d",a-b);break; 10 case '*':printf("%d",a*b);break; 11 case '/':printf("%d",a/b);break; 12 case '%':printf("%d",a%b);break; 13 default:printf("ERROR");} 14 return 0; 15 }
2.设计思路
(1)主思路
- 第一步:定义整数型变量a,b(题目所要求的两个整数)和字符型变量ch(用于switch循环);
- 第二步:用scanf函数读入整数给a,b和读入字符给ch;
- 第三步:用switch语句以ch的不同情况进行对应的代数运算并用printf函数输出结果,其中存在其他字符另输出“ERROR”。
注解:本题主要注意switch语句的格式规范以及输入输出的格式。
(2)流程图
3.本题调试过程碰到问题及解决办法
scanf函数读入格式用“,”间隔导致PTA错误。
将格式按题目要求改为空格间隔即可。
4.本题PTA提交列表
答案错误为scanf函数中忘记打入&符号导致错误;
部分正确为上述错误(即scanf函数读入用“,”间隔)。
- 要求三
上传成功后coding.net项目的截图
Git地址:https://git.coding.net/cyq1076926262/NO.4.git
- 要求四
个人总结
(1)本周所学内容或收获:
①巩固了switch循环语句的用法;
②学习了while循环语句及do while结构;
③自学了for语句的用法;
④自学了pow函数的用法(用于C题库第8题,以下百度搜索注意事项);
⑤修正了switch语句的流程图画法,如助教指出老师的错误之处,有时候老师的课件并不一定完美,我们更应该培养自身辨别能力。
(2)本周做学难点与不明白的知识点
我认为的难点:
①循环语句的运用;
②面对较复杂题目编程时如何精简逻辑。
不明白知识点:
没有未明白的知识点,只是新学习的循环语句还未熟练使用。
(3)对目前老师的上课形式有什么意见或建议:
希望将来专业课程的学习能更加注重编程问题。相比于花费更多时间做博客,我更愿意平衡一下时间去做C题库,因为通过本周C题库的做题,我更愿意也更有动力为了解题去学习新的语法、函数等等。当然关于博客的流程图我觉得还是挺有意义的,很有助于整理思路,无论是题前题后。
<11.12补>通过今天QQ群里老师、助教、其他同学的对话,我也有所感想。
①首先是我不认为有那么多绝对的事,比如什么每道题必须有错误,所以我认为助教这一角色的定位也是灵活的,在我看来只要他能对我起到正面作用,我就支持,反之,我会提出,有要求就必完成式的做作业可能是我的习惯吧,所以对于非常非常严格的博客我并不抵触,而通过其他观念看待问题的同学当然会产生不同的反应;
②关于老师、助教、同学的关系,一千个读者眼中有一千个哈姆雷特,我们每个人都各自有界定,我认为有一点不变的是他们的目的是教育学生而不是坑害学生,就严谨的思想来说,既然我想认真学习专业,为什么不多注意些呢;
③对于当前的每周作业来说,我也有一些我的意见,我认为更自由化的博客要求更能检验和提高我们的专业能力,总有人在努力,总有人更努力。
- 要求五
1.点评作业
①何宗彦(http://www.cnblogs.com/hezongyan/)(1、14楼)
②胡俊鲜(http://www.cnblogs.com/123456hjx/)(3楼)
③陈盈驰(http://www.cnblogs.com/1999-cyc/)(1楼)
2.学习进度条(11/5 8:00~11/8 8:00)