顺序-分支结构

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吸收
posted @ 2020-11-06 17:10  Li-xinguo★  阅读(122)  评论(0编辑  收藏  举报