C语言学习if和switch分支选择结构

如何判断一个整数是否为正数

计算机同我们一样,也是可以判断大小。在此之前,我们需要先说明在计算机中用来判断两个数关系的符号,即关系运算符。

关系运算符号

c语言中的关系运算符与数学上学习的有什么不同?

image.png

关系表达式的值是真和假,在C程序用整数1和0表示。
注意:>=, <=, ==, !=这种符号之间不能存在空格。

一、分支选择结构之简单的if条件语句

if(判断条件)
{
  语句1;
  语句2;
  语句······
}

其语义是:如果表达式的值为真,则执行其后的语句,否则不执行该语句。

假如你现在想让计算机判断一个整数是否为正数,如果是则显示YES,不是则显示NO,应该怎么办呢?。

//判断一个整数是否为正数
# include <stdio.h>
# include <stdlib.h>
int main()
{
    //定义一个变量a
    int a;
    scanf("%d",&a);
    //如果a大于0,则输出YES 
    if(a>0)
    {
        printf("YES");  
    }
    //如果a小于等于0,则输出NO 
    if(a<=0)
    {
        printf("NO");
    }
    return 0;
}

注意:if()后面没有分号,直接写{}

判断一个数是否为偶数

什么是偶数呢?偶数就是能够被2整除的数,也就是说一个数除以2的余数为0,那么这个数就是偶数。
那么我们现在只需要判断这个数除以2的余数是不是0,即:

如果a除以2的余数与0相等,则输出yes;
如果a除以2的余数与0 不相等,则输出no。

c语言中求余数的运算符号是“%”,所以判断一个数是否为偶数的c语言代码就是:

# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a%2==0)
    {
        printf("yes");
    }
    if(a%2!=0)
    {
        printf("no"); 
    }   
    return 0;
} 

二、分支选择结构之简单的if-else结构

简单的if-else语句的基本结构:

if(判断条件)
{
 语句;
 语句;
 ······
}
else
{
 语句;
 语句;
 ······
}

语义是: 如果表达式的值为真,则执行if其后的语句,否则执行else 里的语句。

注意:
if()后面没有分号,直接写{},else后面也没有分号,直接写{}。

从键盘读入一个整数,判断它是否为偶数的另一种简便快捷的代码写法如下:

# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a;
    scanf("%d",&a);
    if(a%2==0)
    {
        printf("yes");
    }
    else
    {
        printf("no"); 
    }   
    return 0;
} 

练习:
比较两个整数谁更大,同时打印输出较大的整数。

//比较两个整数大小,并打印输出较大的整数 
# include <stdio.h>
# include <stdlib.h>
int main()
{
    int a, b, c;
    scanf("%d%d",&a,&b);
    //如果a大于b,将a赋值给c,并打印c 
    if(a>b)
    {
        c=a;
        printf("%d",c); 
    }
    //反之,则将b赋值给c,并打印c 
    else
    {
        c=b;
        printf("%d",c);
    }
    return 0;
} 

我们学习了如何从两个数中找出较大的一个数,那么3个数该怎么办呢?

1.首先,用3个变量a,b,c分别存放从键盘读入的3个数。
2.然后,先比较变量a和b的值,将较大的值赋给变量d。
3.再比较变量d和c的值,如果变量c的值大于变量d的值,则把变量c的值赋给变量d。
4.最后输出变量d的值。

c语言代码为:

//比较3个数的大小,并将最大值打印输出 
#include<stdio.h>
#include<stdlib.h>
int main()
{
    //定义a,b,c,d 4个整型变量 
    int a,b,c,d;
    scanf("%d %d %d",&a,&b,&c);
    //如果a与b比较,将较大值赋值给d 
    if(a>b)
    {
        d=a;
    }
    else
    {
        d=b;
    }
    //c与d比较,如果c大于d,则将c赋值给d 
    if(c>d)
    {
        d=c;
    }
    printf("%d",d);
    return 0;
} 

当然还有另外一种写法,就是比较变量a和b,以及变量a和c的关系,思路如下:

如果 a>=b 并且 a>=c,则输出a;
如果 b>a 并且 b>=c,则输出b;
如果 c>a 并且 c>b,则输出c。

其中“并且”在c语言中用“&&”来表示,这时我们需要来了解一下c语言中的逻辑运算符。

c语言中逻辑运算符:
image.png

逻辑运算的值也是有两种分别为真和假,C语言中用整型的1和0来表示。其求值规则如下:

与运算&&

参与运算的两个变量都为真时,结果才为真,否则为假。例如:5>=5 && 7>5 ,运算结果为真;

