问题 | 回答 |
---|---|
这个作业属于那个课程 | C语言程序设计II |
这个作业要求在哪里 | C语言I博客作业07 |
我在这个课程的目标是 | 完全独立的编译一个小游戏程序并正常运行。 |
这个作业在那个具体方面帮助我实现目标 | 掌握多个确定条件的情况,掌握多分支结构switch语句的使用 |
参考文献 | 《C语言程序设计》《C Primer Plus》 |
1.PTA实验作业
1.1计算天数
本题要求编写程序计算某年某月某日是该年中的第几天.
1.1.1数据处理
数据表达:变量i,year,month,day,sum,用int定义而来,类型为整型。
数据处理:条件表达式,关系表达式,逻辑表达式和switch语句分支结构。
定义要输入的变量年月日,循环次数i,与天数的和;
调用scanf函数输出年月日;
switch语句(月份的选择)
{
case 1:输入为1月份时的天数和;break;
case 2:输入为2月份时的天数和;break;
case 3:输入为3月份时的天数和;break;
case 4:输入为4月份时的天数和;break;
case 5:输入为5月份时的天数和;break;
case 6:输入为6月份时的天数和;break;
case 7:输入为7月份时的天数和;break;
case 8:输入为8月份时的天数和;break;
case 9:输入为9月份时的天数和;break;
case 10:输入为10月份时的天数和;break;
case 11:输入为11月份时的天数和;break;
case 12:输入为12月份时的天数和;break;
default:printf函数输出错误;break;
}
总天数=月份天数和+输入日期的天数;
if(判断是否为闰年)
{
if(判断输入月份是否大于二)
{
满足以上条件,总天数和+1;
}
}
ptintf输出总天数和;
返回零;
}
1.1.2实验代码截图
1.1.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
2001/10/10 | 283 | 非闰年 |
2012/01/24 | 24 | 闰年 |
2019/11/07 | 311 | 非闰年 |
1.1.4 PTA提交列表及说明
1.编译错误:case与数字之间应该空格,之前没空显示编译错误。
1.2 统计学生成绩
本题要求编写程序读入N个学生的百分制成绩,统计五分制成绩的分布。百分制成绩到五分制成绩的转换规则:
大于等于90分为A;
小于90且大于等于80为B;
小于80且大于等于70为C;
小于70且大于等于60为D;
小于60为E。
1.2.1 数据处理
数据表达:用int定义变量i,N,grade,shu,ABCDE,类型为整型。
数据处理:条件表达式,赋值表达式,和switch语句分支结构。
定义循环次数,个数,除数,五个等级变量并赋值为零;
调用scanf函数,输入个数n;
for(循环的初始,条件,变化)
{
scanf输入变量成绩;
求出出数;
switch(除数)对应不同case
{
case 10:
case 9:A等级个数自增;break;
case 8:B等级个数自增;break;
case 7:C等级个数自增;break;
case 6:D等级个数自增;break;
case 5:
case 4:
case 3:
case 2:
case 1:
case 0:E等级个数自增;break;
}
}
ptintf输出五个等级个数;
返回零;
}
1.2.2 实验代码截图
1.2.3 造测试数据
输入 | 输出 | 说明 |
---|---|---|
5 45 84 37 97 35 |
1 1 0 0 3 | 成绩相差大 |
5 55 66 77 88 99 |
1 1 1 1 1 | 成绩分布平均 |
5 56 67 78 68 88 |
0 1 1 2 1 | 成绩相差小 |
1.2.4 PTA提交列表及说明
1.编译错误:switch语句后面需要用{}括起来
2.编译错误:case与后接数字之间应空格
3.编译错误:将应该分开写的case 1;case 2;.....写成case 1.2.3....;
4.答案错误:在int定义的ABCDE时忘记赋值为零,系统直接默认定义为一,所以答案错误,将ABCD赋值为零。
5.答案错误:在输出中各数之间应空格,所以%d之间应有空格。
2.代码互评
同学代码截图
自己代码截图
1.两位同学的思路都是将二月分成两种情况,一种是闰年的一种不是闰年的,然后分开书写,但我觉得这样代码比较繁琐,而且观看起来比较吃力的感觉,认为自己的代码可能更简便一些。
2.同学都是在case语句后面调用printf函数输出来表达天数,而我直接定义一个天数和的变量。
3.同学的代码虽乍一看比较麻烦,但是多看一会也能看懂,我的可能需要看久点来慢慢分析各代码的含义。不易让人读懂。
3.学习总结
3.1 学习进度条
周/日期 | 这周所花的时间 | 代码行 | 学到的知识点简介 | 目前比较迷惑的问题 |
---|---|---|---|---|
第三周10.9-10.12 | 两天 | 188 | 对代码数据的处理了解,比如类型结构等 | 什么时候用int,double声明变量,逻辑运算符的运用等 |
第四周10.16-10.18 | 一天半 | 190 | 如何用double型数据使用lf%,怎样在程序中用for语句实现循环,可指定循环次数 | 循环体中的关系表达式的正确运用 |
第五周10.23-10.26 | 两天 | 226 | 运算符的优先级顺序,自定义函数的编写,对数据参数的了解 | 具体如何在题目中定义函数,参数又应放在哪里才是正确位置 |
第六周10.30-11.2 | 三天 | 348 | 分支结构应用,逻辑运算符的使用 | 在使用if-else语句时{}的位置与格式,语句一多就搞不清楚了 |
第七周11.5-11.8 | 两天半 | 300 | switch语句作为分支结构应用 | 伪代码到底该如何编写,写的详细和正规代码没什么两样,写的粗略思路又不够清晰 |
3.2 累积代码行和博客字数
3.3 学习内容总结和感悟
3.3.1 学习内容总结
1.switch语句用于分支选择。
2.switch语句的执行过程:先计算关键字switch后的表达式的值,然后在各个case语句里查找哪个值和这个表达式的值相等,如果相等,程序执行相应的分支语句后继续往下执行,直到碰上break语句或switch语句的结束。
3.case语句后面跟的必须是常量或常量表达式,并且之间要空格。
4.在case后面的各常量表达式的值不能相同,否则会出现错误。
5.在case后面,允许有多个语句,可以不用{}括起来。
6.各case语句和default的顺序可以变动,default语句可以省略不用。
3.3.2 学习体会
- 本次课程新加了伪代码的书写,便于理清思路,能够快速准确的写出代码。
- 对编代码渐渐得心应手了。
- 在编程过程中遇到困难是难免的,自己会主动查找相关资料,甚至是拓展开的相关知识点进行学习。