C语言博客作业01分支、顺序结构

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 数据处理
  1. 定义三角形三边长分别为a、b、c,面积为area,周长为perimeter ,公式中的s。边长定义为整型,其余因为有小数,定义为浮点型。
  2. 输入边长a,b,c。
  3. 运用if-else语句判断是否边长能够构成三角形,即判断是否符合三角形法则(三角形任意两边和大于第三边),并且要用逻辑运算符&&与。
  4. 如果符合if的条件,则进入if的表达式中,利用算术公式和数学函数算出s,area和perimeter,然后保留两位小数输出area和perimeter。
  5. 如果不符合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 数据处理
  1. 定义百位数字hundred, 十位数字ten, 个位数字bit,以及被输入数字number。均为整型。
  2. 输入一个数number。
  3. 利用表达式算出相应的百位hundred,十位ten,个位bit,注意运用基本运算和取余%。
  4. 利用if-else语句判断number是否为三位数。
  5. 如果number不是三位数,则输出Invalid Value!。
  6. 如果是三位数,则进入else-if语句判断是否为水仙花数。
  7. 如果是水仙花数,则输出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 数据处理
  1. 定义小时hour,分钟minute。均为整型。
  2. 输入24小时制时间。
  3. 运用if-else语句判断hour是否大于等于12。
  4. 如果hour>=12,进入嵌套的if-else语句中,再判断hour是否等于12。
  5. 如果hour==12,因为中午12点被认为是下午,所以24小时制的12:00就是12小时制的12:00 PM。
  6. 如果hour>12,则令hour-12后再赋值给hour,然后按照格式输出。
  7. 如果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时的情况并且写出相关解决办法,十分全面
缺月挂疏桐,漏断人初静。时见幽人独往来,缥缈孤鸿影。 惊起却回头,有恨无人省。拣尽寒枝不肯栖,寂寞沙洲冷。
原文地址:https://www.cnblogs.com/xyx129221/p/11590373.html