了
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
提示:C语言-分支、循环语句:
例如:分支:if、switch
循环:do while、while、for
提示:以下是本篇文章正文内容,下面案例可供参考
1.分支语句是什么?
示例:分支就像生活中的选择,假期我可以选择做的两件事。
1.1 if语句
那if语句的语法结构是什么样的呢?
语句表达式:
结构1、
if(表达式)
语句;
结构2、
if(表达式)
语句1;
else
语句2;
结构3(多分支)、
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
代码演示如下:
//代码1
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年");
}
return 0;
}
//代码2
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
}
else
{
printf("成年\n");
}
return 0;
}
//代码3
#include <stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("未成年\n");
}
else if(age>18 && age<50)
{
printf("成年\n");
}
else
{
printf("老年\n");
}
return 0;
}
解释下如果表达式为真,则语句执行。
在C语言中如何表示真假?
0表示假,非0表示真
如果条件成立,要执行多条语句,怎样使用代码块。
#include <stdio.h>
int main()
{
if(表达式1)
{
语句1;
}
else(表达式2)
{
语句2;
}
return 0;
}
这里的一 对 { } 就是 一 个代码块。
1.1.1 悬空else
当你写了这个代码:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
看起来是打印-haha,但是它什么都不会打印。
else的匹配:else是和它离的最近的if匹配。
改正:
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
{
printf("hehe\n");
}
}
else
{
printf("haha\n");
}
return 0;
}
1.1.2 if书写形式的对比
//代码1
if (condition) {
return x;
}
return y;
//代码2
if (condition)
{
return x;
}
else
{
return y;
}
//代码3
int num = 1;
if (num == 5)
{
printf("hehe\n");
}
//代码4
int num = 1;
if (5 == num)
{
printf("hehe\n");
}
}
代码2和代码4更好,逻辑更清晰,不容易出错。
1.1.3 练习,自己尝试做下,做不出来也没关系。(我博客里面有答案和解析)
1、判断一个数是否为奇数
2、判断1-100之间的奇数
1.2 swich语句
switch语句是一种多分支语句。
常常用于多分支的情况。
比如:
输入-1,输出-星期1
输入-2,输出-星期2
输入-3,输出-星期3
输入-4,输出-星期4
输入-5,输出-星期5
输入-6,输出-星期6
输入-7,输出-星期7
如果我写成if…else if…else if的形式太复杂,那我们就得有不一样的语法形式。
这就是switch语句。
switch(整形表达式)
{
语句项;
}
而语句项是什么呢?
是一些case语句:
如下:
case 整形常量表达式:
语句;
1.2.1 在switch语句中的break
在switch语句中我们没办法实现分支,得搭配break使用才能实现分支。
比如:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
printf("星期1\n");
break;
case 2:
printf("星期2\n");
break;
case 3:
printf("星期3\n");
break;
case 4:
printf("星期4");
break;
case 5:
printf("星期5");
break;
case 6:
printf("星期6");
break;
case 7:
printf("星期7");
break;
}
return 0;
}
但有时候,我们的需求变了:
例如:
1、输入1-5,输出"weekday";
2、输入6-7,输出"weekend";
所以我们的代码就该这样实现了:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
switch (day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("weekday\n");
break;
case 6:
case 7:
printf("weekend\n");
break;
}
return 0;
}
break语句 的实际效果是把语句列表划分为不同的分支部分(白话 :遇到break就停止,没遇到就继续向下执行)。
编程好习惯
在最后一个case 语句的后面加上一条break语句。
(之所以这么写是可以避免,在最后一个case语句后面忘添加了break语句)。
1.2.3 练习
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d,n = %d\n", m, n);
return 0;
}
2.循环语句
- while
- for
- do while
我们已经掌握了,if语句;
if(条件)
(语句);
当条件按满足,语句执行,否则不执行。
但是这个语句只会执行一次。
但是我们发现生活中的很多例子是:同一件是我们需要不断的完成很多次。那我们怎么怎么做呢?
C语言就帮我们引入了:while语句,它:可以实现循环。
while 语法结构
while(表达式)
(循环语句);
while语句执行的流程:
比如我们实现:
在屏幕上打印1-10的数字。
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
printf("%d ", i);
i = i + 1;
}
return 0;
}
上面的代码已经帮我了解了while语句的基本语法,那我们在了解下:
2.1.1 while语句中的break和continue
break 介绍以及代码实列:
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
break;
}
printf("%d ", i);
i = i + 1;
}
return 0;
}
猜下这里的代码输出结果是什么?
- A、 1 2 3 4
- B、 1 2 3 4 5
- C、1 2 3 4 5 6 7 8 9 10
- D、1 2 3 4 6 7 8 9 10
(答案A)
总结:
break在while循环中的作用:
其实在循环圈中只要遇到break了,就停止后期的所有循环。也就是直接终止循环。
所以while循环中的break是用于永久终止循环的。
continue介绍
continue 代码实例1
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
if (i == 5)
{
continue;
}
printf("%d ", i);
i = i + 1;
}
return 0;
}
猜下这里代码输出结果是什么?
- A. 1 2 3 4
- B. 1 2 3 4 5
- C. 1 2 3 4 5 6 7 8 9 10
- D. 1 2 3 4 6 7 8 9 10
答案:A
continue 代码示例2
#include <stdio.h>
int main()
{
int i = 1;
while (i <= 10)
{
i = i + 1;
if (i == 5)
{
continue;
}
printf("%d ", i);
}
return 0;
}
这里代码输出结果是什么?
- A. 1 2 3 4
- B. 1 2 3 4 5
- C. 1 2 3 4 5 6 7 8 9 10
- D. 1 2 3 4 6 7 8 9 10
- E. 2 3 4 5 6 7 8 9 10 11
答案:E
总结:
continue在while循环中的作用是:
代码演示1:
#include "stdio.h"
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
putchar(ch);
}
return 0;
}
代码演示2:
#include <stdio.h>
int main()
{
int ch = '0';
while((ch = getchar()) != EOF)
{
if (ch < '0' || ch > '9')
{
continue;
}
putchar(ch);
}
return 0;
}
//这个代码的作用是只打印数字字符,跳过其他字符。
continue是用于终止本次循环的,也就是本次循环中continue后边的代码不会再执行,
而是直接跳到while循环的判断部分。再进行下一次循环入口的判断。
2.2 for循环
我们已经知道了while循环,但是我们为什么还需要一个for循环呢?
首先来看看for循环的语法:
2.2.1 语法
for(表达式1;表达式2;表达式3)
循环语句;
表达式1
表达式1为__初始化部分__,用于初始化循环变量的。
表达式2
表达式2为__条件判断部分__,用于判断循环时条件的终止。
表达式3
表达式3为__调整部分__,用于循环条件的调整。
实际问题:
<用for循环,在屏幕上打印1 - 10的数字。
#include <stdio.h>
int main()
{
int i = 0;
//for(i = 1/*初始化*/;i < 10/*判断部分*/; i++/*调整部分)*/
for(i = 1; i <= 10; i++)
{
printf("%d ", i);
}
return 0;
}
for循环的执行流程图:
现在我们对比一下for循环和while循环。
#include <stdio.h>
int main()
{
int i = 0;
//实现相同的功能,使用while
i = 1;//初始化部分
while (i <= 10)//判断部分
{
printf("hehe\n");
i = i + 1;//调整部分
}
//实现相同的功能使用for
for (i = 1; i <= 10; i++)
{
printf("hehe\n");
}
return 0;
}
可以发现在while循环中一让存在循环循环的3个必须条件,但是由于风格的文题使得三个部分很可能偏远,这样查找修改加不够集中和方便。
所以,for循环的风格更胜一筹;for循环使用的频率也最高。
2.2.2 break和continue在for循环中
我们发现在for循环中也可以出现break和continue,他们的意义在哥while循环中是一样的。
但是还是有些差异:
//代码1-break
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
{
break;
}
printf("%d ", i);
}
return 0;
}
//代码2-continue
#include <stdio.h>
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
{
continue;
}
printf("%d ", i);
}
return 0;
}
2.2.3 for语句的循环控制变量
建议:
1.不可在for循环体内修改循环变量,防止for循环失去控制。
2.建议for语句的循环控制变量的取值采取“前闭后开区间”写法。
//代码2-continue
int i = 0;
//前闭后开的写法
for (i = 0; i < 10; i++)
{ }
//两边都是闭区间
for(i = 0;i <=9;i++)
{ }
}
2.2.4 一些for循环的变种
#include <stdio.h>
int main()
{
//代码1
for (;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,但是不建议初学时省略,容易导致问题。
//代码2
int i = 0;
int j = 0;
//这里打印了多少hehe?
for (i = 0; i < 10; i++)
{
for (j = 0; j < 10; j++)
{
printf("hehe\n");
}
}
//代码3
int i = 0;
int j = 0;
//如果省略吊初始化部分,这里打印了多少个hehe?
for (; i < 10; i++)
{
for (; j < 10; j++)
{
printf("hehe\n");
}
}
//代码4-使用多余一个变量控制循环
int x, y;
for (x = 0, y = 0; x < 2 && y < 5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
2.2.5 一道笔试题:
//请问循环要循环多少次?
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for (i = 0, i = 0; k = 0; i++, k++)
{
k++;
}
return 0;
}
答案:0次,注意看判断部分是=(赋值),不是比较。
3.3 do…while()循环
3.2.1 do语句的语法:
do
循环语句;
while(表达式);
3.3.2执行流程
3.3.3 do语句的特点
循环至少执行一次,使用的场景有限,所以不经常使用。
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
3.3.4do while循环中的break和continue
break
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
{
break;
}
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
//continue
#include <stdio.h>
int main()
{
int i = 1;
do
{
if (5 == i)
{
continue;
}
printf("%d ", i);
i = i + 1;
} while (i <= 10);
return 0;
}
3.4 练习
- 计算 n的阶乘。
- 计算 1!+2!+3!+…10!
- 在一个数组中查找具体的某个数字n。(讲解二分查找)
- 编写代码,演示多个字符从两端移动,像中间汇聚。
- 编写代码实现,模拟用户登录情景,并且只能登陆三次。(只允许输入三次密码,如果密码正确则提示登陆成功,如果三次均输入失败,则退出程序。
总结
提示:这里对文章进行总结:
以上就是今天要讲的内容,本文仅仅简单介绍了分支与循环语句的使用。