
上一篇文章: C语言学习笔记Day1——持续更新中… …
五. 分支语句 1. 什么是语句在C语言中,语句是程序执行的单元,程序的功能由程序中的每一条语句实现和完成,每条语句都以分号’;'结束。
2. 语句的执行顺序在一个函数(函数的解释未更新)中,所有的语句都是从上往下执行
3. if判断语句3.1 单if判断语句 3.1.1 语法结构if判断语句属于分支语句,它有三种形式,分别是:单if判断语句、if…else…判断语句(有时候我更喜欢叫它分支判断语句)、if…else if…else判断语句(正如之前的那样,有时我喜欢称它多分支判断语句)。
if (条件表达式)
{
语句块;
}
3.1.2 示例
// 示例一 #includeint main() { int a = 1; if (a > 0) // 因为a = 1, 所以a > 0是对的, 故而它会进入大括号执行printf()语句 { printf("a比0大!"); } return 0; }
// 示例二 #include3.2 if…else…判断语句 3.2.1 语法结构int main() { int a = 1; // 因为a = 1, 所以a < 0是错的, // 故而它不会进入大括号, 当然也不会执行printf()语句 if (a < 0) { printf("a比0大!"); } return 0; }
// if语句和else语句后面的语句块中只会有一个语句块被执行
if (条件表达式)
{
语句块;
}
else
{
语句块;
}
3.2.2 示例
// 示例一 #includeint main() { int a = 1; // 因为a = 1, 所以a > 0是对的, // 故而它会进入if下面紧跟着的大括号中并执行printf()语句 // 后面的else语句中的printf()语句不会执行 if (a > 0) { printf("a比0大!"); } else { printf("a比0小!"); } return 0; }
// 示例二 #includeint 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; }
// 示例三 #includeint 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 示例
#include4. switch语句 4.1 什么是switch语句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.2 语法结构switch语句与if语句同属于分支语句,这是因为他们两有一个共同的地方——都需要判断满足才会执行特定的语句块。
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六. 循环语句 1. for循环语句 1.1 语法结构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中写入判断 break; } return 0; }
// 前两个表达式后面都有分号
// 表达式1一般是变量初始值
// 表达式2一般是变量结束的条件
// 表达式3一般是变量的变化规则, 例如: 自增(++)、自减(--) ... ...
for (表达式1; 表达式2; 表达式3)
{
循环体;
}
1.2 示例
// 示例1: 打印 1——20 #includeint 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中的所有偶数 #include2. while循环语句 2.1 语法结构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: 此题还有其它做法哦~ }
// 若条件表达式成立, 则循环体将会一直执行
// 建议仔细检查, 小心无限循环
while (条件表达式)
{
循环体;
}
2.2 示例
// 示例1: 计算1 + 2 + 3 + ... + 99 + 100的值 #includeint 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 #include3. do…while循环 3.1 语法结构#include // 因为有次方, 这里使用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; }
do
{
循环体;
}while(条件表达式); // 值得注意的是最后有个分号哦~
3.2 示例
// 示例1: 找出100——999以内的水仙花数 // Notes: 水仙花数是指一种三位数,其各个数之立方和等于该数。 // 例如: 153 = 1^3 + 5^3 + 3^3 #include3.3 while循环与do…while循环的区别#include // 因为有次方, 这里使用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; }
// 运行下面的代码, 你会发现while循环中的循环体语句不会被执行, // 而do...while循环中的循环语句被执行了 // 这是由于while属于先判断再执行, do...while属于先执行后判断 // 建议好好揣摩, 同时也建议尽量不用do...while循环 #include七. 其它语句int main() { int i = 1; while (i == 0) { printf("while循环执行了!"); } do { printf("do...while循环执行了!"); } while (i == 0); return 0; }
1. 语法结构语句有很多,比如return也是一个语句,它被称为返回语句,这里需要了解的是goto语句。
goto 标识符; 标识符: 代码块;2. 示例
// 成都有一个'时空伴随者'很火爆, 指本人的电话号码与确诊号码在同一时空网格 // (范围是800M*800M)共同停留超过10分钟,且最近14天任一方号码累计停留时 // 长超过30小时以上,则查出的号码为时空伴随号码。 // 这里我们用goto语句实现它, 当然别妄想现在就完全实现,目前只是实现它的思想, // 其实就是如果范围内有一个是红码了,那么区域内全变红码, // 所以这里就是说只要找到一个就不需要继续往下找了, 直接打印红码就行了。 #include3. 尝试int main() { // 模拟母体红码: 这里使用一串数字, 一个数字对应一个人 // 他们满足时空伴随者的条件, 且20号为红码 int i = 0 while (1) { if (i == 20) goto Spacetime; // Spacetime: 标识符, 用户自定义 i++; } Spacetime: printf("警告!全改成红码~"); return 0; }
4. 建议如果上面的示例中没有使用goto语句会发生什么呢?
goto语句能不用就不要用~
吃饭睡觉咯,头发要紧~
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)