流程控制语句
1. 控制结构 (3种)
顺序 选择 循环
2. 几种语句 (7个)
• 无条件的执行一次(一般语句)
• 无条件的重复执行(无穷循环)
• 有条件的执行一次(if/ if-else语句)
• 选择性的执行一次(switch语句)
• 有条件的重复执行(while 语句)
• 计次型的重复执行(for 语句)
• 至少做一次的有条件的重复执行(do-while 语句)
3.中止重复执行语句 (2个)
• 中断目前所属重复执行语句(break 语句)满足if条件,只结束一层 for,直接结束for循环
• 在重复执行后,跳过后面的程序区块(continue 语句)满足if条件,跳过本层for,继续for循环
4.用法&应用举例
♦ if 语句:
if ( 表示式 ) { 程序片段; }
○ 如果「表示式」成立,就执行{ 程序片段 }
举例:
▪ 猜数字 ▪ 满额折扣计算 ▪ 三角形判断 ▪ 求几个变量最大值 ▪求中位数 ▪ 对几个变量排序/交换
♦ if-else 语句:(二选一的交叉路口)
if( 表示式 ) { 程序片段一 ; }
else { 程序片段二; }
○ 如果「表示式」成立,就执行{ 程序片段一 }
○ 如果「表示式」不成立,就执行{ 程序片段二 }
if( 表示式 ) {
{ 程序片段一; }
} else if( 表示式二 ) {
{ 程序片段二; }
} else if( 表示式三 ) {
{ 程序片段三; }
…
○ 连续多个if互斥
举例:
▪ 成绩等级评定 ▪ 变量比大小求最值 ▪ 猜数字 ▪ 输入数字四则运算结果
♦ switch 语句:(多选一的路口)
switch( 整数值 ) {
case ‘整数常数值’:
程序片段;
break ;
case ‘整数常数值’:
程序片段;
break ;
…
default;
程序片段;
}
○ 可指定多个不同case
○ 在所有case都不符合时,执行default
举例:
▪ 成绩等级评定 ▪ ID查询
♦ while 语句:
while( 表示式 ) { 程序片段; }
○ 当「表示式」成立,就执行{ 程序片段 }
○ 在if-else语句外加入while语句,会至少执行一次(1次~无穷多次)
○ count=0, count=count+1作为计数器,输出计执行次数
○ 且计次count的值和输出printf count的值,与count初值,count范围(大于或大于等于),和它们的前后顺序都有关 就看到底做了几次while
int count=1
while(count<=10){
printf(%d\n",count);
count=count+1;
}
举例:
▪ 印出N~M个数字
▪ 猜数字至少猜一次/数共猜了几次
▪ 求不定个正整数之和 sum=0 sum=sum+number / 平均数 average=(float)sum/number 要注意显性隐性转型 (number是输入的所以是不定个)
♦ do-while 语句:
do{
程序片段;
}while( 表示式 )
○ 当「表示式」成立,就执行{ 程序片段 }
○ 先执行大括号( do里的程序片段 )一次,再看while*
○ do-while里加入switch语句,至少执行一次的选择性执行(一次)
○ 表示式可以为不等于(id=!0),即为0时结束循环
举例:
▪ 猜数字至少猜一次 ▪ 输入商品编号显示总金额
♦ for 语句:
for( 初始式;条件式;循环式 ) { 程序片段; }
○ 当「条件式」成立,执行{ 程序片段 },否则结束循环
○ 执行循环式,返回上一步
○ 与while的对比:
定义初始式
while( 条件式 ){
程序片段;
循环式;
}
○ 计数器: for是用i,while是用count
举例:
▪ 印出N~M个数字
▪ 印出N~M之间的奇数 (count=count+2 / number=2*count+1 / if(count%2==1) 第一种也可用while
▪ 印出N~M之间的偶数 (count=count+2 / number=2*count / if(count%2==0)
▪ 印出N~M之间不是3的偶数 (count%3!=0)
▪ 印出等差数列
▪ 求连续个整数之和 sum=初值;sum=sum+i;i<N;i++
▪ 找出N以内所有正因数 N&number==0
▪ 找出N以内所有质数 法一:N&number==0 number of divisors(计数器)++ 当number of divisors=0时,没有一个number能整除它,就是质数 (法二:N%number= =0执行时,令isprime=0,当输出isprime=1,即没执行一次,为质数。
▪ 印出九九乘法表 两个for循环 印i*j=ij
▪ 用文字绘制横线,(空心) 长方形,三角形 ▪ 猜数字至少猜一次
▪ 找简易方程组的解 一个数确定了另一个数也就确定了
♦ break 语句:
for( number=1;number<=10;number++){
if(number=5){
break;
}
printf("%d\n",number);
}
运行结果: number:1,2,3,4,5 (只印到4)
○ 当满足if条件,跳出这层的for循环,直接结束,且只结束一层
举例:
▪ 找上限内同时被3,5,7整除最大的
▪ 韩信点兵问题
♦ continue 语句:
for( number=1;number<=10;number++){
if(number=5){
continue;
}
printf("%d\n",number);
}
运行结果: number:1,2,3,4,5 6,7,8,9,10 (不印5)即 if(number!=5)
○ 当满足if条件,跳过后面的程序,继续本层for循环