或运算||

参与运算的两个变量只要有一个为真,结果就为真。 两个量都为假时,结果为假。例如:5>=5||5>8,运算结果为真;

非运算!

参与运算的变量为真时,结果为假;参与运算量为假时,结果为真。例如:!(5>8),运算结果为真。

另一种写法的c语言代码:

//判断3个数的大小
#include <stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    //如果 a>=b 并且 a>=c,则输出a;
    if(a>=b && a>=c)
    {
        printf("%d",a);
    }
    //如果 b>a 并且 b>=c,则输出b;
    if(b>a && b>=c)
    {
        printf("%d",b);
    }
    //如果 c>a 并且 c>b,则输出c。
    if(c>a && c>b)
    {
        printf("%d",c);
    }
    return 0;
} 
挑战练习

比较3个数的大小,并从大到小排序输出。

第一种方法:
如果a>=b 并且 b>=c,打印a b c;
如果a>=c 并且 c>b,打印a c b;
如果b>a 并且 a>=c,打印b a c;
如果b>=c 并且 c>a,打印b c a;
如果c>a 并且 a>=b,打印c a b;
如果c>b 并且 b>a,打印c b a;
代码如下:

//比较排序3个数字大小,从大到小输出
#include <stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);
    //如果a>=b 并且 b>=c,打印a b c;
    if(a>=b && b>=c)
    {
        printf("%d %d %d",a,b,c);
    } 
    //如果a>=c 并且 c>b,打印a c b;
    if(a>=c && c>b)
    {
        printf("%d %d %d",a,c,b);
    } 
    //如果b>a 并且 a>=c,打印b a c;
    if(b>a && a>=c)
    {
        printf("%d %d %d",b,a,c);
    } 
    //如果b>=c 并且 c>a,打印b c a;
    if(b>=c && c>a)
    {
        printf("%d %d %d",b,c,a);
    } 
    //如果c>a 并且 a>=b,打印c a b;
    if(c>a && a>=b)
    {
        printf("%d %d %d",c,a,b);
    } 
    //如果c>b 并且 b>a,打印c b a;
    if(c>b && b>a)
    {
        printf("%d %d %d",c,b,a);
    } 
    return 0;
} 

第二种方法(称之为“换位法”):

1.先将a与b比较,如果a<b,则a与b交换。需要借助另一变量t中转。
2.将a与c比较,如果a<c,则a与c交换。
3.将b与c比较,如果b<c,则b与c交换。

c语言代码为:

//“换位法”从大到小,排序三个数大小 
#include<stdio.h>
int main()
{
    int a,b,c,t;
    scanf("%d %d %d",&a,&b,&c);
    //1.先将a与b比较,如果a<b,则a与b交换。需要借助另一变量t中转。
    if(a<b)
    {
        t=a;
        a=b;
        b=t;
    }
    //2.将a与c比较,如果a<c,则a与c交换。
    if(a<c)
    {
        t=a;
        a=c;
        c=t;
    } 
    //3.将b与c比较,如果b<c,则b与c交换。
    if(b<c)
    {
        t=b;
        b=c;
        c=t;
    }
    printf("%d %d %d",a,b,c);
    return 0;
} 

分支选择结构之嵌套if-else语句

C语言中嵌套if-else语句。嵌套if-else语句的意思,就是在if-else语句中,再写if-else语句。其一般形式为:

if(判断条件)
{
  if(判断条件)
 {
  执行代码块;
 }
 else
 {
  执行代码块;
 }
else
{
 执行代码块;
}
}

先回顾一下之前写的比较3个数大小的代码,然后思考如何用“嵌套”的方式来解决这个问题。
在之前我们使用“&&”这个逻辑关系运算符号来解决两个条件同时“满足”的需求

if(a>=b && a>=c)
    print("%d",a);

上述代码,可以用“嵌套”的方式写成:

//如果a大于等于b,再进一步讨论a与c的关系
if(a>=b)
{
    //如果a大于等于c成立,则输出a,不成立则输出c
    if(a>=c)
    {
        printf("%d",a);
    }
    else
    {
        printf("%d",c);
    }
}

那如果a大于等于b不成立呢,我们的完整代码该如何编写呢?

//if-else嵌套,判断三个数大小
#include<stdio.h>
int main()
{
    int a,b,c;
    scanf("%d %d %d",&a,&b,&c);
    if(a>=b)
    {
        if(a>=c)
        {
            printf("%d",a);
        }
        else
        {
            printf("%d",c);
        }
    }
    else
    {
        if(b>=c)
        {
            printf("%d",b);
        }
        else
        {
            printf("%d",c);
        }
    }
    return 0;
} 

