C语言选择结构程序设计相关知识【C语言学习笔记】

C/C++
245
0
0
2022-11-30

1.关系运算符:

> < >= <= == !=

作用:判断关系运算符左右两边的表达式是否满足条件。

5>6---->否(0)

5>=5--->是(1)

优先级:

1.算术运算符>关系运算符>赋值运算符

2.在关系运算内部:(> < >= <=)>(== !=)

#include<stdio.h>
int main(){
    int a=5,b=6,c=2;
    printf("%d\n",a+b>b);//11>b  是(1) 
    printf("%d\n",a+b!=b+'a');//11!=10  是(1) 
    printf("%d\n",a+b>b>a==b-a);
    //11>b>a=1 
    //1>a==1 
    //0==1  否(0) 
    printf("%d\n",b>a+b>a!=b-a>1);
    //b>11>a!=1>1 
    //0>a!=1>1 
    //0!=0 否(0) 
    return 0;
}

2.逻辑运算符:&&(与)||(或)!(非)

与运算:

a&&b--->如果a和b同时为真(满足),结果为真(是),如果有一个为假,结果为假。

例:1&&1=1; 1&&0=0; 0&&1=0; 0&&0=0 5&&-2=1

注意:C语言中,非0数表示真,0表示假。

或运算:

a||b--->如果a和b为真(满足),结果为真(是),如果a和b同时为假,结果为假。

例:1||1=1; 1||0=1; 0||1=1; 0||0=0; -9||7=1

非运算:

!a--->如果a为真,!a为假,如果a为假,!a为真。

例:!1=0; !0=1; !-1=0

优先级:

!(非)>算术运算符>关系运算符>&&和||>赋值运算符

赋值运算符:从右向左 算术运算符、关系运算符、逻辑运算符:从左到右

例题:若a=6,b=4,c=2,则表达式!(a-b)+c-1&&b+c/2的值是多少?

解题思路:

!(2)+2-1&&4+2/2

0+2-1&&4+1

1&&5=1

逻辑运算特性:

存在a&&b,a如果为0,&&后面的b不执行!

存在a||b,a如果为1,||号后面的b不执行!

if语句:

if(只要能返回1或0){

判断是否满足条件

}

例1:定义两个整数,按照由小到大的顺序输出。

#include<stdio.h>
int main(){
    //小 大 按原样输出 
    //大 小 交换输出 
    int a,b,t;
    scanf("%d%d",&a,&b);
    if(a>b){
    //a和b交换
    t=a;
    a=b;
    b=t;
    }
    printf("%d%d",a,b);
    return 0;
} 

例2:输入一个年付,判断这个年份是否是闰年?

可知:int year 闰年要能被4整除并且不能被100整除或能被400整除

即得:(year%4==0&&year%100!=0)|| year%400==0

#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    if((year%4==0&&year%100!=0)||year%400==0){
        printf("是闰年!"); 
    }else{
        printf("不是闰年!");
    }
    return 0;
}

另可写成:

#include<stdio.h>
int main(){
    int year;
    scanf("%d",&year);
    if((year%4==0&&year%100!=0)||year%400==0)
        printf("是闰年!"); 
    else 
        printf("不是闰年!");

    return 0;
}
如果if或else后只要一句话或一个不可分割的整体,{}可以省略。

例3.分段函数

img

#include<stdio.h>
int main(){
    double x,y;
    scanf("%lf",&x);
    if(x<1)
        y=x;
    else if(x>=1&&x<10)
        y=2*x-1;
    else if(x>=10)
        y=3*x-11;
    printf("y=%f",y);
    return 0;
} 

条件运算符(三目运算符)

如果在条件语句中,只执行单个的赋值语句时, 常可使用条件表达式来实现。不但使程序简洁,也提高了运行效率。

条件运算符?它是一个三目运算符,即有三个参与运算的量。

由条件运算符组成条件表达式的一般形式为:

表达式1 ? 表达式2 表达式3

简洁的if...else语句步骤

如果表达式1为真,执行表达式2;

如果表达式1为假,执行表达式3。

:给定两个整数,输出最大值。

#include<stdio.h>
int main(){
    int a=10;
    int b=20;
    int max;
/*方法一
    if(a>){
        max=a;
    }
    else{
    max=b;
}
*/
/*方法二
    max=a>b?a:b;
*/
/*方法三
    a>b?max=a:max=b;
    printf("max=%d",max);
*/
//方法四
    a>b?printf("%d",a):printf("%d",b); 
    return 0;
} 

:输入一个字符,判断它是否为大写字母,如果是大写字母,转换为小写,如果不是大写字母,则不转换。

#include<stdio.h>
int main(){
    char ch;
    ch=getchar();// scanf("%c",&ch);
/*    if(ch>='A'&&ch<='Z'){
        ch=ch+32;
    }
    ch=ch>='A'&&ch<='Z'?ch+32:ch;
    putchar(ch);
*/ 
    ch>='A'&&ch<='Z'?putchar(ch+32):putchar(ch); 
    return 0;
}

switch语句

switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。

switch语句表达式:

switch(表达式){
    case 常量表达式1:语句块1;
    break;
    case 常量表达式2:语句块2;
    break;
    ……
    case 常量表达式m:语句块m;
    break;
    default:语句块n;
    break;
}

语句结构中的“表达式”的类型为整型(包括char),default语句可以省略,各case标号出现的次序不影响程序的结果,每个case后的标号应不相同。多个case标号后可以共用一组执行语句。

例题:用户输入成绩的等级,输出相应的成绩范围。如:输入A,输出85-100;输入B输出70-84;输入C输出60-69;输入D输出59-0.

#include<stdio.h>
int main(){
    char grade;
    grade=getchar();
    //如果switch中省略掉break,就会从第一个符合条件的语句开始执行,直到switch语句执行完成。 
    switch(grade){
        case'A':printf("100-85\n");break;//跳出  
        case'B':printf("84-70\n");break;
        case'C':printf("69-60\n");break;
        case'D':printf("59*0\n");break;
        default:printf("输入成绩错误!");
    } 
    return 0;
} 

典型例题:输入一个5位数,求出每一位数的值。

#include<stdio.h>
int main(){
    int a;
    scanf("%d",&a);
    int ten_thou,thou,hun,ten,indiv;
    ten_thou=a/10000;//万
    thou=a%10000/1000;//千
    hun=a%10000%1000/100;//百
    indiv=a%10000%1000%100%10;//printf("ten_thou=%d\n",ten_thou);
    printf("thou=%d\n",thou);
    printf("hun=%d\n",hun);
    printf("ten=%d\n",ten);
    printf("indiv=%d\n",indiv); 
    return 0;
} 

练习例题:输入一个三位整数,判断这个三位数是否是水仙花数。如果153=1x1x1+5x5x5+3x3x3,就是水仙花数。