C博客作业01--分支、顺序结构
0.展示PTA总分(0----2)#
顺序结构.
选择结构.
1.本章学习总结(2分)#
1.1 学习内容总结##
-
输入和输出函数——scanf()和printf()。
- scanf()和printf()对于整数型int,都要用到%d;scanf()对于浮点型float和double分别用%f和%lf,而printf()都用%f;对于字符型char,二者都要用%c;特别的要注意scanf()括号里面对应的变量前面要加&。
-
标识符,运算符,以及逻辑运算符。(在范华学长的帮助下,额外知道了一个三目运算符 ? :)
- 标识符是由字母、数字和下划线组成,其中第一个字符必须是字母或下划线;运算符表示对各种数据类型数据对象的运算,如+,-,*,/,%,>,<,>=,<=,==,=等;逻辑运算符单目的是!,双目的是&&和||;三目运算符语法:表达式1 ? 表达式2 : 表达式3;语义:先执行表达式1,执行完毕,表达式1的结果如果为真,那么执行表达式2,并且这个整体的运算式的结果是表达式2的结果,否则执行表达式3,运算式的结果是表达式3的结果。
-
常用的数学函数和如何调用随机数。
- 用数学函数时,需要调用#include<math.h>,常见的数学函数有平方根函数sqrt(x)、绝对值函数fabs(x)、幂函数pow(x,n)、指数函数exp(x)、以e为底的对数函数log(x)等;如果想调用电脑随机产生的随机数,而且每次调用还不一样,那就需要有#include<stdio.h>、#include<stdlib.h>、#include<time.h>,然后用srand(time(NULL))、rand()。
-
多分支结构if-else语句的嵌套和switch语句。
-
if-else是最常见的实现多分支的办法,形式为
if(表达式1)
语句1;
else if(表达式2)
...
else
语句n; -
switch语句一般形式为
switch(表达式)
case 常量表达式1:语句段1;break;
...
case 常量表达式n:语句段n;break;
default: 语句段n +1;break;
这种语句需要注意的是break的使用,如果case后面没有break,语句将继续往后进行,直到遇到break才停止switch语句,灵活的使用break可以实现更多的功能。
-
-
循环结构for循环、do-while循环、while循环。
-
for语句的一般形式为:
for(表达式1;表达式2;表达式3)
循环体语句
其中表达式1是初值表达式,对循环变量赋初值;表达式2是条件表达式,给出循环的条件;表达式3是步长表达式,改变循环变量的值,帮助走出循环。注意for语句后面不能随意加分号。 -
do-while语句一般形式为:
do {
循环体语句
}while(表达式)
while语句一般形式为:
while(表达式)
循环体语句;
二者的区别在于do-while无论条件是否成立,都会事先做一次循环。 -
三种循环体语句,都可以解决循环问题,在一定情况下可以互换,for语句一般用在循环次数已知或者有明显规律的题型中,另外两种则适用于循环次数未知。
-
-
课堂积累小知识点。
- 灵活运用int flag=0;可以解决一些问题;想要输出小数点后几位的是=时候可以用%.nf,n代表几位小数;还可以加宽度限定词,用%md,m表示宽度;n++或n--相当于n=n+1或n=n-1,类似的还有n*=m等;对于求阶乘时,当求大于12的阶乘时,就无法用整数正确表示了,要把变量改成浮点型的变量;求阶乘可以调用函数fact(n)计算n!,函数类型是double,用到了自定义函数,课本P40;常用的ASCII码对应的十进制数,比如‘b’:98、‘a’:97、‘A’:65、‘0’:48等。
1.2 本章学习体会##
-
通过这两周的学习,我从刚开始只会敲Hello world到会做pta上老师布置的题目,我感觉真的好开心,但我仅仅的这一点进步还远远不够,比起别人本来就有C语言基础的还差的远,但我不怕,我相信只要我刻苦努力学习,我一定会超越他们的,我会坚持坚持再坚持;通过这两周的学习,我发现C语言要学好,需要把书本琢磨透,上课认真听老师讲,不能放过每一个小知识点,再经过大量的做题巩固知识点,还要多看看别人优秀的代码,多学习学习他们的优点,补足自己的缺点;通过这两周的学习,我感觉林老师真的很好,上课很负责任,讲的很清楚,真的很喜欢林老师。
-
粗略算了一下这两周的代码量,大概有1350左右。
2.PTA实验作业(6分)#
2.1 7-9 龟兔赛跑 (20 分)##
2.1.1 数据处理###
-
数据表达:tortoiseS, rabbitS分别表示乌龟和兔子跑的路程,rabbitScopy, i分别表示第一个90分钟兔子跑的路程和总时间的i倍,T表示跑的总时间,t表示总时间去掉i个90后剩下的时间,所有变量都是int整数型。
-
数据处理:tortoiseS = 3 * T,rabbitS = 9*T,rabbitS = 9 * 10;rabbitS = (T - 40) * 9 + 9 * 10;rabbitS = 9 * 10 * 2;rabbitS = (T - 80) * 9 + 9 * 10 * 2;rabbitS = 9 * t + rabbitScopy * i;rabbitS = 9 * 10 + rabbitScopy * i;rabbitS = (t - 40) * 9 + 9 * 10 + rabbitScopy * i;rabbitS = 9 * 10 * 2 + rabbitScopy * i;rabbitS = (T - 80) * 9 + 9 * 10 * 2 + rabbitScopy * i;流程结构是当T是在第一个90分钟内的时候,算出兔子所走的路程,然后根据t和i算出第二个第三个第n个90分钟内兔子走的距离,因为乌龟一直在跑,所以最后比较他们两的距离即可。
2.1.2 代码截图###
2.1.3 本题可扩展功能(重点加分项,扩展越多,则加分越多)###
- 可以用for循环来记录兔子的路程。
2.1.4 PTA提交列表及说明###
- 调试没有问题,只是数据处理时出现了问题,在第21行和第36行处,多加了一个90.。
2.2 7-12 任务06-02-01 于龙遇见日期,又哭了! (10 分)##
2.2.1 数据处理###
-
数据表达:X,Y,Z表示输入的三个数据,x,y,z,X1,Y1,Z1存储对应的三个数据,都为整数型,op表示字符型,t表示最小的那个数,为整数型,digitY, digitM, digitD表示年月日的位数,为整数型,flag代表为1时输出日期,为0时输出错误格式,为整数型。
-
数据处理:先把输入的三个数据存储在x,y,z,再把X,Y,Z 排一下序,确定年份,再把一些不合法的情况找出来,然后把重新排序过的X,Y,Z存储在X1,Y1,Z1中,X1代表年份,Y1代表日,Z1代表月,求出年月日的位数,最后在flag==1的情况下输出不同年月日位数对应的日期。
2.2.2 代码截图###
2.2.3 本题可扩展功能(重点加分项,扩展越多,则加分越多)###
- 这道题我花费了好吃时间才做出来,而且代码量实在是太多,变量也很多,可读性不是很好,但我又实在是想不到还能怎么写,所以我请教了范华助教,下面是他的代码并带有注释(其中第68行有个三目运算符 ? :,我在上面1.1学习内容中有提到),范华学长代码可读性很好,并且代码量还比较少。
2.2.4 PTA提交列表及说明###
- 调试正常运行,就是输出结果不对,没有补0,之后请教了一下他人,改了一下输出,然后就对了。
2.3 7-7 猜数字游戏 (15 分)##
2.3.1 数据处理###
-
数据表达:myNumber和yourNumber分别表示游戏机产生的随机数和你输入的数字,N表示猜的最多次数,flag的值是判断是否游戏结束的,count是你猜的次数,所有变量都是整数型。
-
数据处理:先输入一个游戏机产生的随机数和猜的最多次数,然后根据你猜的次数和最多猜的次数进行比较建立一个while循环,在循环里面输入你的数字,并且根据不同情况进行判断,最后根据flag的值输出结果。
2.3.2 代码截图###
2.3.3 本题可扩展功能(重点加分项,扩展越多,则加分越多)###
- 可以扩展成真的是由电脑随机给出的一个随机数,而不是自己输入的“随机数”。如果想要这个随机数不变,需要再添加一个#include<stdlib.h>头文件,和调用随机数的一个函数rand(),如果要随机数每次都改变,则需要再添加一个#include<time.h>头文件,调用srand(time(NULL)),然后就可以猜数了。
2.3.4 PTA提交列表及说明##
- Q1:不知道为什么会错误,没找到毛病。
- A1:知道了输入错误,是让自己输入一个随机数。
- Q2:部分正确,不知道哪里错了。
- A2:自己找了找,发现了第37行忘记了一个条件,就是我猜的数字大于0的条件。
- Q3:仍是部分正确,然后又进行了调试,发现了问题。
- A3:第40行处多输出了一个游戏结束,换成break就可以了。
3.阅读代码(-2--2分)#
-
这段代码是我能找到的相对来说最简单的一段代码了,但我还是没怎么看懂,主要题干的输入例子没怎么看明白什么意思,然后代码也不知道要干什么的了,其中不知道T是什么,也不知道为什么有个return 1。
-
虽然没怎么看懂,但是我还是能够说出其中的优点的,他巧妙的运用了一个自定义函数,用自定义函数求一共有几种方法,然后再返回主函数main(),还运用了一个T递减的while循环,使得代码看起来简单明了,自定义函数中又运用了if语句,增强了代码的可读性(虽然我读的不是很懂,但这是因为我的水平还没达到)。这段代码很值得我们学习运用其中的自定义函数和熟练运用循环语句。