C语言的循环与分支

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);  //注意取地址符&amp;
    if (i>j)
    {
        printf("i大于j\n");
    }
    else
    {
        printf("i小于j\n");
    }
    return 0;
}

注意:

  1. 同样,else 也只能控制到其后的一个语句,如果要控制多个语句的话必须要加大括号{}。但是这里再强调:if、else、for、while、do 后面的执行语句不论有多少行,就算只有一行也要加{}

  2. 代码规范化七大原则的第一个原则是“空行”,前面说过:两个不同的功能块之间要加空行。言外之意就是“两个相同的功能块之间就不需要加空行”。if 和 else 是相同的功能块,所以它们之间不需要加空行。

  3. 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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值