C语⾔--分⽀、顺序结构的⼩总结。
| 这个作业属于哪个班级 |
⽬录
| ---- | ---- | ---- |
| 这个作业的地址 |
⽬录
| 这个作业的⽬标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分⽀结构内容 |
⽬录
0.⽬前我PTA两次作业的完成情况:
0.1顺序结构:
0.2分⽀结构:
1.本章学习内容的总结
1.1学习内容的总结:(这⾥不赘述在第⼀次作业中就完成的任务,将选择⼀些我认为的重点很难点来简述)
1. 再次强调⼀遍科学命名的重要性,规范化使⽤就是变量名使⽤驼峰法,函数名使⽤帕斯卡命名法(⾸字母也要⼤写)。(⽼师的提醒,那就是学习C语⾔不是学习英语,所以命名的⽤词简洁明
了就好。)
2. 学习了内存⽅⾯的知识,知道了:
1. float和int占据4个存储单元。
2. double占据8个存储单元。
3. char占据1个存储单元。
4. ⽼师提到了⼀个点就是定义符号常量,这⾥我们抛出define但是先不拓展。
3. 学习了对⼀个程序的设计应该要从两个⾓度⼊⼿:(1.数据表达 2.流程控制)去仔细拆解⼀道题⽬。
4. 强化⼀下该记的数学函数: 1.sprt() 求⽅根。 2. fabs() 针对全数据类型的求绝对值。 3.pow() 幂函数。 4.exp() 指数函数。
5. log() 求以e为底数的对数函数。
5. ⽆论是整型还是浮点数都可以设置字符长度,都是在⼩数点前。 eg. %
6.d %6.f
6. 设置从随机数中引出来的学习:
1.两个新的头⽂件。#include<stdlib.h> #include<time.h>
2.获取随机数的程序如下:
srand(time(0)); //随机产⽣⼀个随机数。
=rand()%100 + 1;  //输出这个平均数, %可以⽤来设置范围,此处为不超过⼀百的整数。
7. 三种分⽀结构的性质:
1.单分⽀结构:适⽤于简单的分⽀情况。
2. 嵌套的if-else:适⽤于多对象的分⽀,程序程序运⾏的过程中需要⼀种⼀种情况进⾏判断,效率在某种情况上,会⽐较低.
3. 级联的if-else: 适⽤于单层多情况的分⽀,程序运⾏的过程中不需要⼀种情况⼀种情况判断,效率会⽐较⾼,但是不利于处理分⽀情况很多种层次的情况.
⼩总结:提⾼效率的要点,是要在逻辑上就避免去执⾏不需要执⾏的语句.
8. 字符型数据的学习:(由于前⾯没有整理所以这⾥将会详细整理⼀下)
1.字符常量:
1. 要⽤单引号来表⽰,如果没有加单引号的话就会变成常规的运算符。(此处针对运算符)
2. 但凡被加上单引号的内容,⽆论默认是什么,都会被视为是字符。
3.⼀些特殊字符的表⽰可以⽤转义符“ \ ”来实现。
2.字符变量
1.字符变量的定义与赋值:
char character;  //定义变量
character = 'a';  //字符的赋值
2.字符型数据再计算机的存储:
* 字符型数据需要转⼆进制,统⼀编码。
* ASCII码表。
* 字符型数据在计算机的内部都是⽤⼆进制编码来表⽰的。
* 声⾳,和图⽚都是⼆进制表⽰。
3.关于ASCII码表和字符的关系:
ASCII码表的定义原理。
()
ASCII码表是连续编译的,其中切记,数字 1 和字符 '1',这两者是不⼀样的,在ASCII码表的位置也不⼀样!!(其他数字同理。)
4.字符可以通过ASCII码表和整型相通:
(所以字符本⾝是可以⽐较⼤⼩的,其实⽐的就是ASCII码表对应的同⼀进制的数字⼤⼩)
测试结果显⽰:字符型的变量,如果进⾏数字赋值,那么这个变量它既存储了ASCII码表中该⼗进制数字所对应的字符,同时也存储了该⼗进制数字,两者是可以在⼀个变量中输出的。
3. 字符型数据的输⼊和输出
1.⽤ %c 来存储字符数据。printf 和 scanf都⼀样。
2.输⼊的时候,操作数和运算符之间不能有空格,因为空格也是⼀个字符,输⼊空格会被当成有效字符,进⽽导致程序错误!
3.详细如图:
4.独属于字符的输⼊和输出:
//输⼊
char ch;
scanf("%c",&ch);
或者
char ch;
ch = getchar();
//输出
printf("%c",ch);
putchar(ch);  //输出变量
putchar('A');  //输出常量
4.其他拓展
字符的很多条件关系的成⽴背后靠的确是,ASCII码表背后进制数字的⼤⼩关系
9. switch-case语句的升华: 要学会避免重复(将同样的部分可以利⽤case的连续性来缩减代码长度)
10. for语句和while语句的区别:
1. for语句更多的⽤于已知循环次数的情况
2. while语句则更适合不知道具体的循环次数的情况
1.2编程技巧的⼩总结:
1. 可以定义⼀个变量来控制符号,即符号变量sign或者⼀些功能变量flag,这样的做法会⽐机械地使⽤数学⽅式来求更⾼效。
1. 典型的案例是对于加减交错的情形的处理:使⽤sign变量会⽐引⽤pow去计算-1的奇偶指数下的不同结果会⽅便很多。
2. 对浮点数的相等的判断不能直接⽤==,应该⽤两个浮点数相减的结果⼩于⼀个⽆穷⼩的数来实现,效果会更好.
⼤概的代码如下:
if (numb1 - numb2 <= 0.00000000001)
3. switch-case结构的语句可以利⽤好没有break情况下的连续执⾏语句的效果来进⾏庞⼤⼀常量条件的读取.⽐如各类字符量的统计那⼀道题⽬可以借鉴.
⼤概的代码如下:
case '0':  case  '1':  case '2':  case '3':  case '4':
case '5':  case  '6':  case '7':  case '8':  case '9':
4. 避免由于if-else的匹配原则所带来的错误的⽅式:
1.使⽤⼤括号,制造⼀个复合语句
2. 增加⼀个空的else
5. 学会利⽤ temp 变量,设⽴⼀个temp变量,⽤来储存中间量可以在需要⽐⼤⼩的环境中让largest始终存放⼤的那⼀个数据,让smallest始终存放⼩⼀点的那⼀个数据.
if (largest < smallest)
{
temp = largest , largest = smallest , smallest = temp;
}
6. 判断奇偶常⽤: if(number%2 == 0)
7. 求两个数的最⼤公约数⽤辗转相除法 \ 两个数的最⼩公倍数等于这两个数相乘后除以他们的最⼤公约数. 假设(M>N):
while (N != 0)
{
number = N;
N = M % N;
M = number;
gcd = M;
lcm = product / gcd;
}
8. 解决输出⼀段数,要⽤空格隔开,⽽最后不要出现空格的办法是,最后的数独⽴⼀个输出,前⾯的数在数后⾯多输出⼀个空格。
1.3本章的学习体会:
==总得来说,这两周的学习有收获的地⽅,但也有很值得反思和思考的地⽅.==
* 先说有收获的地⽅吧,⼤概明⽩了线下学习的学习⽅式,不同于暑假线上慕课+PTA的慢慢学习的过程,线下的学习节奏更快,需要更==专注的态度==和==更清晰的组织能⼒==,线下的模式将主要变成这样的样式:
1.[课前准备部分] ⾸先是在课堂派上结合书本进⾏预习任务的完成,在预习的过程中多思考和完成笔记的记录(有点像是把看慕课和边整理笔记的时间放到这⾥来了), 然后是完成测试作业并做好思考的总结,相关笔记的整理.
2.[课上听课部分] 跟着⽼师的思路,  在⾃⼰的脑⼦中形成完整的知识框架,  巩固已经学会的知识点,  重点记录和研究⾃⼰还不太懂的部分.
3.[课后巩固部分] PTA平台保持刷题习惯,看超星平台的视频进⾏巩固和补充 {有时间的话对可以拓展的点进⾏⾃⾏拓展和学习}
* 再说说存在危机的地⽅,那就是我在时间安排和管理上还不能让我很舒适地按照我想要的节奏学习C语⾔,没有那种很轻松的感觉,感觉我能跟得上⽬前的上课节奏的主要原因还是暑假的⼩段时间的⾃习,⽽不是说在学习的过程中,没  * 严格地来说这两周地代码量⼏乎为微!并且还主要集中在上机课.这是很严重的问题!
2.PTA实验作业
2.1前天是哪天
2.1.1数据处理:
数据表达:需要设置三个变量,year month day⽤来保存年⽉⽇这3个数字,数据类型为整型。
流程设计:
采⽤级联的if-else结构:
第⼀种情况是年需要借位的情况,month==1 && day <= 2
第⼆种类型是⽉份需要借位的情况:其中第⼀类是借位后为⼤⽉的情况条件为 month为2 4 6 8 9 11且day <= 2时才会触发。
第⼆类时借位后为⼩⽉的情况条件为 month为5 7 10 12且day <= 2时才会触发。
第三类是2⽉份的情况条件为 month为3且day <= 2时才会触发。并且需要事先判断该年年份是否为闰年。
最后就是剩下的⽐较简单的情况,直接就是 day-2
2.1.2代码截图:
级联的if-else版本:
switch-case版本:
2.1.3 PTA提交列表及说明
⼀次过:这⾥要强调⼀下先思考再去写代码的⾄关重要性和⾼效性!
2.2单词长度
2.2.1数据处理:
数据表达:⽤⼀个字符变量op来存储字符;⽤⼀个整型变量count来计数。
流程设计:
2.2.2 代码截图:
(还存在⼀个格式错误没有出来时间花费太多了,脑⼦有点乱暂时先到这⾥)
2.2.3PTA提交截图:
这⾥的多次提交可以分为两种类型的思路的交叉,原本的do-while结构能够满⾜10分的要求,但是对于空句⼦连续空格和开头结尾多空格的⼩细节不好处理。
于是改⽤外部先输⼊⼀次加while结构这样可以解决开头空格输⼊对do - while结构的逻辑性打击。这⾥插⼊⼀个关键点:如果使⽤while结构要注意循环内的赋值应该放在最后这也是解释我提交当
中出现1分的情况的问题。
往后回到10分就是那三个问题的未解决。
改动了这两个地⽅:
第⼀插⼊了⼀个判断在第⼀个输出的地⽅把连续空格所造成的结果会输出0的问题解决。
第⼆将第⼆个输出的地⽅将条件从op == '.'改成了count != 0这也是为了解决连续空格问题。
尚未解决的疑问:不知道最后的关于开头结尾的空格的格式错误这个问题怎么解决。
这个疑问的解决,其实说的问题是在 . 和语句之前存在空格的话要怎么去解决。
好的办法是使⽤状态变量,直接采⽤让第⼀个输出和后⾯的输出分开来就可以解决问题。
但是这个过程下⼜会产⽣新的问题,那就是只有⼀个单词的测试点反⽽过不了了。
最终经过测试发现,是来⾃于循环外部的那个判断语句的问题,那个判断语句直接⾯对的是结尾是 . 的输出情况,在只打⼀个单词的情况下,也会有区别,所以也要有分⽀来提调节。
最后是,格式的错误中!不仅要考虑空格不计数,还要考虑换⾏也不计数!!
2.3单步调试解决单词长度这道题,
2.3.1单步调试截图
printf和scanf有什么不同
调试到这⾥的代码可以完成这道题⽬的⼤体的要求
这⾥是发现了从do-while换成while时忘记该换输出语句的位置,导致了⼤错误!
2.3.2代码截图
2.3.3PTA提交截图

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。