一、什么是语句
可以分为五类:
1.表达式语句 例如表达式(2+3)
2.函数调用语句 例如调用函数Add(2,4)
3.控制语句 (用来控制程序的执行流程,以实现程序的各种结构方式) 控制语句又分为三种
分别是:
条件判断语句(分支语句) if语句 switch语句
循环执行语句 do while语句 for语句 while语句
转向语句 break语句 goto语句 continue语句 return 语句
4.复合语句
5.空语句 例如(;)
二、if语句
1.if语句的使用
代码举例:这是if的一般使用方法判断表达式为真还是假,为真执行语句1,为假执行else 后面的语句2 需要我们注意的是,C语言默认if语句只能控制一条语句,如果要控制多行语句需用{}.else也是同理
if(表达式) if(表达式) if(表达式)
语句; 语句1; 语句1;
eles else if(表达式2)
语句2; 语句2;
else
语句3;
2.悬空else
代码如下(示例):
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1) //(1==a)
if(b == 2) //if(2==b)
printf("hehe\n");
else
printf("haha\n");
return 0;
}
这里运行结果为无输出,因为else会跟最近的if进行匹配,只是单纯的对齐不会起作用,所以这里的else是和if(b==2) 匹配,a不满足时就不会再运行。
这里给大家一个代码书写的建议,用于判断一个数的值,这里把(b==2)改为(2==b),因为如果这里少打了一个=,第一种依然可以运行不会报错,代码二就可会体术报错,这样可以减少代码的错误。
二、switch语句
举例:
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d",&day);
switch(day) 注意:这里的day表达式必须为整形表达式
{
case 1: 注意:case后也必须为整形常量表达式
printf("星期一\n");
break; (终止语句)
case 2:
printf("星期二\n");
break;
case 3:
printf("星期三\n");
break;
case 4:
printf("星期四\n");
break;
case 5:
printf("星期五\n");
break;
case 6:
printf("星期六\n");
break;
case 7:
printf("星期天\n");
break;
default: (default意为默认的,case所有都不满足执行default后的语句,一个循环只能有一个)
printf(”输入错误“);
break;
}
return 0;
}
switch语句也为分支语句,适用于多分支的情况
这里也要注意一点,switch语句中表达式只会决定从那个case开始执行,如果没有遇到终止语句会一直执行下去,这里用到break 意为终止循环,还有continue为终止本次循环
2.switch支持嵌套使用
switch支持嵌套使用
#include <stdio.h>
int main()
{
int n = 1;
int m = 2;
switch (n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch (n)
{//switch允许嵌套使用
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break;
}
printf("m = %d, n = %d\n", m, n); //运行结果为m=5 n=3
return 0;
}
三、while语句
whiile(表达式)
循环语句;
//举例
#include <stdio.h>
int main()
{
int i = 1;
while(i<=10)
{
printf("%d ", i); //遇到break直接结束循环
i = i+1; //遇到contiune跳出本次循环
}
return 0;
}
while为循环语句判断()中的表达式是否为真 ,为真执行下面的循环语句,为假跳出循环
只要在while循环中遇到break,就停止后面的循环直接跳出循环
遇到contiune只是终止本次循环,本次contiune后面的语句不再执行,直接跳到判断部分,进行下一次循环
2.使用举例
#include <stdio.h>//多组输入输出
int main()
{
int ch = 0; //为int型,接收的字符用acall码存储为int型
while ((ch = getchar()) != EOF) //ctrl+z终止 //EOF本质为-1 //EOF 为文件结束标志
putchar(ch);
return 0;
}
getchar()用来获取字符的一次接收一个字符,使用putchar输出
#include<stdio.h>
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);
//清理\n
while (getchar() != '\n') //可以清理回车和回车之前的所有字符
{
;
}
printf("请确认密码(Y/N):");
int ch = getchar(); //getchar和scanf都是从输入缓冲区取得内容,两者不同,scanf不会拿走回车\n,第一次输入时会遗留下回车\n,当getchar运行时会直接拿走\n回车,使得后面功能失去作用。
if (ch == 'Y')
{
printf("确认成功\n");
}
else
{
printf("确认失败\n");
}
return 0;
}
四、for语句
for(表达式1;表达式2;表达式3) //表达式1为初始化部分,表达式2为条件判断部分,表达式3为调整部分
循环语句;
int main()
{
int i = 0;
//for(i=1/*初始化*/; i<=10/*判断部分*/; i++/*调整部分*/)
for(i=1; i<=10; i++)
{
printf("%d ", i);
}
return 0;
}
//1. 不可在for 循环体内修改循环变量,防止 for 循环失去控制。
//2. 建议for语句的循环控制变量的取值采用“前闭后开区间”写法。
for语句中是可以省略三个部分的,当省略三个部分就恒为真
#include <stdio.h>
int main()
{
for(;;)
{
printf("hehe\n");
}
//for循环中的初始化部分,判断部分,调整部分是可以省略的,省略后就意味着恒为真
int i = 0;
int j = 0;
//如果省略掉初始化部分,这里打印多少个hehe?
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}