3分支程序设计

 #include  //input & output
 #include  //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) printf("A>B\n");
    else  printf("A

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

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分支程序设计)