一、流程控制结构
(1)顺序结构:按照书写顺序执行每一条语句。
(2)选择结构:对给定的条件进行判断,根据判断结果来决定执行哪一段代码。
(3)循环结构:在给定条件成立的情况下,反复执行某一段代码。
二、选择结构 - if
(一)if简单使用
1) 第一种结构:
如果条件为真,就执行后面的语句,否则不执行。
if(条件)
{
语句1;
语句2;
……
}
2) 第二种结构:
如果条件成立就执行语句1,否则执行语句2。
if(条件)
{
语句1;
}
else
{
语句2;
}
3) 第三种结构:
先判断条件1,若成立则执行语句1,其它不执行;若条件1不成立,则检查条件2……
【注意】如果条件3成立,则说明前面的都不成立。所有的语句块只有一个会被执行。
if(条件1)
{
语句1;
}
else if(条件2)
{
语句2;
}
else (条件3)
{
语句3;
}
4) 第四种结构:
在这种情况下,当条件成立,只执行语句1,语句2不属于次条件结构,但不推荐此种写法。
if(条件)
语句1;
语句2;
(二)if使用注意
①.推荐使用if(0==a)这种写法。
②. 注意赋值运算符,不要把==写成是=。
③. If(条件)后面不要加分号。
④. 注意作用域的问题,如果要在if后面定义新的变量,则一定要使用大括号。
(三)if练习
输入一个整数score代表分数,根据分数输出等级(A-E)
A:90~100 B:80~89 C:70~79 D:60~69 E:0~60
1 #include<stdio.h> 2 3 int main(){ 4 5 //定义变量存储分数值 6 7 int score; 8 9 //提示输入 10 11 printf("请输入分值:\n"); 12 13 //接受输入 14 15 scanf("%d",&score); 16 17 //判断等级 18 19 if(score>=90&&score<=100) 20 21 printf("A\n"); 22 23 else if(score>=80) 24 25 printf("B\n"); 26 27 else if(score>=70) 28 29 printf("C\n"); 30 31 else if(score>=60) 32 33 printf("D\n"); 34 35 else 36 37 printf("E\n"); 38 39 return 0; 40 41 }
三、选择结构 - switch
(一)switch结构
switch(值) //通常是变量
{
case数值1:
语句1;
break;
case数值2:
语句2;
break;
case数值3:
语句3;
break;
default :
语句4;
break;
}
解说:该结构把数值与数值1进行比较,若相等,则执行后面的所有语句,直到遇见break语句跳出整个循环,若前面的条件都不满足,则最终会执行default后面的语句。如果不写break语句,则后面的语句会接连执行,直到遇到break语句或者是全部语句执行完毕,只要前面的条件成立,则后面的判断就直接被忽略。
(二)switch使用注意
char c=‘A’;
switch(c)
{
case‘A’:
语句1;
break;
case 65://不能这样写,因为‘A’的ASCII值就是65,会报错
语句2;
break;
case数值3:
int a=10;
//a的作用域不明确报错,c语言检查变量的作用域根据{}决定,这里可以加{}
break;
default :
语句4;
break;
}
注意:如果要在case后面的语句中定义变量,则必须使用大括号包住。
(三)switch练习
输入一个整数seore代表分数,根据分数输出等级(A-E)。
A 90-100 B 80-89 C 70-79 D 60-69 E 0-60
1 #include<stdio.h> 2 3 int main() 4 { 5 // 定义一个变量score,用来存储用户输入的分数 6 int score ; 7 8 printf("请输入你的分数:"); 9 10 scanf("%d",&score); 11 12 //用switch语句判断用户输入的分数是什么等级 13 switch (score/10) { 14 case 10://100分 15 case 9://90~99分 16 printf("等级是 A \n"); 17 break; 18 case 8://80~89分 19 printf("等级是 B \n"); 20 break; 21 case 7://70~79分 22 printf("等级是 C \n"); 23 break; 24 case 6://60~69分 25 printf("等级是 D \n"); 26 break; 27 default://0~59分 28 printf("等级是 E \n"); 29 break; 30 } 31 return 0; 32 } 33 34 代码
【对比】if与switch:
1. if语句能够完成的功能,switch有时并不能够完成,如判断if(a>100)
2. 在有些情况下,if语句和switch语句可以互换
3. switch语句能完成的功能,if语句都可以完成
四、循环结构-while
(一)while结构
while(条件)
{
语句;
}
解说:判断条件是否成立,成立则执行(判断条件 -> 执行代码块 -> 判断条件 -> 执行代码块……)
1.首先确定循环执行的操作,2.在确定约束条件,即需要循环多少次,3.定义一个变量来记录循环的次数。
提示:在while循环体内使用if...break(跳出整个循环)或if...continue语句(跳出本次循环,继续下一次循环判断)。
while结构的运行原理:
①. 如果一开始条件不成立,则永远不会执行循环体。
②. 如果条件成立,则执行一次循环体,执行完毕后再次判断条件是否成立。
③. break:直接退出整个循环。
④. continue:结束当前循环体,进行下一轮循环判断。
(二)使用注意
1) while(1){.....}是一个死循环
2) while(a<10);{...}在条件后面加逗号表示循环体是一个空语句,而非{}部分
3) while条件语句后推荐使用{},否则只有第一条语句时循环体
4) 最简单的死循环 while(1);//永远执行空语句,让程序崩溃
(三)while练习
编程实现,提示输入一个正整数n,计算1+2+3+...n的值。
1 #include<stdio.h> 2 3 int main(){ 4 5 //定义变量保存用户输入的整数 6 7 int n; 8 9 while(n<=0){ 10 11 //提示输入 12 13 printf("请输入一个正整数:\n"); 14 15 //接受输入 16 17 scanf("%d",&n); 18 19 } 20 21 int sum=0; 22 23 int number=0;//默认被加的数值 24 25 while(number<n){ 26 27 number++; 28 29 sum=sum+number; 30 31 } 32 33 printf("计算结果为:%d\n",sum); 34 35 return 0; 36 37 }
五、循环结构-do while
Do
{
语句
}while(条件)
特点:do while循环至少会执行一次循环体
六、循环结构-for
(一)基本使用
for(语句1,条件,语句2)
{
循环体
}
语句1:一般为初始化语句
语句2:一般为增量语句(执行完循环体后再执行的语句)
for循环原理:
1) for循环一开始就会执行语句1(整个for循环只会执行一次)
2) 判断条件是否成立,若成立,则执行一次循环体,然后执行语句2,再次判断条件是否成立,若条件不成立则结束循环
3) 顺序为:(语句1 -> 判断条件 -> 循环体 -> 语句2 -> 判断条件 -> 循环体……)
【对比】for和while:
在性能上,for循环稍胜一筹,因为while循环只能使用外部的变量,而for循环可以对变量进行及时回收。
(二)for使用注意
①. 不要随便在for语句后面写上分号,如for();{....}
②. 定义变量的作用域不明确错误
for(int i = 0;i < 5;i++)
int a = 10; //编译器报错,变量作用域不明确
③. for语句中最简单的死循环for(;;);
④. 需要注意变量定义的作用域
int a = 10;
for(int i = 0,int a = 9;i < 5;i++)
{
int a = 10;
printf(“a = %d\n”,a);//这里打印的a的值是多少?
}
(三)for循环嵌套
用以输出特定格式的内容,如QQ好友列表等,提升可扩展性。
for(in i = 0;i < 5;i++)
{
//外面的循环控制行数
printf(“好友列表%d\n”,i);
//内部的循环控制列数
for(int j = 1;j< = 6;j++)
{
printf(“好友%d\n”,j);
}
}
(四)for练习
使用for循环输出九九乘法表。//先控制行数,在控制列数
代码:
1 #include<stdio.h> 2 3 int main() 4 5 { 6 7 for(int i=1;i<=9;i++) 8 9 { 10 11 for(int j=1;j<=i;j++) 12 13 { 14 15 printf("%dx%d=%d\t",i,j,i*j); 16 17 } 18 19 printf("\n"); 20 21 } 22 23 return 0; 24 25 }