C循环与分支
循环
while循环
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* while 循环执行 */
while( a < 20 )
{
printf("a 的值: %d\n", a);
a++;
}
return 0;
}
//运行结果:
a 的值: 10
a 的值: 11
a 的值: 12
a 的值: 13
a 的值: 14
a 的值: 15
a 的值: 16
a 的值: 17
a 的值: 18
a 的值: 19
for 循环
#include <stdio.h>
int main ()
{
/* for 循环执行 */
for( int a = 10; a < 20; a = a + 1 )
{
printf("a 的值: %d\n", a);
}
return 0;
}
//运行结果同上。
do…whlie循环
#include <stdio.h>
int main ()
{
/* 局部变量定义 */
int a = 10;
/* do 循环执行,在条件被测试之前至少执行一次 */
do
{
printf("a 的值: %d\n", a);
a = a + 1;
}while( a < 20 );
return 0;
}
//运行结果同上。
do…while和while的区别
do while 循环与 while 循环的主要区别在于它们执行循环体的顺序。do while 循环首先执行循环体,然后检查循环条件。因此,即使条件一开始就为假,循环体也会至少执行一次。
分支
if else 用法详解
1.if
最简单的格式:
if (表达式) {语句}
若表达式为真,就执行下面的语句;否则不执行。首先,前面讲代码规范化的时候讲过,if 与它后面的括号之间要加一个空格。其次,在前面讲过判断“真”、“假”分为两种,一种是数值是否为零,另一种是表达式是否成立。所以上面的程序表达式成立,故执行其下的输出语句。如下所示:
# include <stdio.h>
int main(void)
{
int i;
if (i = 2) //或者直接输入1234等等皆可,或者3>2等等
{
printf("I Love You\n");
}
return 0;
}
所以只要 if 后面的表达式成立或非零,就执行其下的语句。表达式为0的时候即假,就不执行其下的语句了
if的控制范围问题
如下所示:
# include <stdio.h>
int main(void)
{
if (0)
printf("I Love You\n");
printf("I Love You Too\n");
return 0;
}
此程序运行结果为:
I Love You Too
为什么
“I Love You”没有输出而“I Love You Too”却输出了?
因为
在C语言中,if 只能控制其后的一个语句。如果要控制多个语句就必须加大括号{}。所以在上面这个程序中 if 只能控制第一个 printf,而 if 后的表达式为0
,所以第一个 printf 不会执行,所以“I Love You”不会输出。而第二个 printf 不在 if 的控制范围内,所以 if 语句执行完之后顺序往下执行第二个 printf,所以“I Love You Too”会输出。
if…else用法
注意:
(1)if()后面没有分号,直接写{},else后面也没有分号,直接写{}
(2)当某一条件为真的时候,则不会向下执行该分支结构的其他语句。
# include <stdio.h>
int main(void)
{
int i, j;
printf("请输入两个数:"); //提示输入
scanf("%d %d", &i, &j); //注意取地址符&
if (i>j)
{
printf("i大于j\n");
}
else
{
printf("i小于j\n");
}
return 0;
}
注意:
-
同样,else 也只能控制到其后的一个语句,如果要控制多个语句的话必须要加大括号{}。但是这里再强调:if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}。
-
代码规范化七大原则的第一个原则是“空行”,前面说过:两个不同的功能块之间要加空行。言外之意就是“两个相同的功能块之间就不需要加空行”。if 和 else 是相同的功能块,所以它们之间不需要加空行。
-
if 可以没有 else 单独使用,这个前面已经应用过了。但如果要用 else,它必须是 if 的一部分。else 绝对不可能脱离if而单独使用,这一点大家一定要注意。
if…else if…else 的用法
如下程序所示:
# include <stdio.h>
# include <math.h>
int main(void)
{
//将三个系数保存到计算机中
int a = 1; //“=”不表示相等,而是表示赋值
int b = 2;
int c = 1;
double delta; //delta存放的是b*b - 4*a*c的值
double x1, x2; //分别用于存放一元二次方程的两个解
delta = b*b - 4*a*c;
if (delta > 0)
{
x1 = (-b + sqrt(delta)) / (2*a);
x2 = (-b - sqrt(delta)) / (2*a);
printf("该一元二次方程有两个解,x1 = %f, x2 = %f\n", x1, x2);
}
else if (0 == delta)
{
x1 = (-b) / (2*a);
x2 = x1; //左边值赋给右边
printf("该一元二次方程有一个唯一解,x1 = x2 = %f\n", x1);
}
else
{
printf("无解\n");
}
return 0;
}
if…else if…else 的意思就是:“如果”第一个成立,就执行第一个;“否则如果”第二个成立就执行第二个;“否则”就执行第三个。
例外
# include <stdio.h>
int main(void)
{
float score = 1000;
int i = (90<=score<=100);
printf("i = %d\n", i);
return 0;
}
运行结果为: i = 1
解析:因为按照优先级执行的时候肯定是从左到右,所以肯定是先执行 90<=score。但是 90<=score 的运算结果是一个逻辑值,要么成立,要么不成立。我们前面讲过,逻辑值要么真、要么假,真就是 1,假就是 0。90<=score<=100永远都成立,所以i永远都是1。