如何把代码修改的更简洁呢?
当if或else语句后只需执行一条代码时,可省略{ }。

if-else if 结构

95 “A”;86~100 “A”;70~85 “B”;60~69“C”;小于60“D”
要求输入A B C D ,输出成绩范围。
定义char grade 用if else实现

# include <stdio.h>
int main()
{
    char grade;
    printf("请输入等级:"); 
    scanf("%c",&grade);

    if(grade=='A')
    {
        printf("分数在86~100分"); 
    }
    else if(grade=='B')
    {
        printf("分数在70~85分"); 
    }
    else if (grade=='C')
    {
        printf("分数在60~69分"); 
    } 
    else if(grade=='D')
    {
        printf("分数在60分以下"); 
    } 
    else if(grade != 'A' ||grade != 'B' || grade !='C' ||grade !='D')
    {
        printf("输入错误!"); 
    }
    return 0;
}  

switch 分支选择

#include <stdio.h>
int main()
{
    char grade;
    scanf("%c",&grade);
    switch(grade)
    {
        case 'A':printf("分数在86~100分"); break; 
        case 'B':printf("分数在70~85分"); break; 
        case 'C':printf("分数在60~69分"); break; 
        case 'D':printf("分数在60以下"); break; 
        default:printf("输入错误!");
    }
}

从键盘输入一个月份,输出对应季节
12~2 冬季
3~5 春季
6~8 夏季
9~11 秋季

//从键盘输入一个月份,输出对应季节
    /*
    12~2 冬季
     3~5 春季
     6~8 夏季
     9~11 秋季
    */  
#include <stdio.h>
int main()
{
    int number ; 
    printf("请输入一个1~12的月份,以回车结束\n");
    scanf("%d",&number);
    switch (number) {
        case 12:
        case 1:
        case 2:
            printf("冬季");
            break;
        case 3:
        case 4:
        case 5:
            printf("春季");
            break;
        case 6:
        case 7:
        case 8:
            printf("夏季");
            break;
        case 9:
        case 10:
        case 11:
            printf("秋季");
            break;
        default:
            printf("输入错误!\n");
            break;
    }
    return 0;
}
    

输入一个不多于5位的正整数
1)输出位数
2)分别输出每位数字,中间为“,”分隔开
3)反向输出5位数

#include <stdio.h>
int main()
{
    int num, ten_th,thous,hund,ten,indiv;
    printf("请输入一个不多于5位的正整数:");
    scanf("%d",&num);
    if(num>9999 && num <=99999)
    {
        printf("这个数是一个五位数:");
        ten_th=num/10000;
        thous=(num-ten_th*10000)/1000;
        hund=(num-ten_th*10000-thous*1000)/100;
        ten=(num-ten_th*10000-thous*1000-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d,%d,%d\n",ten_th,thous,hund,ten,indiv) ;
        printf("反向输出:%d%d%d%d%d",indiv,ten,hund,thous,ten_th) ; 
    } 
    else if(num<=9999&&num>999)
    {
        printf("这个数是一个四位数:");
        thous=num/1000;
        hund=(num-thous*1000)/100;
        ten=(num-thous*1000-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d,%d\n",thous,hund,ten,indiv) ;
        printf("反向输出:%d%d%d%d",indiv,ten,hund,thous) ;
    } 
    else if(num<=999&&num>99)
    {
        printf("这个数是一个三位数:");
        hund=num/100;
        ten=(num-hund*100)/10;
        indiv=num%10;
        printf("%d,%d,%d\n",hund,ten,indiv) ;
        printf("反向输出:%d%d%d",indiv,ten,hund) ;  
    } 
    else if(num<=99&&num>9)
    {
        printf("这个数是一个两位数:");
        ten=num/10;
        indiv=num%10;
        printf("%d,%d\n",ten,indiv) ;
        printf("反向输出:%d%d",indiv,ten) ; 
    } 
    else if(num>=0 && num<=9)
    {
        printf("这个数是一个一位数:");
        printf("%d",num);
        printf("反向输出:%d",num); 
    } 
    else if (num>99999 || num < 0)
    {
        printf("输入错误!"); 
    }
    return 0;
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,723评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,003评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,512评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,825评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,874评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,841评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,812评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,582评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,033评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,309评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,450评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,158评论 5 341
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,789评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,409评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,609评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,440评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,357评论 2 352

推荐阅读更多精彩内容