- 分支语句
- if
- switch
- 循环语句
- while
- for
- do while
- goto语句
什么是语句
C语言中由一个分号 ; 隔开的就是一个语句. 如:
printf("hh");
1+2;
分支语句(选择结构)
if 语句
语法结构
单分支
if(表达式)
语句;
双分支
if(表达式)
语句1;
else
语句2;
多分支
if(表达式)
语句1;
else if(表达式2)
语句2;
else
语句3;
多级分支
if(表达式)
语句1;
else
{
if(表达式2)
语句2;
else
语句3;
}
#include <stdio.h>
int main()
{
int age = 10;
if(age < 10)
printf("未成年\n");
else if(age>=18 && age<28); //(18<=age<28)是错误表达
printf("青年\n");
else if(age>=28 && age<50);
printf("壮年\n") ;
else if(age>=50 && age<90);
printf("老年\n");
else
printf("老老年\n") ;
return 0;
}
执行多条语句
if (表达式)
{
语句1;
语句2;
}
#include <stdio.h>
int main()
{
int age = 10;
if(age < 10)
//printf("未成年\n");
//printf("不能谈恋爱\n") 执行多条语句是用代码块{ }
{
printf("未成年\n");
printf("不能谈恋爱\n");
}
return 0;
}
else的悬顶结构
if 1...
if 2...
语句;
else
语句; //此 else 会与 if 2匹配
if 1...
{
if 2...
语句;
}
else //此 else 会与 if 1 匹配
语句;
if 语句写法
/ / 代码 1
if (condition)
{
return x;
}
return y;
/ / 代码 2
if (condition)
{
return x;
}
else
{
return y;
}
/ / 代码 3
#include <stdio.h>
int main()
{
int num = 4;
if(num=5)
printf("hh"); //错误 '='(赋值) 与 '=='判断 不同,但编译器不报错
int num = 4;
if(5==num) //即使'5=num'编译器会 报错
printf("hh")
return 0;
}
switch语句
switch语句也是一种分支语句,常常用于多分支情况。
语法结构
switch(整型表达式)
{
语句项;
}
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day) //整型表达式,前面day类型必须为整型
{
case 1: //从case进入代码块
printf("星期一\n") ;
break; //从break出
case 2:
printf("星期二\n") ;
break;
case 3:
printf("星期三\n") ;
break;
case 4:
printf("星期四\n") ;
break;
}
return 0;
}
语句项
即一些case语句
case 整型常量表达式 :
语句;
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day)
{
case 1:
case 2: //空,跳
case 3:
case 4:
case 5:
printf("工作日\n");
break
default: //处理异常情况
printf("输入错误\n");
break;
}
return 0;
}
循环语句
while循环
continue
#include <stdio.h>
int main()
{
int i = 1;
while(i<=5)
{
if(i==5)
continue; //跳出本次循环
printf("%d",i)
i++; //死循环
}
return 0;
}
getchar 与 putchar
#include <stdio.h>
int main()
{
int ch = getchar();
putchar(ch);
printf("%c\n",ch);
return 0;
}
#include <stdio.h>
int main()
{
int ch = 0;
while( (ch = getchar()) !=EOF ) //输入EOF时不会停止,分别识别'E','O','F' != "EOF"
{ //"EOF" -> end of file -> -1
putchar(ch);
} //ctrl + z 停止
return 0;
}
#include <stdio.h>
int main()
{
int ret = 0;
ch=0;
char password[20]={0};
printf("输入密码:");
scanf("%s",password);
while( ( ch=getchar() )!='\n' ) //接受\n
{
;
}
printf("请确认");
ret =getchar();
if(ret=='Y')
printf("ok");
else
printf("ok");
return 0;
}
C语言中getchar()函数的详解_getchar()的功能-CSDN博客
练习
求两个数的最大公约数
辗转相除法
#include <stdio.h>
int main()
{
int m = 24;
int n = 18;
int r;
scanf("%d%d",&m,&n);
while(r=m%n)
{
r=m%n;
m=n; //
n=r;
}
printf("%d",n);
return 0;
}
for循环
语法
for (表达式1,表达式2,表达式3)
循环语句;
表达式1 为初始化部分,用于初始化循环变量.
表达式2 为条件判断部分,用于判断循环是否终止.
表达式3 为调整部分,用于循环条件的调整.
#include <stdio.h>
int main()
{
int i = 0;
for(i = 0;i<10;i++) //最好i<10,而不是i<=9(10次打印)
{
printf("%d",i);
}
return 0;
}
变种
#include <stdio.h>
int main()
{
for(;;) //判断部分被省略表示恒为真(死循环)
{
printf("hh");
}
int i = 0;
int j = 0;
for (;i<10;i++)
{
for(;j<10;j++)
{
printf("hehe")
}
} //最终打印10次hehe,j没有初始化
return 0;
}
do...while循环
语法
do
循环;
while(表达式);
执行流程
#include <stdio.h>
int main()
{
int i =1;
do
{
printf("%d",i);
i++;
}
while(i<10);
return 0;
}
goto语句
不建议使用
#include <stdio.h>
int main()
{
again:
printf("hello");
goto again;
return 0;
}
关机程序
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
char input[20] = { 0 };
system("shutdown -s -t 60"); //system--执行系统命令;shutdow 关机
again:
printf("即将关机\n:");
scanf("%s", input);
if (strcmp(input, "我是猪") == 0)
{
system("shutdown -a");
}
else
{
goto again;
}
return 0;
}...shell:startup