目录
//只需三种结构的组合就可以解决一切问题
(所有程序只需要三种结构就可以将她设计出来)
三种结构分别是:
顺序(代码默认从主函数开始从上往下顺序执行)
选择(判断真假,选择一个执行)
循环(重复执行同一位代码)
控制语句
条件判断语句
1、单分支
if(表达式)
{
语句块;
}
逻辑:如果表达式为真,执行语句块,为假就不执行;
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
if (10 == a)
{
printf("你好世界\n");
}
printf("hello world\n");
return 0;
}
hq
结果:单分支只能控制if里面的语句块
2、双分支
if(表达式)
{
语句块1;
}
else
{
语句块2;
}
逻辑:如果表达式为真,执行语句块1,为假执行语句块2;
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 10;
if (10 == a)
{
printf("你好世界\n");
}
else
{
printf("hello world\n");
}
return 0;
}
结果:双分支就能控制if里面的语句块和else里面的语句块,选择执行哪一个;
3、多分支
if(表达式1)
{
语句块1;
}
else if(表达式2)
{
语句块2;
}
....... //else if 可以有多个
else
{
语句块3;
}
逻辑:如果表达式1为真,执行语句块1,如果表达式1为假,判断表达式2,如果表达式2为真,执行语句块2,如果为假执行语句块3;
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 11;
if (10 == a)
{
printf("你好世界\n");
}
else if (10 < a)
{
printf("hello world\n");
}
else if (10 > a)
{
printf("你好\n");
}
else
{
printf("hello");
}
return 0;
}
结果:
4、嵌套判断
if(表达式1)
{
if(表达式2)
{
语句块1;
}
else
{
语句块2;
}
}
else
{
语句块3;
}
逻辑:如果表达式1为真,判断表达式2,表达式2为真,执行语句块1,表达式2为假,执行语句块2,如果表达式1为假,执行语句块3;
//注意:
1、{ }的省略,只有第一行是属于前面表达式的
2、else只会找离她最近的一个if
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a = 11;
if (10 < a)
{
if (10 != a)
printf("hello world\n");
else
printf("hello\n");
}
return 0;
}
结果:满足外层if才能进入内层if进行判断
循环语句
for循环
for(表达式1;表达式2;表达式3)
{
语句块;
}
逻辑:先执行表达式1(只执行一次),判断表达式2,如果表达式2为真,执行语句块,执行完语句块后执行表达式3,然后回到表达式2,重复判断表达式2的真假,为真再执行语句块和表达式3,直到表达式2为假跳出循环
//注意:
1、循环的省略:
省略表达式1,默认从0开始 //for(; i < 100; i++)
省略表达式2,变成死循环(不会结束的循环) //for(i = 0; ;i++)
省略表达式3,变成死循环 //for(i = 0; i < 100;)
可以都省略,但是不能省略分号 //for(; ;)2、{ }的省略,只有第一行是属于前面表达
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
for (i; i < 5; i++)
{
printf("hello world\n");
}
return 0;
}
结果:
循环的嵌套(任何循环,判断都能进行嵌套)
//循环里面又放一个循环
for(表达式1;表达式2;表达式3) //外层循环
{
for(表达式4;表达式5;表达式6) //内层循环
{
语句块;
}
}
逻辑:先执行表达式1(只执行一次),判断表达式2,如果表达式2为真,执行表达式4,判断表达式5,如果表达式5为真,执行语句块,执行完语句块后执行表达式6,然后回到表达式5,重复判断表达式5的真假,如果表达式5为真再执行语句块和表达式6,直到表达式5为假跳出内层循环,之后执行表达式3,然后回到表达式2,重复判断表达式2的真假,为真再执行内层循环和表达式3,直到表达式2为假跳出外层循环;
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 0; i < 5; i++)
{
for(int j = 0; j < 5;j++)
{
printf("* ");
}
putchar('\n');
}
return 0;
}
结果:
while循环
while (表达式)
{
语句块;
}
逻辑:判断表达式,为真执行语句块,然后跳到表达式重新判断真假,直到表达式为假跳出循环;
死循环:while(真),//一般写为while (1)
例如:
结果:
do while
do
{
循环体;
}
while(表达式);
逻辑:先执行循环体,再判断表达式,为真跳回循环体继续执行,为假结束循环
//注意:do while 至少会执行一次循环
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int i = 0;
while (i != 10)
{
printf("你好世界\n");
i++;
}
return 0;
}
结果:
选择语句
switch选择
switch(常量表达式)
{
case 表达式1:语句块1;break;
case 表达式2:语句块2;break;
case 表达式3:语句块3;break;
case 表达式4:语句块4;break;
case 表达式5:语句块5;break;
......
default :语句块n;
}逻辑:switch里的常量表达式如果和case后面的表达式一样时,就会执行对应case后面的语句块,直到遇见break结束switch;
//注意:
switch和case后面不能跟区间
case后面不能跟变量
switch和case后面可以跟单个字符,不能跟字符串(地址)
switch和case后面可以跟常量运算表达式
switch和case后面不能跟浮点型数据
break可以不写,但是没有break会继续执行下去
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
switch(3)
{
case 1: printf("hello");break;
case 2: printf("world");break;
case 3: printf("你");
case 4: printf("好");
case 5: printf("世");
case 6: printf("界\n");break;
default:printf("嘿嘿");
}
return 0;
}
结果:
辅助语句
跳转语句(goto)
p: //标志符
代码块;
goto p; //跳转语句
逻辑:执行完代码块后,碰到goto时,代码会跳转到goto后面所跟着的标志所在的位置开始执行
//注意:注意:可以往前跳转,也可以往后跳转,只能在所在的函数中跳转,但是标志后面第一行不能是定义语句
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
int a;
printf("请输入数字:");
p:
scanf("%d",&a);
switch(a)
{
case 1: printf("hello");break;
case 2: printf("world");break;
case 3: printf("你");
case 4: printf("好");
case 5: printf("世");
case 6: printf("界\n");break;
default:
{
printf("输入有误请重新输入");
goto p;
}
}
return 0;
}
结果:
break
结束本次循环
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 0; i < 10; i++)
{
if ( 5 == i)
{
break;
}
printf("第%d次打印\n",i);
}
return 0;
}
结果:
continue
结束本次循环,继续下一次循环
例如:
#include <stdio.h>
int main(int argc, char *argv[])
{
for (int i = 0; i < 10; i++)
{
if ( 5 == i)
{
continue;
}
printf("第%d次打印\n",i);
}
return 0;
}
结果:
return
return:结束本次函数,一般可以返回一个数据给函数的入口地址(函数名)
return 0;--正常结束
return -1;异常结束
例如:
#include <stdio.h>
int myFor(int i)
{
if (i == 0)
return -1;
else
{
for(int j = 1; j <= i; j++)
{
printf("第%d次循环打印\n",j);
}
return 1;
}
}
int main(int argc, char *argv[])
{
int i;
scanf("%d",&i);
int m = myFor(i);
if (-1 == m)
printf("错误退出\n");
else
printf("正确退出\n");
return 0;
}
结果: