目录
一、循环语法
1.while循环
写法1:
while(表达式)
{
//语句组
}
写法2:
while(表达式); //其中的表达式可以是数值、运算语句、比较语句等
例如
while(1); //死循环
while(a++); //运算语句
while(a++>3); //运算+比较
执行逻辑:先判断表达式是否成立,成立则执行具体语句组
(一般情况下‘;’和‘{}’属于互斥状态)
2.for循环
写法:
for(表达式1;表达式2;表达式3;)
{
//语句组
}
表达式1:赋值表达式,用来对参与循环的变量进行赋值
表达式2:循环条件表达式,用来判断循环是否能够执行
表达式3:算术表达式,用来改变参与循环判断的变量
(for循环中所有表达式都可以被省略,但是内部的三个分号不行)
例如以下四种写法
int i;
for(i = 0;i < 5;i++)
{
printf("i = %d\t",i);
}
printf("\n");
//循环执行5次
i = 0;
for(;i < 5;i++)
{
printf("i = %d\t",i);
}
printf("\n");
//省略了赋值表达式,循环执行5次
for(i = 0;;i++)
{
printf("i = %d\t",i);
if(i == 4)
break;
}
printf("\n");
//省略了条件表达式,循环执行5次
for(i = 0;i < 5;)
{
printf("i = %d\t",i++);
}
printf("\n");
//省略了算术表达式,循环执行5次
3.do while循环
写法
do
{
//语句组
}while(表达式);
执行逻辑:先执行语句组,在判断循环是否成立
a = 3;
do
{
printf("a = %d\n",a);
}while(a-->1);
//循环了三次
二、分支语法(通常会配置比较运算符使用)
1.单分支
if(表达式)
{
//语句组
}
执行逻辑:如果表达式成立,那么执行语句组,否则跳过语句组
int a = -5;
int b = 6;
if(a < b) //如果a<b输出下面的语句,反则跳过该句
{
printf("a<b\n");
}
if(a)
{
printf("a = %d\n",a);
}
2.双分支
if(表达式1)
{
//语句组1
}
else
{
//语句组2
}
执行逻辑:如果表达式1成立,那么执行语句组1,反则跳过语句组1执行语句组2
if(a)
{
printf("a = %d\n",a);
}
else
{
printf("b = %d\n",b);
}
3.多分支
if(表达式1)
{
//语句组1
}
else if(表达式2)
{
//语句组2
}
...
else
{
//语句组n
}
其中每个if匹配后面最近未匹配的else
break和continue用在循环中
break的作用是直接退出循环
continue的作用是跳过本次循环,执行下一次循环
(注意break语句可以用在switch语句中,但continue不行)
#include<stdio.h>
int main()
{
int i;
for(i = 0;i < 4;i++)
{
if(i == 2)
{
break; //直接退出循环
}
printf("break:i = %d\n",i);
}
for(i = 0;i < 4;i++0
{
if(i ==2)
{
continue;
//跳过本次循环,执行下一次循环。注意i++还是有执行
}
printf("continue:i = %d\n",i);
}
return 0;
}
三、条件语法
1.switch语句
写法
switch(表达式)
{
case常量:
//语句组1
default:
//语句组2
}
常量:无法修改的数据(系统内部)
变量:可以随意修改的数据(由程序员定义)
表达式:只能是整型常量表达式
(整型数据、字符型、枚举型)
其中字符类型因为字符在计算机中按照ASCII码来储存
执行逻辑:与if-else类似,根据常量的数值来执行相应的语句
#include<stdio.h>
int main()
{
int num
scanf("%d",&num);
switch(num)
{
case 0:
printf("num == 0\n");
break;
default:
printf("num != 0\n");
break;
}
//此处一共输出一次打印
switch(num)
{
case 0:
printf("num == 0\n");
default:
printf("num != 0\n");
}
//此处输出两次打印
return 0;
}
//上述switch相当于if-else语句
if(num == 常量)
{
//语句组1
}
else
{
//语句组2
}
注意一般来说case语句需要配合break语句使用,如果没有break语句程序会一直往下运行 直到遇到break语句或者结束switch语句
例如从键盘中输入字符数据,然后输出相应的ASCII码数值,遇到‘#’退出循环:
#include<stdio.h>
int main()
{
char str;
int flag = 0;
while(1)
{
scanf("%c",&str);
//getchar(); 此语句可以将缓冲区\n清除,或在下面用case语句跳过
switch(str)
{
case'#':
printf("遇到#,退出程序\n");
flag = 1; //此处为转变标志位
break;
case'\n': //因为空格\n会占字符,所以跳过\n
break; //也可以在scanf语句下面添加getchar()
default:
printf("%c对应的ASCII码数值为:%d\n",str,(int)str);
printf("请输入一个字符:\n");
break;
}
if(flag == 1) //此处判断是否遇到‘#’,如果遇到,那么标志位变为1
{
break;
}
}
return 0;
}
如果需要用case来表示取值范围,需要有空格
错误示范:case 0...8:
正确示范:case 0 ...8:
四、goto语法
写法
goto 标签名;
标签名:
语句组;
作用:用于语句的跳转,但注意该语句容易破坏程序逻辑性,常用于系统内核开发
#include<stdio.h>
int main()
{
goto exam; //开始进行语句跳转
return 0;
exam: //标签名
printf("语句\n");
}