一、九大控制流 --- 控制流语句
基本总览
1)if
2) for
3) while
4) do .. while
5) return
6) goto
7) break
8) continue
9) switch case
1)if 条件判断语句
1)
if(判断表达式) 执行语句(只能有一句);
或者
if(判断表达式)
{
执行语句(语句1);
执行语句(语句2); // { } 内可以执行多句。
}
2)
if(判断表达式) 执行语句(只能有一句);
else 执行语句(只能有一句) ;
或者
if(判断表达式);
{
执行代码段 ;
}else
{
执行代码段;
}
3)
if(判断表达式)
{
执行代码段 ;
}
else if(判断表达式)
{执行代码段;
}
...
... //可以一直 else if 下去
else if(判断表达式)
{
执行代码段 ;
}
else //最后以 else 结尾
{
执行代码段 ;
}
例子 ① 键盘输入一个数,判断这个数是不是偶数,如果是则打印他是偶数
① if判断
#include <stdio.h>
int main()
{
int data_int;
printf("请输入一个数");
scanf("%d",&data_int);
if(data_int % 2 == 0)
{
printf("该数为偶数!\n");
}
return 0;
}
② if 和 else组合
#include <stdio.h>
int main()
{
int data_int;
printf("请输入一个数");
scanf("%d",&data_int);
if(data_int % 2 == 0)
{
printf("该数为偶数!\n");
}
else
{
printf("该数不是偶数!\n");
}
return 0;
}
例子 ② 键盘输入一个字符,判断这个字符是大写的,还是小写的,还是不是字母
#include <stdio.h>
int main()
{
char data_c;
printf("请输入一个字符");
scanf("%c",&data_c);
if(data_c >= 'A' && data_c <= 'Z')
{
printf("是大写字母\n");
}
else if(data_c >= 'a' && data_c <= 'z')
{
printf("是小写字母\n");
}
else
{
printf("不是字母\n");
}
return 0;
}
补充:逗号表达式
int a=0;
int b;
int c;
if(c=2,b=a) //从右向左计算,看b的值,b为零则为假,否则为真进入
{
printf("dadada\n");
}
2)for -- 循环语句
for的写法
执行语句1:初始化一个变量
执行语句2:用初始化好的变量计算循环次数
条件判断语句:判断能不能进行循环,如果不成立则直接跳出循环
for(执行语句1;条件判断语句 ; 执行语句2)
{
循环的代码段
}
// 执行语句2一般用来改变计算循环次数的变量的值:递增 或者 递减
3) while
写法:
1)
while(条件判断)
{
循环语句代码段
}
2)
while(条件判断) 循环语句(只能一句)
3)
while(1); //相等于 for(;;); 这是死循环
4)do...while
特点:至少循环一次 (先循环之后再判断)
写法
1)
do
{
循环语句代码段
}while(1);
do 循环语句代码行(只能一行) while(1);
5) return
专门给函数用的,所以只能写在函数里面 --- 没有函数就没有return
1)
return 不能写在函数外面! 不管return写在函数的内部的哪个位置,只要被执行到函数就无条件结束该函数
return 可以 跟一个返回值,返回值可以是基本类型常量也可以是基本类型变量.
void main()
{
int a=110;
char b='s';
printf("hello\n");
return b;
printf("world\n"); //
}
如果你的函数不想要返回值,那么函数的返回值类型可以写成void(无类型). 返回值和返回值类型要一致 return后面可以加表达式:return a>b?a:b; 或者 return a+b;
return只能返回一个数据值或者一个变量 0 -1 函数的返回值可以用来表示函数的调用情况 (使用情况:正常 不正常 还有很多自定义情况)
所以函数中的retuen一般返回0,然后写在函数的最后面。在系统中,早就已经默认返回0表示函数正常使用。-1:异常调用
return返回值的自定义
#include <stdio.h>
int Fun() //这个函数已经是一个具有功能的接口(API)
{
int int_data;
printf("请输入这个数:");
scanf("%d",&int_data);
if(int_data % 2 == 0)
{
return 9999;
}
else
{
return 7777;
}
}
int main()
{
int return_value = Fun(); //函数结束的时候,该函数的调用语句就是其返回值 if(return_value == 9999)
{
printf("该数是偶数!\n");
}
if(return_value == 7777)
{
printf("该数是奇数!\n");
}
}
6)goto
(无条件跳转语句)
int fun()
{
}
int main()
{
int flag = 0; //0"不跳 1:跳"
// 先定义标签才能跳转
loop:
printf("-----\n");
flag = 1;
if(flag == 1) //一般会先进行条件判断,条件满足之后才跳转
goto loop; //会跳到loop:执行,到这里又进入loop:就死循环了
goto loop_2;//会跳到loop_2:执行,也就是跳过了printf("+++++");
printf("+++++");
loop_2:
printf("----\n");
goto loop;
return 0;
}
使用goto要注意:
goto的标签的作用域里面不能定义变量,只添加逻辑简单不涉及复杂和内存操作的代码 一般需要进行条件判断才用goto
goto可以定义多个,但是建议goto使用在小规模的代码中
goto不能夸函数跳 goto语句标签不能定义在函数外面,避免goto造成死循环,也就是说goto要有次数限制
7)break
break跳出循环
break:跳出当前循环结构,一定要和循环结构或者switch搭配才能用,一般在条件成立的时候使用
8)continue
continue:结束本次循环,进入下一次循环,,一定要和循环结构
循环次数有很多次,执行到continue的时候会直接取消本次循环,直接进入下一次循环
9)switch case 条件分支语句
注意:switch case 常和 break 和 while搭配(多次条件判断)
基本写法:轮询机制 --- 软件上位机
while(1)
{
int a = 0;
scanf("%d",&a);
switch(a) // a常量表达式,只能整形或者字符型
{
case 1 :执行语句;break;
case 2 :执行语句;break;
case 3 :执行语句;break;
case 4 :执行语句;break;
case 5 :执行语句;break;
case 6 :执行语句;break;
case 7 :执行语句;break;
case 8 :执行语句;break;
...
default: 执行语句;break;
}
}
ps:关于printf的输出特点:
printf默认是行缓冲机制输出的。
遇到换行符才显示输出。
要不等待程序退出才显示,要不等待标准输出缓存区满才输出
加\n就会正常输出, 如果不加\n: 要不就等到缓存区满了才输出 要不就等到程序退出的时候才输出,因为程序退出的时候会自动刷新标准输出缓存区 要不和scanf搭配也可以输出
自己刷新缓存区
关于 scanf 和 getchar 的特点:
就是返回接收的有效数据的个数,如果你输入的数据的类型不是 scanf 想要的他就不理不接受
这个数据
getchar()
一般用来清理键盘输入的数据中的回车(\n)
一般写做
while( getchar( ) != ' \n ' ) ;