顺序-分支结构
C博客作业02--分支——顺序结构
| 这个作业的地址 | C博客作业01--分支、顺序结构 |
| ---- | ---- | ---- |
| 这个作业的目标 | 初步认识C语法,掌握数据表达、printf、scanf语法及分支结构内容 |
0PTA总分
1.本章学习总结
求余(符号取决于被除数)
列:(-10)%3=-1
10%(-3)=1
-
复合运算符中运算符与“=”之间不存在空格
-
求偶数:偶数与2求余为0则为偶数
-
相等的判断“= =”,不相等判断用“!=”
-
float与double都是浮点型(double型数据占用空间更大,精度更高,取值范围更大)
-
强制类型转换
1.数据类型和表达式都必须加括号
2.不会改变原来数据的类型及变量值,只在本次运算中临时性转换
3.运算结果不遵循四舍五入原则
1.1分支结构
(1)简单if语句
基本结构:
if(表达式)
{
执行代码块;
}
- 如果表达式值为真,则执行后面,否则不执行
代码表示
//如果体重小于等于100,就可以穿上s码的小裙子
int main()
{
int weight=90;
if (100 >= weight)
{
printf("%s\n", "可以穿s码小裙子");
}
return 0;
}
(2)if-else语句
if()后面没有分号,直接写{}
else后面也没有分号,直接写{}
基本结构:
if(表达式)
{
代码A;
}
else
{
代码B;
}
- 如果表达式为真,则执行代码A,否则执行代码B
代码表示:
//如果体重小于等于100,就可以穿上s码的小裙子,否则只能穿XL码
int main()
{
int weight=90;
if (100 >= weight)
{
printf("%s\n", "可以穿s码小裙子");
}
else
{
printf("%s\n", "可以穿XL码小裙子");
}
return 0;
}
(3)多重if-else语句
基本结构:
if(表达式)
{
执行代码块A
}
...
else if()
{
代码块B
}
...
else
{
代码块n
}
- 依次执行表达式,出现某个值为真时,则执行相应代码块,否则执行代码块n
代码表示:
//如果体重小于等于100,就可以穿上s码的小裙子,如果体重在100与110之间就可穿L码,否则只能穿XL码
#include <stdio.h>
int main()
{
int weight = 90;
if (weight <= 100)
{
printf("%s\n", "可以穿上s码的小裙子");
}
else if (100 < weight < 110)
{
printf("%s\n", "可以穿上L码的小裙子");
}
else
{
printf("%s\n", "只能穿XL码");
}
return 0;
}
(4)嵌套if-else语句
就是在if-else语句中,再写if-else语句)
基本结构:
if(表达式)
{
if(表达式)
{
执行代码块A
}
else
{
执行代码块B
}
}
else
{
执行代码块
}
代码表示:
/*考试之前,家长说了,你如果考90分以上的话会买玩具,否则没有奖励,
如果能在获得玩具的情况下获取班级前三名的话会有大餐吃。
*/
#include <stdio.h>
int main()
{
int results = 98;
int ranking = 2;
if (results > 90)
{
if (ranking <= 3)
{
printf("%s\n", "吃大餐");
}
printf("%s\n", "买玩具");
}
else
{
printf("%s\n", "没有奖励");
}
return 0;
}
(5)分支结构之switch语句
基本语句结构:
switch(表达式)
{
case 常量表达式A:代码块A break;
...
case 常量表达式n: 代码块n break;
default:执行代码块n+1;
}
代码表示:
/*小明参加期末考试,分数等级分为A-D,等级划分方式如下:
90<=分数<=100 ,等级为A。
80<=分数<90 ,等级为B。
60<=分数<80 ,等级为C。
分数<60 ,等级为D。
小明期末考试分数为87分,在代码编辑器中完善代码使其输出结果为: 等级B
*/
#include <stdio.h>
int main()
{
int score = 87; //考试分数为87分
score/=10;
switch (score)
{
case 10:
case 9:
printf("等级A");
break;
case 8:
printf("等级B");
break;
case 7:
case 6:
printf("等级C");
break;
default:
printf("等级D");
break;
}
return 0;
}
注意事1:
(1)在case后的各常量表达式的值不能相同,否则会出现错误
(2)在case后如果没有break;会一直往后执行一直到遇到break;才会跳出switch语句
(3)switch后面的表达式语句只能是整型或者字符类型
(4)在case后,允许有多个语句,可以不用{}括起来
(5)各case和default子句的先后顺序可以变动,而不会影响程序执行结果
(6)default子句可以省略不用
注意2:
(1)swtich后的值是整数类型
(2)switch语句中case不满足时执行用default语句
(3)case的先后顺序不影响结果
(5)多个case可以用一条执行语句
*同:都是处理多分支结构
*不同:if语句是两个分支的选择结构,swtich结构是多分支结构
- 小技巧:
swtich判断固定值时用
if判断区间和范围候用
注意3:
(1)“=”与两个“=”的区分
“=”用于赋值,而两个“=”就是等于比较的意思
(2)常用函数(在头文件中包含math.h)(使用函数时)
平方根sqrt(x)
绝对值(x)
幂函数pow(x,n)
指函数exp(x)
以e为底对数log(x)
以10为底对数log10(x)
(3)else-if语句:分支清晰,更倾向使用它
(4)随机=rand()%100
10~100随机:10+rand()%90
(5)区分数字和数字字符,1是整型数字,‘1’是字符
(6)字符型用char定义
(7)ch=getchar()输入一个字符
putchar()输出一个字符
(8)一般情况明确使用switch语句
(9)常用ASCLL码:‘A’65 ‘B’66 ‘C’67
1.2学习到方法
比较大小的设计思路
设a存为最大值,b其次,c最大,并且设置一个临时变量进行转换
输入a,b,c
if a>b than 交换a,b的值
if a>c than 交换a,c的值
if b>c than 交换b,c的值
如图:
例题:
- 求偶数(n%2==0)
- 求个位数gewei= a % 10
- shiwei = (a / 10) % 10
- baiwei = a / 100
如图:
1.3本章学习体会
学习本章分支结构,在语法方面上是简单易懂的,但是在做pta题目上就存在问题,在题目上没有理解透彻题目的意思,不会根据题意去编写条件,这主要是自己个人代码量不足,并且代码思维跟不上所致,以后应该针对每个模块自己多加练习pta题目,并且每个题目都要弄清楚才能进步,学会去锻炼代码思维,并掌握知识点。
2.1 前天是哪天(寻求了同学的帮助)
- 2.1.1 数据处理
int year;
int month;
int day;
都运用了整数型类型
*2.1.2 数据处理:数据用到表达式及流程结构
用分支结构里面的else-if嵌套结构
分了三种情况:
以每个月3号为分界点,在3<day<31天为一类来讨论,2号讨论,3号讨论,在此基础上,注意月份大小和2月份的特殊情况,及一月份特殊号数时,年需要减一年。
- 2.1.3 代码截图
2.1.4 PTA提交列表及说明
- 分类讨论上没有考虑周全
- 在符号“=”上,“{}”漏符号
2.2 自选一题,内容要和字符型数据处理有关的题目
2.2.1 数据处理
int oil = 0, num = 0;//整型变量
char service;//字符型变量
double sum = 0;//双精度浮点类型
2.2.2 代码截图
2.2.3 PTA提交列表及说明
- scanf的字符吸收,对空格也会吸收空格
- 输入字符时未给‘’
- 运用double时输出or输入忘记用%.lf
- 未清除定义好字符型而导致错误
2.3 自选一题,介绍单步调试如何检查错误
选择一题,介绍如何用单步调试找出错误。如程序代码没有进入你设计的分支、变量数据读入不正确。
可参考超星平台的视频:学习单步调试--计算油费
2.3.1 单步调试截图
24小时时间转换
单步调试
监视
2.3.2 代码截图
2.3.3 PTA提交列表及说明
- 忽略PM,AM为字符型,从而导致定义错误
- 在scanf中“:”未输入,本身就为一个可读字符
- 调试过程中输入值时未输入“:”,从而也导致错误
单步调试过程中监视窗口都会显示自己所输入的值是否被scanf吸收