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.
- 代码优点以及可学习之处:
- 在while语句的判断条件中使用scanf()语句很新奇,这样处理既能够输入数据又能够简化代码
- 在while语句的判断条件中利用a,b,c本身的值以及&&来处理循环条件简洁明了
- 每一个if语句下都嵌套一个if-else语句,可以准确判断每种情况,思路清晰