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

0.展示PTA总分



1.本章学习总结

1.1 学习内容总结

第一章

1.学习如何定义正确的变量名
C语言的标识符是由字母、数字和下划线组成,其中第一个字符必须是字母或者下划线。例如:_name,name_1等是合法字符,而left&right、1name等是不合法字符。

2.注意%是一个针对整数的运算
例如:int a;int b;int c;c=a%b;正确运用了%,但如果a或者b中任意一个不为int类型,则编译会出错。

第二章

1.了解常见的数据类型以及变量定义
C语言中常用的数据类型包括int(整型)、char(字符型)、float(单精度浮点型)、double(双精度浮点型)。int用于存放整数,字符型用于存放像'a','1','\n'这样的字符型常量,float和double均可以存放实数,但double型的数据占用的空间更大,精度更高,取值范围更大。变量定义的一般形式是:类型名 变量名;例如:int time,double distance

2.printf函数
printf函数可以实现数据的输出,printf函数的一般调用的格式为:printf(格式控制字符串,输出参数1,...,输出参数n);,其中格式控制字符串包括格式控制说明和普通字符。例如:printf("fahr=%d,celsius=%d",fahr,celsius)中双引号内除%d以外的所有字符就是普通字符,而%d就是格式控制说明,它可以用于输出双引号外对应的输出参数。

3.scanf函数
scanf函数可以实现数据的输入,scanf函数的一般调用格式为:scanf(格式控制字符串,输入参数1,...,输入参数n);,其中格式控制字符串也包括格式控制说明和普通字符。例如:scanf("x=%lf",&x)中双引号内除%lf以外的所有字符就是普通字符,而%lf就是格式控制说明,它可以用于输出双引号外对应的输入参数。

4.关系运算符

运算符|<|<=|>|>=|==|!=
:---😐:--😐:---😐:---😐:--😐:---😐:---😐:--😐:---:
名称|小于|小于等于|大于|大于等于|等于|不等于

关系运算的结果只有1和0。例如:16>15的结果就是1,16<15的结果为0。

5.if-else语句
该语句可以实现分支结构。例如计算二分段函数:

if(x!=0)
{
y=1/x;
}
else
{
y=0;
}

6.常用的数学函数

  • sqrt(x):计算根号x。例如:sqrt(4.0)=2。
  • fabs(x):计算绝对值x。例如:fabs(-1.0)=1。
  • pow(x,n):计算x的n次方。例如:pow(2,3)=8。
  • exp(x):计算e的x次方。例如:exp(2.3)=9.974182.
  • log(x):计算lnx。例如:log(123.45)=4.815836.
  • ...

7.for循环语句
for语句的一般形式为:

for(表达式1;表达式2;表达式3)
{
循环体语句
}

其中表达式1只执行一次,表达式2是条件表达式,表达式3或者循环体语句可以改变循环变量,从而改变循环条件的真假。
例如:

for(i=1;i<=n;i++)
{
sum+=i;
}

第三章

1.else-if语句
else-if语句是最常用的实现多分支的方法。其一般形式为:

if(表达式1)
语句1;
else if(表达式2)
语句2;
...
else if(表达式n)
语句n;

例如:

if(x>0)
{
y=0;
}
else if(x<=15)
{
y=4*x/3;
}
else
{
y=2.5*x-10.5;
}

2.getchar和putchar
getchar函数可以从键盘读入一个字符,putchar函数可以输出一个字符。
例如:

ch=gerchar();//读入一个字符并赋予ch
putchar(ch);//将ch的值输出

3.逻辑运算符

目数 单目 双目 双目
运算符 ! && ||
名称 逻辑非 逻辑与 逻辑或

!会改变原始表达式的真假性,&&见假则假,||见真则真。

4.switch语句
switch语句也可以处理多分支选择问题,但与else-if不同的是,当被判断值为常量的时候,使用switch语句的效率会更高。
语法实例:

switch(choice)
{
case1:price=3.0: break;
case2:price=2.5: break;
case3:price=4.0: break;
case4:price=3.5: break;
default:price=0.0: break;
}

switch的break应根据情况灵活使用,可以实现更多的功能。

第四章

1.while语句
while循环语句的使用范围很广,当循环次数不确定时,相比于for语句,while循环语句更适合使用。
语法实例:

while(grade>=0)
{
total+=grade;
num++;
}

grade>=0是进入while循环体的循环条件,大括号内是一条复合语句作为while的循环体。

2.do-while语句
do-while语句的特点是无论是否满足循环条件总会执行一次循环体。
语法实例:

do
{
number/=10;
count++;
}while(number!=0);

小括号内是执行循环体的条件,但最初进入循环时无论是否满足这个条件,循环体会直接执行一次,然后在根据条件判断是否继续进行循环。

