break(中断 ) 和 continue(继续)
break:是终止所在层的循环
在C语言 的 switch(开关语句)中,break 语句还可用来在执行完一个 case(分支)后立即跳出当前 switch 结构。
在C语言 的 for(循环语句)中,执行break后立即跳出当前 for(循环)语句。
continue:表示结束本次循环,进行下一次循环,而不终止整个循环的执行。
注意:
- break可以在if-else中使用直接跳出当前循环。
- 在多层循环中, 一个break语句只向外跳一层。
- continue语句的作用是跳过循环体中剩余的语句并到循环末尾而强行执行下一次循环。
- continue语句只用在for、while、do-while等循环体中, 常与if条件语句一起使用, 用来加速循环。
switch语句
switch(条件)
{
case 1:
运行代码1;
break;
case 2:
运行代码2;
break;
default:
运行代码3;
break;
}
switch语句:
- 如果条件满足case1将会执行运行代码1语句
- 如果条件满洲case2将会执行运行代码2语句
- 如果都不满足,将执行default后面的语句运行代码3
注意:case后面break不能缺失,switch也可以嵌套switch语句
代码案例:
案例一:(没加break情况)
如果 c
等于 'A'
,则会执行此示例中的 switch
正文的所有三个语句,因为不会在以下 case
前显示 break
语句。 将执行控制转交给第一个语句 (capital_a++;
) 并继续按顺序转交给主体的其余部分。 如果 c
等于 'a'
,则 letter_a
和 total
将增加。 当 c
不等于 'A'
或 'a'
时,仅递增 total
。
switch( c )
{
case 'A':
capital_a++;
case 'a':
letter_a++;
default :
total++;
}
案例二:(加break情况)
在此示例中,break
语句跟在 switch
正文的每个语句的后面。 在执行一个语句后,break
语句将强制从语句正文中退出 。
如果 i
等于 -1,则仅 n
将增加。 n++;
语句后面的 break
会导致执行控制传递出语句正文,并绕过剩余语句。
同样,如果 i
等于 0,则仅 z
将增加;如果 i
等于 1,则仅 p
将增加。
switch( i )
{
case -1:
n++;
break;
case 0 :
z++;
break;
case 1 :
p++;
break;
}
案例三:
输入数字1-7,显示对应的星期的英文
switch(nWeek)
{
case 1:
{
printf("mon");
break;
}
case 2:
{
printf("tue");
break;
}
case 3:
{
printf("wed");
break;
}
case 4:
{
printf("thu");
break;
}
case 5:
{
printf("sat");
break;
}
case 6:
{
printf("fri");
break;
}
case 7:
{
printf("sun");
break;
}
default:
{
printf("none");
break;
}
}
三目运行符
条件b ? 结果1 : 结果2
说明:
对于条件表达式b ? x : y,*先计算条件b,然后进行判断。如果b的值为true,计算x的值,运算结果为x的值;否则,计算y的值,运算结果为y的值
注意:
- 一个条件表达式绝不会既计算x,又计算y。
- 条件运算符是右结合的,也就是说,从右向左分组计算。
int a=10;
int b=5;
int c=a>b?a:b;
//等价于
if(a>b)
{
c=a;
}
else
{
c=b;
}
函数语句:
{数据类型} {函数名}(参数列表)
参数列表:数据类型 变量名,数据类型 变量名,……
调用函数:函数名(形参)
函数作用:
重用代码
分类:
- 入口函数
- 库函数
- 用户自定义函数
- ……
函数常见样式
- 无参无返
- 有参无返
- 无参有返
- 有参有返
//1、无参无返
void test01()
{
printf(""this is test01"") ;
}
//2、有参无返
void test02(int a) {
printf(""this is test02"") ;
}
//3、无参有返
int test03() {
printf(""this is test03"") ;
return 1000;
}
//4、有参有返
int test04(int num1) {
printf(""this is test04"") ;
return num1;
}
int main()
{
test01(); //1、无参无返
test02(100); //2、有参无返
int a=test03(); //3、无参有返
int b = test04(10000);
system("pause");
return 0;
}
函数的声明:声明可以写多次,但是定义只能有一次的
函数分文件的编写:
-
头文件里面写声明,源文件里面写定义
-
调用函数时,源文件里面包含头文件
""双引号用户自定义函数
<>是c语言的库函数
代码案例:
案例一:
/*
27.求100之内的素数
*/
void primeNumber(int n)
{
int i = 0;
int j = 0;
printf("%d之内的素数:1 ",n);
for (i = 1; i < n; i++){
for (j = 2; j < i; j++){
if (i % j == 0){
break;
}
}
if (i == j){
printf(" %d ", i);
}
}
}
int main()
{
printf("请输入数字:");
int n;
scanf_s("%d", &n);
primeNumber(n);
system("pause");
return 0;
}
案例二:
#include<stdio.h>
/*
30.编写程序将一个输入的十进制数转换成一个二进制数,并且显示
1234 1000->1 234
234 100 ->2 34
34 10 ->3 4
4 1 ->4 0
0
*/
void DecimalToBinary(int nNumber)
{
int nMax = 0x80000000;//2147483648
int i = 0;
while (i < sizeof(nNumber) * 8)
{
printf("%d", nNumber / nMax);
nNumber = nNumber % nMax;
nMax = nMax / 2;
i++;
}
}
int main()
{
//2.转成二进制
int nNumber = 0;
printf("请输入一个数字:");
scanf("%d", &nNumber);
DecimalToBinary(nNumber);
return 0;
}
递归函数
递归就是一个函数在它的函数体内调用它自身。执行递归函数将反复调用其自身,每调用一次就进入新的一层。递归函数必须有结束条件。
当函数在一直递推,直到遇到墙后返回,这个墙就是结束条件。
递归两个要素:
- 结束条件
- 与递推关系
注:
递归的时候,每次调用一个函数,计算机都会为这个函数分配新的空间,这就是说,当被调函数返回的时候,调用函数中的变量依然会保持原先的值,否则也不可能实现反向输出。
代码案例:
案例一:利用递归算阶乘
#include <stdio.h>
int factorial(int n)
{
if(n==1)
{
return 1; //结束条件
}
return n*factorial(n-1);
}
int main(){
int n = 5; //输入数字5,计算5的阶乘
printf("%d的阶乘=%d",n,factorial(n));
return 0;
}
案例二:利用递归求斐波那契数列
1, 1, 2, 3, 5, 8, 13, 21, ···
#include <stdio.h>
long long fibonacci( long long num )
{
if ( num==2 || num == 1 )
{
return num;
}
return fibonacci( num -1 ) + fibonacci( num -2 );
}
void main()
{
long long number;
puts("请输入一个正整数: ");
scanf("%lld", &number);
printf("斐波那契数列第%lld项为: %lld\n", number, fibonacci( number ) );
}