流程控制
流程控制是C语言中很重要的环节,因为涉及到很多算法问题,以后会常用到
流程控制主要分为循环结构和选择结构.
循环结构的意义:重复执行一个语句块,直到满足某个条件为止,这称为循环,循环是带有比较数据项功能的一个基本编程工具.
选择结构的意义:选择程序结构用于判断给定的条件,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程.
if语句
if语句使用注意:
1.比较大小时,常量值放左边,变量放右边
2.赋值运算符不要写成了两个==
3.if ()不要加分号,不然就相当于一个空语句
4.if后面记得要跟上大括号,不然作用域不明确就会报错
例子:用if语句来判断学生分数所在的级别
// -----------可利用三种结构来完成------------ //1.第一种结构: /* if (条件) { 语句1; 语句2; ..... } */ /* int count; printf("请输入一个数\n"); scanf("%d",&count); if (count >= 50) { printf("可以开班!!\n"); return 0; } printf("人数不满50,不能开班!\n"); return 0; */ //2.第二种结构: /* if (条件) { 语句1; 语句2; ..... } else { } */ /* printf("请输入一个数\n"); scanf("%d",&count); if (count >= 50) { printf("可以开班!!\n"); } else { printf("人数不满50,不能开班!\n"); } return 0; */ //3.第三种结构 /* if (条件1) { 语句1; 语句2; ..... } else if (条件2) { } else if (条件3) { } else if (条件4) { } ...... */ int score; printf("请输入分数\n"); scanf("%d",&score); if (score >= 80) { printf("成绩为优\n"); } else if (score >= 70) { printf("成绩为良\n"); } else if (score >= 60) { printf("成绩为中\n"); } else if { printf("成绩为差\n"); } return 0;
switch语句
switch语句使用注意:
1.case后面定义的变量必须要用大括号.
2.break
同样利用switch语句完成之前用if语句实现的例子
printf("请输入分数值\n"); int number; scanf("%d",&number); int score = number/10; switch (score) { case 10: case 9: printf("等级是A\n"); break; case 8: printf("等级是B\n"); break; case 7: printf("等级是C\n"); break; case 6: printf("等级是D\n"); break; default: printf("等级是E\n"); break; } return 0;
if和switch比较
1.switch能做的,if都能做
2.if能做的,switch不一定能做
while语句
while语句使用注意:
1.先确定需要重复执行的操作
2.再确定约束条件
while语句运行原理:
1.若果一开始条件就不成立.永远不会执行循环体
2.如果条件成立,就会执行一次循环体,执行完毕,再次判断条件是否成立
break; 直接结束整个while循环
continue;结束当前的循环体,进入下一次循环体的执行
while 和do while的区别:
1.while只要条件不成立,永远不会执行循环体
do while 不管条件是否成立,至少会执行一次循环体
2.两者在语法上也有很大区别
// while语句的语法 while(条件) { 语句 } // do while语句的语法 do{ 语句 } while(条件); //do while语句中的while语句条件后必须要加分号
例子:利用while语句实现一个小程序,提示用户输入一个正整数n并输出n的阶乘结果
#include<stdio.h> int main() { int n = 0; while (n<=0) { // while语句的开始,并判断n是否是正整数 printf("Please Enter a Number:\n"); // 提示用户输入一个正整数 scanf("%d",&n); } // 初始化pro和num的值 int pro = 1; int num = 0; while (num < n) { num++; pro=num*pro; } printf("Product is %d\n",pro); return 0; }
for语句
格式:
for (语句1;条件;语句2) { 循环体 } // 语句1:初始化语句,只执行一次 // 语句2:增量语句(执行完循环体后再执行的语句) // 1.for一开始就会执行一次初始化语句,而且整个for循环也只会执行一次 // 2.判断条件是否成立,如果条件成立,就会执行一次循环体,然后就会执行语句2,再次判断条件是否成立 // 注意:for()后面不能加分号
例子:提示用户输入一个小于10的正整数n,如果n是5,就输出下列图形,其他n值以此类推
*****
****
***
**
*
#include<stdio.h> int main() { int n = 0 ; while (n<=0 || n>10) { printf("Pleas Enter a Number(0<num<10):\n"); scanf("%d",&n); } //这个for语句控制行数 for (int i = 0;i<n; i++) { //这个for语句控制星星的个数 for(int j = 0;j<n-i;j++){ printf("*"); } printf("\n"); } return 0; }
tips:利用循环语句造成的死循环:
while(1); for(;;);
1.if
1> 结构语法
if (条件) { } else if (条件2) { } else if (条件3) { } else { }
2> 特点
同一时刻,只有一个大括号里面的代码会被执行
2.switch
1> 结构语法
switch (数值) { case 数值1: break; case 数值2: break; case 数值3: break; default: break; }
2> 特点
1> 默认情况下,只有一个case后面的代码会被执行
2> 如果一个case后面没有break,而且这个case成立,就会按顺序执行后面所有case中的语句,直到遇到break为止
3> 如果要在case后面定义一个新的变量,必须用大括号{}包住
1.while
1> 结构语法
// while语句的语法 while(条件) { 语句 }
2> 特点:如果一开始条件不成立,永远不会执行循环体
2.do while
1> 结构语法
// do while语句的语法 do{ 语句 } while(条件);
2> 特点:不管条件是否成立,至少会执行一次循环体
3.for
1> 结构语法
for (语句1;条件;语句2) { 循环体 }
2> 特点:for一开始就会执行一次初始化语句,而且整个for循环也只会执行一次
4.选择循环语句的优先顺序
1> 一般优先使用for循环
2> 然后再考虑while
3> 最后再考虑do while