1.2 本章学习体会

  • 在经过两周的学习后,我对这门课程的热爱仍然没有减少。在进入大学学习这门课程之前,我还担心它会和我想的有些出入,但幸运的是,它正如我希望的那样。因为在暑假期间我就已经通过MOOC平台学习翁恺老师的C语言入门,所以我能够跟紧老师的脚步,把每一个知识点都学扎实,学透彻。但是通过课堂上的互动,我明白自己在代码阅读能力上还有所欠缺,有待加强。老师常说这是一门实践性很强的课程,的确如此。因为我记得刚刚开始在VS上打代码的时候往往会没有解决问题的思路,不断地忘记在语句末尾加分号,经常出现一些基本的语法问题。但是经过暑假以及这两周来的学习和实践,我基本上不会再犯一些很基础的错误,解决问题的思路也稍微打开了一些,能够有自己的想法。老师也常强调代码规范的问题。回想起刚接触VS时,我常常贪图方便就以a,b,c来定义变量,虽然我那时也觉得这样对后来的代码修改不方便,但没有太过在意。开学后老师强调了之后,我尝试着改正这个习惯,之后我就觉得我的代码让我更加想要去读,整个代码的风格也清爽了很多。

  • 两周的代码量统计如下:

    PTA题集|c01-顺序结构练习|c02-选择结构|c03-单循环结构|总计
    :-😐:-😐:-😐:-😐:-:
    代码量|160|321|530|1011


2.PTA实验作业

2.1 7-9 龟兔赛跑

2.1.1 数据处理

  • 数据表达:

    变量|由来|类型
    :-😐:-😐:-:
    time|记录总时间|int
    distanaceRabbit|兔子前进的总路程|int
    distanceTortoise|乌龟前进的总路程|int
    i|for循环需要一个循环变量|int
    flag|标记兔子是否休息|int
    rabbitRestTime|记录兔子休息的时间|int
    rabbitRunTime|记录兔子奔跑的时间|int

  • 数据处理:
    总共使用了一个for循环语句,两个if-else语句,一个else-if语句,以及三个嵌套的if语句,具体流程在代码截图中有详细说明。

2.1.2 代码截图

2.1.3 本题可扩展功能

  • 说明:在本题的基础上可以进一步求出胜利者和失败者的距离差和时间差(引入了两个新的变量,int distanceDifference;double timeDifference
  • 拓展后的修正部分代码:

2.1.4 PTA提交列表及说明

  • Q1:刚开始看了半天没有解决问题的思路
  • A1:最后我百度了其他人的思路,才知道把总时间分割成每个一分钟比较容易解决问题

2.2 7-11 简单计算器

2.2.1 数据处理

  • 数据表达:

    变量|由来|类型
    :-😐:-😐:-:
    number1|为记录操作数1|int
    number|为记录操作数2|int
    flag|输入出错的标志,1为正常,0为出错|int
    ch|记录运算符|int

  • 数据处理:
    总共使用了一个while循环语句,两个if语句,两个if-else语句,以及一个switch语句,具体流程在代码截图中有详细说明。

2.2.2 代码截图

2.2.3 本题可扩展功能

  • 说明:引入了新的变量char op将number1和number2的类型改换为double来解决做除法时数据丢失的问题,加入了do-while循环来使得能够进行多次运算直至用户不想进行运算为止,注意do-while语句循环条件中的scanf语句需要添加空格以吸收换行符
  • 拓展代码截图:

2.3.4 PTA提交列表及说明

  • Q1:前两次提交都是由于想要一次性读取一个符号和一个数造成错误
  • A1:一次只读取一个符号或者数字,这样解决问题的思路就清晰很多
  • Q2:即使运算符或者分母出错也会输出最后的printf
  • A2:对最后的printf语句加上条件限制即可

2.3 7-12 于龙遇见日期,又哭了!

2.3.1 数据处理

  • 数据表达:

    变量|由来|类型
    :-😐:-😐:-:
    date[3]|记录输入的三个数字|int
    year|记录年|int
    month|记录月|int
    day|记录天|int
    flag|初步判断日期是否合法的标志,1为合法,0为不合法|int
    i|for循环变量|int
    temp|作为交换变量的临时变量|int
    maxPosition|记录三个数中最大数在数组中的位置|int
    ch1, ch2|记录两个无用字符|int

  • 数据处理:
    总共使用了一个for循环语句以及n个if语句和if-else语句,具体流程在代码截图中有详细说明。

2.3.2 代码截图

2.3.3 本题可扩展功能

  • 说明:我在原有代码的基础上,将进一步判断日期是否合法的重复性降低,使代码可读性更高
  • 修正部分代码截图:

2.3.4 PTA提交列表及说明

  • Q1:解决问题的思路不清晰
  • A1:认真分析题目,一种方法不行就换一种再来

3.阅读代码

  • 题目如下:
  • 题目大意:已知三角形两边求第三边,若无法构成三角形,则输出Impossible.
  • 题解如下:
  • 代码功能:判断输入的数据能否构成三角形,若能输出第三边,若不能输出Impossible.
  • 代码优点以及可学习之处:
    1. 在while语句的判断条件中使用scanf()语句很新奇,这样处理既能够输入数据又能够简化代码
    2. 在while语句的判断条件中利用a,b,c本身的值以及&&来处理循环条件简洁明了
    3. 每一个if语句下都嵌套一个if-else语句,可以准确判断每种情况,思路清晰

posted @ 2019-10-07 16:45  朱振豪  阅读(370)  评论(3编辑  收藏  举报