C语言是一门结构化的程序设计语言。
什么是语句?
由分号;隔开的就是一条语句
分支语句(选择结构)
if语句
if(表达式)
语句;
if(表达式)
语句1;
else
语句2;
if(表达式1)
语句1;
else if(表达式2)
语句2;
else//可省略
语句3;
如果条件成立要执行多条语句,应使用代码块{ }
例1(易错):
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if(a == 1)
if(b == 2)
printf("hehe\n");
else//实际上这一行的else是与它上方最近的一个if匹配
printf("haha\n");
return 0;
}
//执行后什么也不会输出
例2(易错):
#include <stdio.h>
int main()
{
int num = 4;
if(num = 5)
{
printf("呵呵\n");
}
return 0;
}
//执行后打印出呵呵,因为if语句中是赋值(=)而非判断(==)
//建议把常量写在前面,如if(5 == num),不容易出错
switch
用于多分支的情况
switch(整型表达式)
{
语句项;
}
语句项(一些case语句)
case 整型常量表达式:
语句;
//如果不加break,将继续直接执行后面case中的语句,直到遇到break或switch整个结束
//即case是入口,break是出口
default://如果所有case都不符合,可有可无
语句;
例1:
#include <stdio.h>
int main()
{
int day = 0;//只能是整型,才能放进switch()中
scanf("%d", &day);
switch(day)//day是几就是case几
{
case 1://注意不能改成n,因为必须是常量而非变量
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;
}
return 0;
}
等价于
#include <stdio.h>
int main()
{
int day = 0;
scanf("%d", &day);
if(1 == day)
printf("星期一\n");
else if(2 == day)
printf("星期二\n");
else if(3 == day)
printf("星期三\n");
else if(4 == day)
printf("星期四\n");
else if(5 == day)
printf("星期五\n");
else if(6 == day)
printf("星期六\n");
else if(7 == day)
printf("星期天\n");
return 0;
}
例2:
#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;
case 6:
case 7:
printf("休息日\n");
break;
}
return 0;
}
例3(易错):
int main()
{
int n = 1;
int m = 2;
switch(n)
{
case 1:
m++;
case 2:
n++;
case 3:
switch(n)
{
case 1:
n++;
case 2:
m++;
n++;
break;
}
case 4:
m++;
break;
default:
break
}
printf("m = %d, n = %d\n", m, n);
return 0;
}
//执行后输出 m = 5, n = 3
循环语句
while
while(表达式)
循环语句;
//遇到break,则本次循环停止,退出while循环(终止循环)
//遇到break,则本次循环停止,重新进入下一次循环(终止本次循环)
例1:
#include <stdio.h>
int main()
{
int i = 1;
while(i <= 10)
{
printf("%d", i);
i++;
}
return 0;
}
例2:
#include <stdio.h>
int main()
{
int ret = 0;
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);//输入密码
//此时缓冲区还剩余一个'\n'
getchar();//读取'\n',若无这句代码,ret将被直接赋值'\n',显示其ASCII码值10
printf("请确认(Y/N):");
ret = getchar();//读取Y或N
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
}
但上述代码还存在问题,因为scanf函数只会获取空格前的字符。
一旦输入的密码含空格,getchar读取的将是空格,ret将被赋值空格后的第一个字符。
运用while循环改进后的代码如下:
#include <stdio.h>
int main()
{
int ret = 0;
int ch = 0;
char password[20] = {0};
printf("请输入密码:");
scanf("%s", password);//输入密码
//直到缓冲区只剩余一个'\n'
while((ch = getchar()) != '\n')
{
;
}
printf("请确认(Y/N):");
ret = getchar();//读取Y或N
if(ret == 'Y')
{
printf("确认成功\n");
}
else
{
printf("放弃确认\n");
}
}
例3:只输出数字字符
#include <stdio.h>
int main()
{
int ch = 0;
while((ch = getchar()) != EOF)
{
if(ch<'0' || ch>'9')
continue;
putchar(ch);
}
return 0;
}
for(最常用)
for(表达式1; 表达式2; 表达式3)
循环语句;
表达式1 - 初始化部分,用于初始化循环变量
表达式2 - 条件判断部分,用于判断循环是否终止
表达式3 - 调整部分,用于循环条件的调整
【执行流程】
表达式1 → 表达式2 → 循环语句 → 表达式3
→ 表达式2 → 循环语句 → 表达式3
→ ……
【建议】
①不要在for循环内部修改循环变量,防止循环失控;
②for循环变量取值建议采用“前闭后开”区间,如
int i = 0;
for(i=0; i<10; i++ )
{}
例1:
#include <stdio.h>
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d", i);
}
return 0;
}
//输出1 2 3 4 5 6 7 8 9 10
改写(加break)
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
if(i == 5)
break;
printf("%d", i);
}
return 0;
}
//输出1 2 3 4
改写(加continue)
#include <stdio.h>
int main()
{
int i = 0;
for(i = 1; i <= 10; i++)
{
if(i == 5)
continue;
printf("%d", i);
}
return 0;
}
//输出1 2 3 4 6 7 8 9 10
例2(易错):for循环的初始化、调整、判断都可省略。判断若被省略,判断条件是恒为正
#include <stdio.h>
int main()
{
int i = 0;
int j = 0;
for(; i<10; i++)
{
for(; j<10; j++)
{
printf("hehe\n");
}
}
return 0;
}
//输出结果为10个hehe
例3:两个条件变量
#include <stdio.h>
int main()
{
int x, y;
for(x=0, y=0; x<2 && y<5; ++x, y++)
{
printf("hehe\n");
}
return 0;
}
//输出结果为hehe hehe
例4(易错):
//问for循环进行多少次
#include <stdio.h>
int main()
{
int i = 0;
int k = 0;
for(i=0, k=0; k=0; i++, k++)
k++;
return 0;
}
//循环0次
//注意:条件判断语句k=0是赋值语句,0为假,所以循环一次也进不去
//若判断语句k=0改为k=任意非零数,即恒为真,则循环无数次
do while
do
循环语句;
while(表达式);
例1:
#include <stdio.h>
int main()
{
int i = 1;
do
{
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4 5 6 7 8 9 10
改写(加break)
#include <stdio.h>
int main()
{
int i = 1;
do
{
if(i == 5)
break;
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4
改写(加continue)
#include <stdio.h>标签:语句,case,int,break,循环,printf,main,分支 From: https://blog.51cto.com/u_15883132/5983516
int main()
{
int i = 1;
do
{
if(i == 5)
continue;
printf("%d", i);
i++;
}
while(i <= 10);
return 0;
}
//执行结果为1 2 3 4,然后进入死循环