美文网首页
3分支程序设计

3分支程序设计

作者: 别花春水 | 来源:发表于2019-01-19 18:32 被阅读0次
     #include <stdio.h> //input & output
     #include <stdlib.h> //pause
    

    关系运算符和表达式

        (a>0)
        >=  不小于
        &&  (变量)与运算
        ||  (变量)或运算
        !   非运算【右结合性,从右往左算】
        ==  等于
        !=  不等于
    
        a+b>c+d 先算加法再比较不等号左右
        允许嵌套:
            a>(b>c);
            a!=(b=c);
    

    关系表达式的值是“真”则返回值是1;

    i=(5>0) 则i=1

    void main()
    {
        char c = 'k';
        int i = 1, j = 2, k = 3;
        float x = 3e+5, y = 0.85;
        printf("%d,%d\n", 'a' + 5 < c, -i - 2 * j >= k + 1);
        printf("%d,%d,\n", 1 < j < 5, x - 5.25 <= x + y);
        printf("%d,%d\n", i + j + k == -2 * j, k == j == i + 5);    
    //先算k==j,返回值0;再算0==i+5,返回值0
        system("pause");
    }
    

    与或非运算

    int i;
    i = 3 && 5; 则返回i = 1 //非零的值就返回1
    i = 3 && 0; 则返回i = 0
    i = 3 || 0; 则返回i = 1
    i = 0 || 0; 则返回i = 1
    
    int i, a = 3, b = 5;
    i = 0 || (b > a);   则返回i = 1
    
    int i = 0;
    !i; 则返回i = 1
    
    • 优先次序
    a > b && c > d          等价于 (a > b) && (c > d);
    !b == c || d < a        等价于 ((!b) == c) || (d < a);
    a + b > c && x + y < b  等价于 ((a + b) > c) && ((x + y) < b);
    
    
    void main()
    {
        char c = 'k';
        int i = 1, j = 2, k = 3;
        float x = 3e+5, y = 0.85;
        printf("%d,%d\n", !x * !y, !!!x);
        printf("%d,%d,\n", x || i && j - 3, 1 < j&&x < y);
        printf("%d,%d\n", i == 5 && c && (j = 8), x + y || i + j + k);
        system("pause");
    }
    

    if

    if(5==a)

    if(a)都是可以run的

    if(a=5)是把5赋值给a,即赋了一个“真”,其后语句一定可以跑

    • if的三种形式:
    void main()
    {
        int a, b, max;
        printf("\n input two num:");
        scanf_s("%d,%d", &a, &b);
        max = a;
        if (max < b)
        {
            max = b;
        }
        printf("\nmax=%d", max);
        system("pause");
    }
    
    
    void main()
    {
        int a, b, max;
        printf("\n input two num:");
        scanf_s("%d,%d", &a, &b);
        if (a > b)
        {
            printf("max=%d\n", a);
        }
        else
        {
            printf("max=%d\n", b);
        }
    
        system("pause");
    }
    
    
    /*
    if()
    xxx;
        else if()
        xxx;
        else if()
        xxx;
        else
        xxx;
    */
    
    void main()
    {
        char c;
        printf("\n input a char:");
        c = getchar();
        if (c < 32) printf("this is a control char\n");
        else if (c >= '0'&&c <= '9') printf("this is a digit\n");
        else if (c >= 'A'&&c <= 'Z') printf("this id a capital letter\n");
        else if (c >= 'a'&&c <= 'z') printf("this is a small letter\n");
        else
        {
            printf("this is another char\n");
        }
        system("pause");
    }
    
    
    • 输入三个数abc,由小到大输出
    //输入三个数abc,由小到大输出
    float swap(float *a, float *b);
    void main()
    {
        float a, b, c;
        printf("input numbers a,b,c:\n");
        scanf_s("%f,%f,%f", &a, &b, &c);
    
        if (a > b) swap(&a, &b);
        if (a > c) swap(&a, &c);
        if (b > c) swap(&b, &c);
    
        printf("a=%f,b=%f,c=%f\n", a, b, c);
        system("pause");
    }
    float swap(float *a, float *b)
    {
        float t;
        t = *a;
        *a = *b;
        *b = t;
    }
    

    if语句的嵌套

    if ()
    {
        if ()
        {
            ……;
        }
    }
    

    else与哪个if近就与哪个配对

    //eg1
    void main()
    {
        int a, b;
        printf("please input A,B:");
        scanf_s("%d,%d", &a, &b);
        if (a != b)
            if (a > b) printf("A>B\n");
            else  printf("A<B\n");
        else  printf("A=B\n");
        system("pause");
    }
    
    //eg2 is better
    void main()
    {
        int a, b;
        printf("please input A,B:");
        scanf_s("%d,%d", &a, &b);
        if (a == b) printf("A=B\n");
        else if (a > b) printf("A>B\n");
        else  printf("A<B\n");
        system("pause");
    }
    

    条件运算符和条件表达式:三目运算

    a ? b : c
    若a为真则整个式子值为b,否则为c。

    if (a > b) max = a;
    else max = b;
    
    //可用条件表达式写为
    max = (a > b) ? a : b;
    

    条件运算符的运算优先级低于关系运算符和算术运算符,但高于赋值符

    所以
    max = (a > b) ? a : b;
    等价于
    max = a > b ? a : b;
    

    条件运算符的结合方向是自右向左

    a > b ? a : c > d ? c : d
    等价于
    a > b ? a :( c > d ? c : d )
    
    • 例子
    void main()
    {
        int a, b;
        printf("\n input two numbers:");
        scanf_s("%d,%d", &a, &b);
        printf("max=%d", a > b ? a : b);
        system("pause");
    }
    
    • 输入一个字符,判断是否是大写字母。如果是,转换为小写字母;否则不转换。输出最后得到的字符。
    void main()
    {
        char ch;
        scanf_s("%c", &ch);
        ch = (ch >= 'A'&&ch <= 'Z') ? (ch + 32) : ch;
        printf("%c\n", ch);
        system("pause");
    }
    
    

    switch语句:多分支选择

    计算表达式的值,并逐个与其后的常量表达式值相比较,

    switch (表达式){
    case 常量表达式1 :语句1;
        ...
    case 常量表达式n :语句n;
    default         :语句n + 1;
    }
    

    remark:

    • 不同case的常量不能相同
    • case后允许有多个语句,可以不用{}括起来
    • default顺序可以变动
    • default子句可以省略不用

    可以多个case执行同一个操作,比如让c = 1或2时d赋值1

    switch (c) {
    case 1:
    case 2:
        d = 1;
        break;
    case ...:
        ........
    }
    

    例子:

    void main()
    {
        int a;
        printf("input integer number:");
        scanf_s("%d", &a);
        switch (a)
        {
        case 1: printf("monday\n");
                break;  
    //break达到目的就跳出程序块。否则输入3,就会输出星期三以后所有星期。
        case 2:printf("tuesday\n"); break;
        case 3:printf("wednesday\n"); break;
        case 4:printf("thursday\n"); break;
        case 5:printf("friday\n"); break;
        case 6:printf("saturday\n"); break;
        case 7:printf("sunday\n"); break;
        default:printf("error\n");
        }
    
        system("pause");
    }
    
    • 输入三个整数,输出最大数和最小数。
    //解法1
    void main()
    {
        int a, b, c, min, max;
        printf("input three integer numbers:");
        scanf_s("%d,%d,%d", &a, &b, &c);    //scanf里最好不要加格式控制\n
        if (a > b)
        {
            max = a; min = b;
        }
        else
        {
            max = b; min = a;
        }
        if (max < c) max = c;
        if (min > c) min = c;
        printf("min=%d\nmax=%d", min, max);
        system("pause");
    }
    
    //解法2
    void main()
    {
        int a, b, c, min, max;
        printf("input three integer numbers:");
        scanf_s("%d,%d,%d", &a, &b, &c);    //scanf里最好不要加格式控制\n
        max = a > (b > c ? b : c) ? a : (b > c ? b : c);
        min = a < (b < c ? b : c) ? a : (b < c ? b : c);
        printf("min=%d\nmax=%d", min, max);
        system("pause");
    }
    
    • 计算机程序:用户输入运算数和四字运算符,输出计算结果
    void main()
    {
        long float a, b;
        char c;
        printf("input expression: a+(-,*,/)b\n");
        scanf("%lf%c%lf", &a, &c, &b);
        switch (c) {
        case '+':printf("%f\n", a + b); break;
        case '-':printf("%f\n", a - b); break;
        case '*':printf("%f\n", a * b); break;
        case '/':printf("%f\n", a / b); break;
        default:printf("error\n");
        }
        system("pause");
    }
    
    
    • 输入一个年份,判断是否为润年
    void main()
    {
        int a;
        printf("input a Year=");
        scanf("%d", &a);
        if (!(a % 4) && (a % 100))
            printf("这是普通闰年\n");
        else 
            if (!(a % 400))
                printf("这是世纪闰年\n");
            else
                printf("这不是闰年\n");
    
        system("pause");
    }
    
    
    • 一个整数加上100后是完全平方数,再加上168又是一个完全平方数,请问该数是多少?
    void main()
    {
        long int a, y, z;
        printf("一个整数加上100后是完全平方数,再加上168又是一个完全平方数,\
    请问该数是多少?\n");
        a = -100;
        while (a <= 1000000000) {
            y = sqrt(a + 100);
            z = sqrt(a + 268);
            if (y == sqrt(a + 100) && z == sqrt(a + 268))
                printf("%ld\n", a);
            a = a + 1;
        }
        system("pause");
    }
    
    
    • 输入年 月 日,判断这一天是这一年的第几天
    int runnian(int a);
    void main()
    {
        int a, b, c, ryear;
        long int num;
        printf("输入年 月 日,\
    判断这一天是这一年的第几天\n");
        printf("年=");
        scanf("%d", &a);
        printf("\n月=");
        scanf("%d", &b);
        printf("\n日=");
        scanf("%d", &c);
        ryear = runnian(a);
        if (b == 1)
            num = c;
        else
            if (b == 2)
                num = 31 + c;
            else
                if (b > 2)
                    num = 31 + 28 + 30 * (b - 3) + (b - b % 2) / 2 - 1 + c + ryear;
    
        printf("\n这一天是今年的第%ld天 \n", num);
        system("pause");
    }
    
    int runnian(int a)
    {
        int c;
        printf("\nthis is Year %d\n", a);
        if (!(a % 4) && (a % 100))
        {
            printf("\n这是普通闰年\n"); c = 1;
        }
    
        else
            if (!(a % 400))
            {
                printf("\n这是世纪闰年\n"); c = 1;
            }
            else
            {
                printf("\n这不是闰年\n"); c = 0;
            }
        return c;
    }
    

    相关文章

      网友评论

          本文标题:3分支程序设计

          本文链接:https://www.haomeiwen.com/subject/qymzdqtx.html