目录
前言
C语句可分为以下五类
1.表达式语句
2.函数调用语句
3.控制语句
4.复合语句
5.空语句
本文主要为控制语句
控制语句用于控制程序的执行流程,以实现程序的各种结构方式,它们由特定的语句定义符组成,C语言有九种控制语句。
可分为以下三类:
1.条件判断语句也叫分支语句:if语句、switch语句;
2.循环执行语句:do……while语句、while语句、for语句;
3.转向语句:break语句、goto语句、continue语句、return语句。
1.0——分支语句 if else
C语言:结构化的程序设计语言! 顺序结构 选择结构 循环结构
分支语句:if switch语句 循环语句 while do while for goto
语句:一个分号隔开的就是一条语句;
//单分支
if(表达式) //表达式非0即为真,0即为假
语句;
//双分支
if(表达式)
语句1;
else(表达式)
语句2;
//多分支
if(表达式)
语句1;
else if (表达式)
语句2;
else
语句3;
int main()
{
int age = 0;
scanf("%d", &age);
//if (age < 18)
// printf("青少年\n");
//else if (age >= 18 && age < 30)
// printf("青年\n");
//else if (age >= 30 && age < 50)
// printf("中年\n");
//else if (age >= 50 && age < 80)
// printf("中老年\n");
//else if (age >= 80 && age < 100)
// printf("老年\n");
//else
// printf("老寿星\n");
if (age > 100)
printf("老寿星\n");
else if (age <= 18)
{
printf("青少年\n");
printf("好好学习\n");
}
else if (age <= 30)
printf("青年\n");
else if (age <= 50)
printf("中年\n");
else if (age <= 100)
printf("老年\n");
return 0;
}
else 与最近的 if 匹配; 题上所述 if ( if 后跟一条简单语句 else后跟一条简单语句 )第一个if和后面的(if else)构成一个语句 配对的 if-else 语句可以看成一条简单语句。,即第一个if判断为假不执行,return 0;
以下情况均属于 if 结构嵌套。
- if 语句体中可以含有 if 语句或 if-else 语句。
- if-else 语句中的 if 体或者 else 体中含有 if 语句或 if-else 语句。
注意:
1)在嵌套结构中会有多个“if”与多个“else”关键词,每一个“else”都应有对应的“if”相配对。原则:“else”与其前面最近的还未配对的“if”相配对。
2)配对的 if-else 语句可以看成一条简单语句。
3)一条 if 语句也可以看成一条简单语句。
两个语句一样
return的意义
1) 没有返回值的函数为空类型,用void
表示。
2) return 语句可以有多个,可以出现在函数体的任意位置,但是每次调用函数只能有一个 return 语句被执行,所以只有一个返回值(少数的编程语言支持多个返回值,例如Go语言)。
3) 函数一旦遇到 return 语句就立即返回,后面的所有语句都不会被执行到了。从这个角度看,return 语句还有强制结束函数执行的作用。
return 语句是提前结束函数的唯一办法。return 后面可以跟一份数据,表示将这份数据返回到函数外面;return 后面也可以不跟任何数据,表示什么也不返回,仅仅用来结束函数。主函数也是一个函数
return关键字不是专门用于结束循环的,return的功能是结束一个方法。 当一个方法执行到一个return语句时(return关键字后面可以跟变量、常量和表达式),这个方法将会被结束。
2.0——分支语句——switch语句
switch(整形表达式) switch后必须是整形 或者字符,字符是整型的一种 存储的是Ascll码
{ case后必须是整型常量表达式
语句项; case(整型常量表达式)——决定入口 break——决定出口
} 语句
int main()
{
int input = 0;
scanf("%d", &input);
switch (input)
{
//input只是决定从哪里进去
//break决定出口
case 1: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;
}
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;//最后一个break建议加
default:
printf("xxxx\n");
break;
}
return 0;
}
default:语句
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);
return 0;
}
结果:m=5,n=3 break只能跳出自身的switch
编程好习惯
在最后一个 case 语句的后面加上一条 break语句
(之所以这么写是可以避免出现在以前的最后一个 case 语句后面忘了添加 break语句)。
在每个 switch 语句中都放一条default子句是个好习惯,甚至可以在后边再加一个 break 。
3.0——循环语句——while 循环
while(表达式)
{ 表达式为真,循环执行
循环语句; 表达式为假,循环结束
}
在while循环中break用于永久终止循环
在while循环中continue跳过本次循环continue后面代码,直接去判断部分,看是否进行下一次循环
getchar()——读取一个字符
正确返回类型是int类型即Ascll值,错误返回EOF——end of file 文件结束标志 EOF本质是 -1
putchar()——输出一个字符
getchar发现缓冲区有东西,即\n,就把它调用;所以需要清理缓冲区
再来一个getchar把\n拿走;
int main()
{
char password[20] = { 0 };
printf("请输入密码:>");
scanf("%s", password);//假设密码为 123456
//getchar();//拿走缓冲区剩余的\n——不知最合理的解决方法
如输入123456 abcdef\n 再次直接确认失败
scanf读取空格之前的字符
//
//处理方法1——清理缓存区
int temp = 0;
while ((temp = getchar()) != '\n')
{
;
}
printf("请确认密码(Y/N):>");
int ch = getchar();
if ('Y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
#include <stdio.h>
int main()
{
int ch = 0;
while ((ch = getchar()) != EOF)
{
//读取字符,只打印数字字符
//48~57 字符0~9的AscII码
//逻辑或,如果字符ch小于48,或者字符ch大于57,则continue
if (ch < '0' || ch > '9')
continue;
putchar(ch);
}
return 0;
}
3.0——循环语句——for 循环
for(表达式1;表达式2;表达式3) 表达式1为初始化部分,用于初始化循环变量的
{ 表达式2为条件判断部分,用于判断循环时候终止
循环语句; 表达式3为调整部分,用于循环条件的调整
}
for循环中的break也是用于终止循环 continue跳过本次循 环
判断部分省略,判断恒为真;
打印三个hehe
判断语句中为赋值 赋值0,即为假,不进入循环
4.0——循环语句——do while
do
循环语句;
while(表达式);
break continue
特点:循环语句至少要执行一次;