C语言学习笔记Day2——持续更新中... ...

上一篇文章: C语言学习笔记Day1——持续更新中… …

五. 分支语句

1. 什么是语句

在C语言中,语句是程序执行的单元,程序的功能由程序中的每一条语句实现和完成,每条语句都以分号’;'结束。

2. 语句的执行顺序

在一个函数(函数的解释未更新)中,所有的语句都是从上往下执行

3. if判断语句

if判断语句属于分支语句,它有三种形式,分别是:单if判断语句、if…else…判断语句(有时候我更喜欢叫它分支判断语句)、if…else if…else判断语句(正如之前的那样,有时我喜欢称它多分支判断语句)。

3.1 单if判断语句

3.1.1 语法结构
if (条件表达式)
{
    语句块;
}
3.1.2 示例
// 示例一
#include <stdio.h>

int main()
{
    int a = 1;
    if (a > 0)   // 因为a = 1, 所以a > 0是对的, 故而它会进入大括号执行printf()语句
    {
        printf("a比0大!");
    }
    return 0;
}
// 示例二
#include <stdio.h>

int main()
{
    int a = 1;
    // 因为a = 1, 所以a < 0是错的, 
    // 故而它不会进入大括号, 当然也不会执行printf()语句
    if (a < 0)   
    {
        printf("a比0大!");
    }
    return 0;
}

3.2 if…else…判断语句

3.2.1 语法结构
// if语句和else语句后面的语句块中只会有一个语句块被执行
if (条件表达式)
{
    语句块;
}
else
{
    语句块;
}
3.2.2 示例
// 示例一
#include <stdio.h>

int main()
{
    int a = 1;
    // 因为a = 1, 所以a > 0是对的, 
    // 故而它会进入if下面紧跟着的大括号中并执行printf()语句
    // 后面的else语句中的printf()语句不会执行
    if (a > 0)
    {
        printf("a比0大!");
    }
    else
    {
        printf("a比0小!");
    }
    return 0;
}
// 示例二
#include <stdio.h>

int main()
{
    int a = 1;
    // 因为a = 1, 所以a < 0是错的, 
    // 故而它不会进入if下面紧跟着的大括号, 也就不会执行printf()语句
    // 但是if语句不执行, 后面的else语句中的printf()语句就会执行了
    // 这是因为在这个世界上只有"是、否"两种, 不执行if就会执行else
    if (a < 0)
    {
        printf("a比0大!");
    }
    else
    {
        printf("a比0小!");
    }
    return 0;
}
// 示例三
#include <stdio.h>

int main()
{
    int a = 1;
    // 因为a = 1, 所以a < 0是错的, a > -5是对的,
    // 但是'&&'表示两者都, 也就是需要a < 0和a > -5必须全部是对的才可以,
    // 故而它不会进入if下面紧跟着的大括号, 也就不会执行printf()语句
    // 但是if语句不执行, 后面的else语句中的printf()语句就会执行了
    // 这是因为在这个世界上只有"是、否"两种, 不执行if就会执行else
    if (a < 0 && a > -5)
    {
        printf("a比0大!");
    }
    else
    {
        printf("a比0小!");
    }
    return 0;
}

Tips: 除了(与)’&&‘以外还有(或)’||’, 具体可以看运算符那一节哦

3.3 if…else if…else…判断语句

3.3.1 语法结构
// 在这种语句中也至少会有一个语句块被执行
if (条件表达式)
{
    语句块;
}
else if (条件表达式)  // 值得注意的是else if后面也会有条件表达式
{
    语句块;
}
else if (条件表达式)
{
    语句块;
}
// else if的数量取决于目前判断的事件有多少种情况,
// 一般而言如果事件有4种情况, 
// 那么就只需要4 - 2 = 2个else if语句
...   
else
{
    语句块;
}
3.3.2 示例
#include <stdio.h>

int main()
{
    int a = 10;
    // 可以看到对于一个数字而言, 它与0做比较只会出现三种情况
    // 情况一: 大于0
    // 情况二: 小于0
    // 情况三: 等于0
    // 由于上面的分析所以可以知道下面三个printf()语句至少会有一个被执行
    if (a > 0)
    {
        printf("a大于10!");
    }
    else if (a < 0)
    {
        printf("a小于10!");
    }
    else
    {
        printf("a等于10!");
    }
    return 0;
}

