目录
C语言是结构化的程序语言
- 顺序结构
- 选择结构 if switch
- 循环结构 while for do-while
C语句:
- 表达式语句
- 函数调用语句
- 控制语句
- 复合语句
- 空语句
控制语句
- 条件判断语句(分支语句) if switch
- 循环执行语句 do while while for
- 转向语句 break goto continue return
分支语句
if语句
语法结构:
if(表达式) 表达式结果为真执行语句
语句;
if(表达式)
语句1;
else
语句2;
//多分支
if(表达式1)
语句1;
else if(表达式2)
语句2;
else
语句3;
例子
#include<stdio.h>
int main()
{
int age = 0;
scanf("%d", &age);
if (age < 18)
{
printf("青少年\n");
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");
}
return 0;
}
注意:
默认只跟一条语句,如果多条语句要用大括号
0为假,非0为真
一对大括号{}就是一个代码块
悬空else
//haha hehe
#include <stdio.h>
int main()
{
int a = 0;
int b = 2;
if (a == 1)
{
if (b == 2)
printf("hehe\n");
else
printf("haha\n");
}
return 0;
}
else总是和离它最近的if匹配
if和else合起来叫一条语句
把常量放在等号的左边(更容易找到错误
#inculde<stdio.h>
int main()
{
int num = 1;
if (5 == num)
printf("hehe\n");
return 0;
输出1-100的奇数
//%2==1
//if(n%2!=0)
int main()
{
int i = 1;
while(i <= 100)
{
printf("%d ",i);
i=i+2;
}
}
switch 语句
switch(整型表达式)
{
语句项 ;
}
搭配break使用才能实现真正的分支
语句块就是一些case语句
case 整型常量表达式:
语句;
case后打印内容重复一致时可以省略。
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;
default:
printf("输入错误\n");
break;
}
}
如果所有的case都不能匹配就用default:(没有顺序要求,放哪里都可以,一般放最后)
后也要加break
switch允许嵌套
嵌套的break只能跳出嵌套的switch语句
循环语句
while循环
语法结构
while(表达式)
循环结构;
//在屏幕上打印1-10
#include<stdio.h>
int main()
{
int i =1;
while(i<=10)
{
printf("%d ",i);
i =i++;
}
return 0;
}
提前永久终止整个循环break
跳过本次循环continue后面的代码,直接返回到表达式部分判断要不要进行下一次循环
1.
getchar读取字符 返回类型是int
putchar打印字符
int main()
{char password[20] = {0};
print("请输入密码");
sacnf("%s",password);
//1
//getchar();//处理\n
//2
int tmp=0;
while ((tmp = getchar())!='/n')
{
;
}
printf("请确认密码(y/n)");
int ch = getchar();
if('y' == ch)
printf("确认成功\n");
else
printf("确认失败\n");
return 0;
}
代码意义:缓冲区清理
scanf 读取
getchar 缓冲区 键盘
2.读取字符只打印数字字符
#include<stdio.h>
int main()
{
int ch = '\0';
while ((ch = getchar())!=EOF)
{
if (ch < '0' || ch > '9')//非数字字符
continue;
putchar(ch);
}
return 0;
}
for循环
while中 初始化 判断 调整 三部分非常重要而且是分离的,其中一个部分只要发生变化,循环就会不一样。
//while
int main()
{
int i = 1;//初始化
while (i <= 10)//判断
{
printf("%d ", i);
i++;//调整
}
return 0;
}
for(表达式1;表达式2;表达式3)
初始化 判断 调整
//for
int main()
{
int i = 0;
for (i = 1; i <= 10; i++)
{
if (5 == i)
continue;
printf("%d ", i);
}
return 0;
}
表达式2为假时整个循环终止
break整个循环终止
continue跳过本次循环后的代码,后面继续循环
for语句的循环控制变量
建议
1.不可在for循环体内修改循环变量,防止for循环失去控制(在括号里修改)
2.建议for语句的循环控制变量的取值采用“前闭后开区间”的写法(一般情况)
[0,10)
一些for循环的变种
for循环中三部分都可省略但;不能省略
for循环的判断部分省略了,意味判断恒为真
可以使用一个多余变量控制循环
int main()
{int x,y;
for (x = 0, y = 0; x < 2 && y < 5; ++x,y++)
{
printf("haha\n");
}
return 0;
}
do...while循环
do
循环语句;
while(表达式);
int main()
{ int i=1;
do
{ if(i==5)
continue;//打印结果1 2 3 4 死循环
printf("%d ",i);
i++; }while(i<=10);
return 0; }
循环至少执行一次,应用场景有限
break跳出整个循环,永久终止
continue跳过本次后面的代码
goto 语句
int main()
{
again:
printf("haha\n");
goto again;
return 0;
}
传送,跳转 但是不能跨函数跳转
可以随意滥用,但是没必要
用途:
终止程序在某些深度嵌套的结构处理过程
(一次跳出两次或多次循环)
for(...)
for(...)
{ for(...)
{ if(disaster)
goto error;
}
}
...
error:
if(disaster) //处理错误情况