0.展示PTA总分
顺序结构
分支结构
1.本章学习总结
1.1学习内容总结
1.学会了在程序有错误时进行调试(设置断点并观察变量,单步跟踪)
2.明白了注释文本应该用//
或/*
和*/
3.知道了多种数据类型及各自的格式控制字符
int型使用%d
float型使用%f
double型使用%lf
char型使用%c
%.2f表示保留两位小数 %f保留六位小数
4.了解了6种关系运算符
<
小于 <=
小于等于 >
大于 >=
大于等于 ==
等于 !=
不等于 (注:=
表示赋值)
5.学会了使用if-else语句
6.明白了scanf语句中输入变量时应该在变量名前加&
7.知道了调用数学函数时加入#include<math.h>
,并且知道了一些常用的数学函数表示方法
8.了解了switch语句及其中break语句的三种使用方法,及与if-else语句的相同点和不同点
共同点:①都能实现多分支结构
不同点:
①if-else需要判断过个分支。而switch只进入满足条件分支,无需比较其他分支。switch语句效率更高。
②switch语句只能处理等值条件判断的情况,case后只能是常量。而if选择结构的限制,特别适合某个变量处于某个连续区间时的情况。
③switch语句判断的值必须是整型,if判断整型数和浮点数都可以。
9.知道了程序中用for语句实现循环,for语句中的fahr++
相当于fahr=fahr+1
,并且for语句中用两个分号来分隔三个表达式,但for的后面没有分号
10.了解了a
和'a'
的区别
a
是变量;
'a'
是字符常量
变量放数据,常量不能变
11.认识了字符类型数据有字符型常量'A'
,'a'
,'9'
,'*'
等和字符型变量op
之分
字符型变量在定义时用类型名char
,例如:char op
12.知道了字符型数据的输入输出可以调用函数scanf()
,printf()
,getchar()
,putchar()
ch=getchar()
只能读入一个字符,如果要输入多个字符,需要多次调用该函数,一般采用循环调用的方式
for(i = 0; i <= 10; i++)
ch = getcher(); ```
* ```putchar(输出参数)```可以输出一个字符,输出参数为字符型常量或者字符型变量
###13.记住了三种逻辑运算符,知道了逻辑运算符的运算对象可以是关系表达式或逻辑表达式,逻辑运算的结果是“真”或“假”,逻辑运算符&&和||的优先级低于关系运算符
```!```非 ```&&```与 ``` ||```或
![](https://img2018.cnblogs.com/blog/1774313/201909/1774313-20190928150708759-459872651.png)
###14.知道了在switch语句中,表达式和常量表达式的值一般是整型或字符型,所有的常量表达式的值都不能相等,在switch语句所有语句段的末尾使用break,可以简单清晰地实现多分支选择
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191001124235501-1257045485.png)
###15.明白了在嵌套的if-else语句中,如果内嵌的if省略了else部分,可能在语义上产生二义性,也明白了else和if的匹配标准是**else与最靠近它的,没有与别的else匹配过的if相匹配**
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191001124912942-2118885525.png)
* 注:输出结果:2
##1.2 本章学习体会
* 通过这两三周时间的学习,我真正了解到了C语言的内容。刚开始的时候,因为学习内容比较简单直白,再加上暑假有看慕课视频,所以暑假看不懂的都有了解释,那时的我欣喜若狂,十分激动,对于这门课程也**激发了极大的兴趣**,觉得十分有趣,然而,随着课程的继续,我不明白的地方越来越多,所以开始常常问学长学姐,问明白的同学,在他们的帮助下,我也算是取得了些许的进步。
* PTA上的题目集让我发现了许多不易引起我注意的问题,例如**空格问题**等等,这些问题我一定会**牢记于心,争取不再重复**这些细节问题。
* 在**switch语句**上我还是运用不太熟练,但我一定会弄明白它。在这一段时间里,我了解到了许多的新知识,比如**驼峰命名法**,再比如**变量类型的区别**等等,对于vs我也更熟悉了,还学会了自己**调试**,找错误,我也在这些错误中取得了进步。
* 我的代码量:(不包括重复写)
|周|代码量(行)|
|:---:|:--:|
|4|241|
|5|506|
|累计|747|
#2.PTA实验作业
##2.1 题目名1
输出三角形面积和周长 (15 分)
本题要求编写程序,根据输入的三角形的三条边a、b、c,计算并输出面积和周长。注意:在一个三角形中, 任意两边之和大于第三边。三角形面积计算公式:area=√s(s−a)(s−b)(s−c),其中s=(a+b+c)/2。
###2.1.1 数据处理
- 定义三角形三边长分别为a、b、c,面积为area,周长为perimeter ,公式中的s。边长定义为整型,其余因为有小数,定义为浮点型。
- 输入边长a,b,c。
- 运用if-else语句判断是否边长能够构成三角形,即判断是否符合三角形法则(三角形任意两边和大于第三边),并且要用逻辑运算符&&与。
- 如果符合if的条件,则进入if的表达式中,利用算术公式和数学函数算出s,area和perimeter,然后保留两位小数输出area和perimeter。
- 如果不符合if的条件,则进入else语句,即输出“These sides do not correspond to a valid triangle”。
###2.1.2 代码截图
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003090635993-1944305379.png)
###2.1.3 本题可扩展功能
* 判断是否是直角三角形
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003092934708-1442170865.png)
###2.1.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003093120907-189825292.png)
* 写了s和area的公式后,**忘记写perimeter的公式**,我通过**不断对比题目**而找出问题
* ```scanf```在vs上用```scanf_s```写,在复制到PTA上时忘记去掉```_s```,我**把程序完整看了一遍**后知道错误
* **数学函数运用不熟练**,**多看书**
##2.2 题目名2
判断一个三位数是否为水仙花数 (15 分)
本题要求编写程序,判断一个给定的三位数是否为水仙花数。三位水仙花数,即其个位、十位、百位数字的立方和等于该数本身。
###2.2.1 数据处理
- 定义百位数字hundred, 十位数字ten, 个位数字bit,以及被输入数字number。均为整型。
- 输入一个数number。
- 利用表达式算出相应的百位hundred,十位ten,个位bit,注意运用基本运算和取余%。
- 利用if-else语句判断number是否为三位数。
- 如果number不是三位数,则输出Invalid Value!。
- 如果是三位数,则进入else-if语句判断是否为水仙花数。
- 如果是水仙花数,则输出Yes,否则输出No。
###2.2.2 代码截图
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003101456428-423303386.png)
###2.2.3 本题可扩展功能
* 获得四位数(或者其他位数)的水仙花数
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003112441416-1773806565.png)
###2.2.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003112553012-866296641.png)
* **hundred==0**并不代表一定不是三位数,两位数和一位数的百位也是0,理解错误,我通过询问同学一起互相讨论,从而改正成number和1000与99进行大小对比,即```number>=1000||number<=99```
##2.3 题目名3
12-24小时制 (15 分)
编写一个程序,要求用户输入24小时制的时间,然后显示12小时制的时间。
###2.3.1 数据处理
- 定义小时hour,分钟minute。均为整型。
- 输入24小时制时间。
- 运用if-else语句判断hour是否大于等于12。
- 如果hour>=12,进入嵌套的if-else语句中,再判断hour是否等于12。
- 如果hour==12,因为中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:00 PM。
- 如果hour>12,则令hour-12后再赋值给hour,然后按照格式输出。
- 如果hour<12,则进入else语句,直接按照格式输出即可。
###2.3.2 代码截图
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003121929708-202227074.png)
###2.3.3 本题可扩展功能
* 输入12小时制的时间,然后显示24小时制的时间
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003124546965-178534147.png)
###2.3.4 PTA提交列表及说明
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191003124710794-1012654119.png)
* 开始时不知道小时和分钟之间的```:```应该怎么写,于是用了char()字符型变量,可是事实上它是常量,后来问了同学发现**直接写**就可以了
* 将hour分为两段,在其中一段中需要**运用嵌套语句**
* 要学会多思考,在脑海中不断重复过程,刚开始思路不清晰,被同学点拨后一下子就清楚了
#3.阅读代码
## ACM 题库题解: poj 3750 小孩报数问题
题目截图:
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191006144303286-1375295938.png)
代码截图:
![](https://img2018.cnblogs.com/blog/1774313/201910/1774313-20191006144319286-165179693.png)
代码分析:
* 代码功能:输入n,w,s,以及n个小孩的名字(人名不超过15个字符),令n个小孩按顺序从第w个开始报数,报到规定的第s个后出列,游戏直至小孩全部出列为止
* 代码优点:定义变量名称准确,容易让人明白意思;运用for语句,while语句,if语句,其中相互嵌套,逻辑顺序严谨;语句末尾使用break语句,节省了运算时间;作者考虑到了人数不到s时的情况并且写出相关解决办法,十分全面
缺月挂疏桐,漏断人初静。时见幽人独往来,缥缈孤鸿影。
惊起却回头,有恨无人省。拣尽寒枝不肯栖,寂寞沙洲冷。