4. switch语句

4.1 什么是switch语句

switch语句与if语句同属于分支语句,这是因为他们两有一个共同的地方——都需要判断满足才会执行特定的语句块。

4.2 语法结构

switch (nNum)
{
// case后面的1是指nNum可能的数值, 且必须为整数类型或者可以转换成整数的类型, 即:
// 可以为int、[unsigned] long [long]、char, 不可以为浮点数、指针等
case 1:     // 注意后面有个冒号':'
    语句块;  // 语句块中有其它语句的话请按其它语句的语法编写
    break;  // break语句必须得有
case 2:
    语句块;
    break;
... ...
case 12:
    语句块;
    break;
default:  // 相当于if语句中的else,上面全不满足的时候就会执行default下面的语句块
    语句块;
    break;
}

4.3 示例

// 输入数字转换成中文月份
#include <stdio.h>

int main()
{
	int nNum = 0;
	scanf("%d", &nNum);  // 输入一个数字并保存至nNum变量中, 此处的'&'表示引用
	if (nNum < 1 || nNum > 12)  // 月份只会在1——12范围中, 所以判断一下, 确保输入是正确的
	printf("您的输入不正确! 请输入1 —— 12内的数值!");
	switch (nNum)
	{
	// case后面的1是指nNum可能的数值, 且必须为整数类型或者可以转换成整数的类型, 即:
	// 可以为int、[unsigned] long [long]、char, 不可以为浮点数、指针等
	case 1:   
		printf("一月");
		break;
	case 2:
		printf("二月");
		break;
	case 3:
		printf("三月");
		break;
	case 4:
		printf("四月");
		break;
	case 5:
		printf("五月");
		break;
	case 6:
		printf("六月");
		break;
	case 7:
		printf("七月");
		break;
	case 8:
		printf("八月");
		break;
	case 9:
		printf("九月");
		break;
	case 10:
		printf("十月");
		break;
	case 11:
		printf("十一月");
		break;
	case 12:
		printf("十二月");
		break;
	default:  // 除了上面用的if判断以外, 还可以在default中写入判断
		/*printf("您的输入不正确! 请输入1 —— 12内的数值!");*/
		break;
	}
	return 0;
}

六. 循环语句

1. for循环语句

1.1 语法结构

// 前两个表达式后面都有分号
// 表达式1一般是变量初始值
// 表达式2一般是变量结束的条件
// 表达式3一般是变量的变化规则, 例如: 自增(++)、自减(--) ... ...
for (表达式1; 表达式2; 表达式3)
{
    循环体;
}

1.2 示例

// 示例1: 打印 1——20
#include <stdio.h>

int main()
{
    // 一般打印1 —— 20在没学过循环之前都是用20次printf()函数进行打印
    // 这么做无疑会写至少20行代码, 但是循环只需要短短几行代码即可实现, 如下:
    int i;
    for (i = 1; i <= 20; i++)  // 因为要包含20, 所以需要用小于等于(<=)
    {
        printf("%d ", i);
    }
    printf("\n");
    // 针对这种简单的循环, 其实还可以将变量i的定义与赋值都放在表达式1中, 如下:
    for (int i = 1; i <= 20; i++)
    {
        printf("%d ", i);
    }
    return 0;
}
// 示例2: 打印 1——20中的所有偶数
#include <stdio.h>

int main()
{
    // 示例一中已经可以打印1——20了, 那么如何挑选其中的偶数呢?
    // 这里为了结合练习if语句, 我们使用运算符'%'
    // 这是取余运算符, 一个数为偶数的关键在于这个数除以2是否余1,
    // 如果余1, 那么此数为奇数, 反之为偶数, 实现方式如下
    for (int i = 1; i <= 20; i++)
    {
        if (i % 2 != 1)  // 这里的条件表达式可以换成其他的哦~
        {
            printf("%d ", i);
        }
    }
    return 0;
    // Tips: 此题还有其它做法哦~
}

2. while循环语句

2.1 语法结构

// 若条件表达式成立, 则循环体将会一直执行
// 建议仔细检查, 小心无限循环
while (条件表达式)
{
    循环体;
}

2.2 示例

// 示例1: 计算1 + 2 + 3 + ... + 99 + 100的值
#include <stdio.h>

