级联的If else
在出现多个分句如
if () {
} else {
if () {
} else {
if () {
}else……
多个级联if else的情况下
可以将else后边if前面的花括号去掉
达成
if () {
} else if () {
} else if () {
……
的效果
优点:简洁,避免代码整体向右过分偏移的情况造成阅读不便
优先单一出口原则:比起在每一个if后边都赋予一个printf出口,更偏向于选择
在if else循环后提供单一printf出口,不把程序写死。
注:每一个else都属于离自己最近的那个if,程序是描述动作的
多路分支
swich-case:
switch ( 控制变量式 ) {
case 常量 :
语句
……
case 常量 :
语句
……
default :
语句
……
}
1.控制表达式只能是整数型的结果
2.常量可以是常数,也可以是常数计算的表达式(C99ONLY)
break:在执行完分支中的最后一条语句后,如果后面没有break,
就会顺序执行到下面的case里去,直到遇到一个break或者switch
结束为止。
eg:成绩判断
#include <iostream>
using namespace std;
int main()
{
printf("请输入你的分数");
int grade;
scanf("%d", &grade);
grade /= 10;//先输入,再定义,确保grade是有值的
char letter;//定义字符
switch ( grade ) {
case 10://100也属于A的范畴,没有break所以程序会继续往下走到letter='A'
case 9:
letter = 'A';//字符要用单引号括起来
break;
case 8:
letter = 'B';
break;
case 7:
letter = 'C';
break;
case 6:
letter = 'D';
break;
default:
letter = 'F';
}
printf("你的成绩是%c\n", letter);//单一出口原则
return 0;
}
循环
#include<stdio.h>
int main()
{
int x;
int n = 0;
printf("请输入你的数字\n");
scanf("%d", &x);
n++;
x /= 10;
while ( x > 0 ){
n++;
x /= 10;
}
printf("这个数字是%d位数\n", n);
return 0;
}
if和while的区别:
if:只做一次判断
while:反复多次判断,循环体内要有改变条件的机会,否则是一个死循环
有些语句在语法上是没有错误的,而逻辑上是不对的。所以程序对不对
不是单纯有编译决定的。
一直没有输出的错误——超时
一个while循环执行之前需要判断是否继续循环,所以有可能循环一次也
没有被执行
条件成立是循环继续的条件
要学会在纸面上进行程序分析
验证:
测试程序常使用边界数据,如有效范围两端的数据、特殊的倍数等
如:个位数、10、0,负数……
判断位数的其他两种程序:
①
while ( x > 0 ){
x > 0;
n++
}
printf("这个数字是%d位数\n", n);
return 0;
既while语句前没有n++,x>0的语句
虽然运行结果相同,但是当输入0时,无法判定其为1位数
②
if ( x > 0) {
while ( x > 0 ){
n ++;
x /= 10;
}
} else {
n = 1;
}
printf("这个数字是%d位数\n", n);
先判断x是否大于0,如果等于0,直接进入else语句输出n=1,也能够判定0为1位数
在调试一些程序的时候,可以在程序间插入printf来方便查看程序进行到了
哪里
do-while循环:
在进入循环的时候不做检查,而是在执行完一轮循环体的代码之后,再来
检查循环的条件是否满足,如果满足则继续下一轮循环,不满足则结束循环。
区别:是否在循环体执行结束的时候才来判断条件
do {
n++;
x /= 10;
}
while ( x > 0 );
printf("这个数字是%d位数\n", n);
return 0;
在这个语句中,如果输入的是0,那么无论x是否大于0,都先进入do语句中先进行n+1,
都能够得出0为1位数的结果
如果要模拟运行一个很大次数的循环,可以模拟较少的循环次数,然后作出判断
有多少个输出,while循环就走了多少轮