c语言是结构化的程序设计语言。
- 1.顺序结构
- 2.选择结构
- 3.循环结构
什么是语句?
c语句可以分为以下五类:
- 1.表达式语句
- 2.函数调用语句
- 3.控制语句
- 4.复合语句
- 5.空语句
- 本周介绍的是控制语句。
- 控制语句,用于控制程序的执行流程,以实现程序的各种结构方式,它们又特定的语句定义符组成,c语言共有九种控制语句。可分为以下三类:
- 1.条件判断语句,也叫分支语句:if语句 switch语句
- 2.循环执行语句:do while语句 while语句 for语句
- 3.转向语句:break语句 goto语句 continue语句 return语句
if语句
在分支语句中,if如果表达式结果为真,则语句执行。
0表示假,非0表示真。-1也是真。
if()
{
}
一对{}大括号就叫代码块。
int main()
{
int a=0;
int b=2;
if(a==1)
if(b==2)
printf("hehehe");
else
printf("haha");
return 0;
}
else总是和最近的if构成一对,所以上面的代码不会显示hehehe也不会显示haha。
这种叫悬空else。所以代码分隔很重要。
//怎样养成良好的代码风格?《高质量c/c++编程》前三章
//补充::关于static修饰局部变量,如下,则只在第一次调用时进行初始化,后序调用该函数时,使用的都是上次结束前该变量的值。即第二次用b时候b就是5,第三次就是7
static int b=3;
b+=2;
判断常量和变量是否相等时,将常量 放在左边 是好的习惯。
int num=1;
//如果本来想写if(num==5)但写成了下面两种情况:
if(num=5)
//则会继续执行,直接让num=5;自己很难发现
if(5=num)
//会报错,我们就能发现了
switch语句
switch(整型表达式)
{
语句项,case 整形常量表达式:
语句;
}
遇见break就会跳出循环,没遇到break就会继续往下走。如下,1-5是工作日,67是休息日。有时候不加break是故意的,要按需求来。
scanf("%d",&day);
switch(day)
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("工作日");
break;
case 6:
case 7:
printf("休息日");
break;
default:
printf("输入错误");
break; //最后一行其实加不加都行,不加也是走完了这个程序了,但是加上方便之后的修改添加。
}
default的位置在哪都可以,建议放最后。而且不是必须加的,可以不加。 switch允许嵌套使用。
循环语句
遇见break时候跳出循环。当遇见continue时候,跳过本次循环,直接跳回while的判断部分,进行下一次循环的入口判断。EOF是end of file ,值是-1,一个整数。
int ch=0;
while((ch=getchar())!=EOF) //getchar就是输入一个字符
{
putchar(ch); //putchar 就是打印一个字符
}
按ctrl z会让getchar返回一个EOF,使得这个程序停下来。
//用getchar变量时候要用int。 int ch=getchar();
scanf、getchar在读取字符的时候,离键盘输入的数据中还隔着一个缓冲区。
流程如下:当前面有个scanf,然后用户开始输入123456,然后回车,缓冲区就读取成了123456\n,然后scanf就把123456拿走了,缓冲区只剩一个\n。
然后getchat就读取了一个\n。
scanf扫描%s的时候,只读取空格之前的。
所以当scanf在上面,下面有个getchar时候,为了清理缓冲区可以这样做,用好几个getchar把缓冲区的东西都拿走。
int tmp=0;
while((tmp=getchar())!='\n')
{
; //空语句
}
ASCII码中,0 123456789这些数字都是连续的。
for循环
建议:
1、不可在for循环体内修改循环变量,防止for循环失去控制
2、建议for语句的循环控制变量的取值均采用“前闭后开区间”的写法
int arr[10]={1,2,3,4,5,6,7,8,9,10}; int i = 0; for(I=0;i<10;i++) //前闭后开,相当于[0,10) { printf("%d",arr[i]); }
for(表达式1;表达式2;表达式3)
初始化 判断 调整
//注意,顺序是先初始化,然后判断,如果为真就开始走循环体,然后表达式3,然后再判断;
遇见break就跳出循环。
如打印1-10
int i=0;
for(i=1;i<=10;i++)
{
printf("%d",i);
}
注意,如果for循环的判断部分省略了,就意味着判断恒为真。
//break在while和for循环中的作用是一样的
//continue在for循环中出现时,是跳过后面代码来到调整部分,先调整后再进行判断;
在while中出现时,是跳过后面代码来到判断部分
do while循环
int I =1;
do
{
printf("%d",i);
I++;
}while(I<=10);