int main()
{
    // 此题如果不用循环其实是蛮难搞的
    // 此题有一个很明显的特点, 它有一个起始值和一个结束值,
    // 分别是1和100, 所以便可以此构建while循环了
    int nSum = 0;  // 定义变量nSum保存和
    int i = 1;  // 定义变量i, 给它附上题目中的起始值
    while (i <= 100)  // 让变量i最大不能超过题目中的结束值
    {
        nSum += i;  // 此语句相当于nSum = nSum + i;
        i++;  // 变量i自增, 模拟题目中每个加数的变化
    }
    printf("%d", nSum);
    return 0;
}
// 示例2: 找出100——999以内的水仙花数
// Notes: 水仙花数是指一种三位数,其各个数之立方和等于该数。
// 例如: 153 = 1^3 + 5^3 + 3^3
#include <stdio.h>
#include <math.h>  // 因为有次方, 这里使用math.h头文件中的pow()函数

int main()
{
	// 此代码不做解释, 请自行分析
    int i = 100;
    while (i < 1000)
    {
        // 先取出这个三位数的个十百位
        int nUnit = (i % 100) % 10;  // 个位
		int nTen = (i % 100) / 10;  // 十位
		int nHundred = i / 100;   // 百位 
		if ((int)pow(nUnit, 3) + (int)pow(nTen, 3) + (int)pow(nHundred, 3) == i)
			printf("%d ", i);
        i++;
    }
    return 0;
}

3. do…while循环

3.1 语法结构

do
{
    循环体;
}while(条件表达式);  // 值得注意的是最后有个分号哦~

3.2 示例

// 示例1: 找出100——999以内的水仙花数
// Notes: 水仙花数是指一种三位数,其各个数之立方和等于该数。
// 例如: 153 = 1^3 + 5^3 + 3^3
#include <stdio.h>
#include <math.h>  // 因为有次方, 这里使用math.h头文件中的pow()函数

int main()
{
	// 此代码不做解释, 请自行分析
    int i = 100;
   	do
    {
        // 先取出这个三位数的个十百位
        int nUnit = (i % 100) % 10;  // 个位
		int nTen = (i % 100) / 10;  // 十位
		int nHundred = i / 100;   // 百位 
		if ((int)pow(nUnit, 3) + (int)pow(nTen, 3) + (int)pow(nHundred, 3) == i)
			printf("%d ", i);
        i++;
    }while(i < 1000);
    return 0;
}

3.3 while循环与do…while循环的区别

// 运行下面的代码, 你会发现while循环中的循环体语句不会被执行, 
// 而do...while循环中的循环语句被执行了
// 这是由于while属于先判断再执行, do...while属于先执行后判断
// 建议好好揣摩, 同时也建议尽量不用do...while循环
#include <stdio.h>

int main()
{
	int i = 1;
	while (i == 0)
	{
		printf("while循环执行了!");
	}

	do 
	{
		printf("do...while循环执行了!");
	} while (i == 0);
	return 0;
}

七. 其它语句

语句有很多,比如return也是一个语句,它被称为返回语句,这里需要了解的是goto语句。

1. 语法结构

goto 标识符;
标识符:
	代码块;

2. 示例

// 成都有一个'时空伴随者'很火爆, 指本人的电话号码与确诊号码在同一时空网格
// (范围是800M*800M)共同停留超过10分钟,且最近14天任一方号码累计停留时
// 长超过30小时以上,则查出的号码为时空伴随号码。
// 这里我们用goto语句实现它, 当然别妄想现在就完全实现,目前只是实现它的思想,
// 其实就是如果范围内有一个是红码了,那么区域内全变红码, 
// 所以这里就是说只要找到一个就不需要继续往下找了, 直接打印红码就行了。
#include <stdio.h>

int main()
{
    // 模拟母体红码: 这里使用一串数字, 一个数字对应一个人
    // 他们满足时空伴随者的条件, 且20号为红码
    int i = 0
	while (1)
    {
        if (i == 20)
            goto Spacetime;   // Spacetime: 标识符, 用户自定义
        i++;
    }
Spacetime:
    printf("警告!全改成红码~");
    
    return 0;
}

3. 尝试

如果上面的示例中没有使用goto语句会发生什么呢?

4. 建议

goto语句能不用就不要用~

吃饭睡觉咯,头发要紧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

g_pSeven

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值