03==C語言(運算符,基本數據類型)

運算符:


 表達式:由常量,變量,運算符組成,有確定的類型和數值.

 1.2 是常量,也可以看做是常量表達式.

 

 運算符

 1:算術運算符: +, -, *, /, %

   %:取餘或者叫模運算  13%5=3

   2個操作數,雙目運算符


#include <stdio.h>


//int main(int argc, const char * argv[]) {

//    int a = 10;

//    int b = 20;

//    int rst;

//    rst = a+b;

//    printf("%d + %d the answer is %d:\n",a,b,rst);

//    rst = a-b;

//    printf("%d - %d the answer is %d:\n",a,b,rst);

//    rst = a*b;

//    printf("%d * %d the answer is %d:\n",a,b,rst);

//    rst = a/b;//2int運算,結果還是int

//    printf("%d / %d the answer is %d:\n",a,b,rst);

//    rst = a%b;

//    printf("%d %% %d the answer is %d:\n",a,b,rst);//%%可以格式化輸出%,

//    printf("%d %c %d the answer is %d:\n",a,37,b,rst);//直接打印ASCII

//    printf("%d %c %d the answer is %d:\n",a,'%',b,rst);//直接打印字符.

//    return 0;

//}

//int main()

//{

//    int a = 13,b = 29;

//    int answer;

//    answer = ((a+b)/(a-b))%(a*b);

//    printf("the answer is :%d\n",answer);

//}


  2:自增自減運算符:  ++  , --

    單目運算符


//int main()

//{

//    int a = 10;

//    int b;

//    a++;//等價於a = a+1;

//    printf("a=%d\n",a);//a=11

//    b = a++;//等價於b=a;a=a+1;

//    printf("b=%d\n",b);//b=11

//    printf("a=%d\n",a);//a=12

//    printf("a=%d\n",a++);//a=12 等價於定義一箇中間變量c=a++;打印的時候打印a的值,打印完成後a的值自加1然後賦值給c.

//    printf("a=%d\n",a);//a=13

//

//}

//int main()

//{

//    int a = 10;

//    int b;

//    ++a;

//    printf("a=%d\n",a);//a=11

//    b = ++a;

//    printf("b=%d\n",b);//b=12等價於a=a+1;b=a;

//    printf("a=%d\n",a);

//    printf("a=%d\n",++a);

//    printf("a=%d\n",a);

//    

//}




 3:關係運算符 > , < , =, >= , <= ,== ,!=

    關係表達式成立的時候,表達式爲真,表達式的值爲1

    關係表達式不成立的時候,表達式爲假,表達式的值爲0

    表達式一般與if連用

    if(表達式)

    {

       //語句;(表達式成立時運行此語句)

    }


//練習:輸入兩個數字,輸出較大的值

//int main()

//{

//    printf("%d\n",10>2);

//    printf("%d\n",10==2);

//}

//int main()

//{

//    int a,b;

//    printf("請輸入兩個整數\n");

//    scanf("%d%d",&a,&b);

//    if (a>b) {

//        printf("the max number is %d",a);

//    }

//    else

//    {

//        printf("the max number is %d",b);

//    }

//    return 0;

//}



  4:邏輯運算符

     && 並且,就是兩個條件都成立,表達式纔是真.短路運算符

     || 或者,一個成立就成立,表達式就爲真.

     !  不是,非真就是假,非假就是真.非零就是真,0是假

 

 

 0~60   score>=0 && score<60

 學生判分系統

 0~59  不及格

 60~79 及格

 80~100優秀


//int main()

//{

//    int score;

//    printf("請輸入學生成績:\n");

//    scanf("%d",&score);

//    if ((score>=0) && (score<60)) {

//        printf("成績爲不及格:%d\n",score);

//    }

//    else if((score>=60) && (score<80)){

//        printf("成績爲及格:%d\n",score);

//    }

//    else if ((score>=80) && (score<=100)){

//        printf("成績爲優秀:%d\n",score);

//    }

//    else {

//        printf("輸入的學生成績不合法,請重新輸入.\n");

//    }

//    return 0;

//}


 5: 賦值運算符

    = ,+= ,*=, /=


//int main()

//{

//    int a = 10;

//    int b = 3;

////    a += b;//等價於a=a+b;

////    a -= b;//等價於a=a-b;

////    a *= b;//等價於a=a*b;

//    a /= b;//等價於a=a/b;

//    printf("a=%d\n",a);

//}

//

//int main()

//{

//    int a,b;//一次性定義同類型的兩個變量

//    a = b = 5;//b=5是個賦值表達式,值和類型與b保持一致.

//    printf("a=%d,b=%d\n",a,b);

//}


 6: 逗號運算符,優先級特別低

   表達式1,表達式2,表達式3,.....表達式n

    整個表達式的值=表達式n   前面表達式都會運算.


//int main()

//{

//    int a = 5;

//    int b = 10;

//    printf("%d\n",(a++,b++));//結果爲10

//    printf("a=%d,b=%d\n",a,b);//結果爲a=6,b=11

////    printf("%d",1,2,3,4);//結果爲1

////    printf("%d",(1,2,3,4));//結果爲後面(1,2,3,4)變成一個逗號表達式

//    return 0;

//}



 7: 條件運算符

    (表達式1)?表達式2:表達式3;

    先運行表達式1,如果表達式1成立運行表達式2,並且返回表達式2的值;如果表達式1不成立運行表達式3,返回表達式3的值.


//int main()

//{

//    int a = 10;

//    int b = 12;

//    int c = 32;

//    int max = (((a>b)?a:b)>c)?((a>b)?a:b):c;//求三個數的較大者.

//    int min = (a<b)?a:b;

//    printf("max = %d\n",max);

//    printf("min = %d\n",min);

//}


 8: sizeof(類型或者表達式)

    sizeof表達式是unsigned long


//int main()

//{

//    int a = 10;

//    printf("sizeof(int)=%lu\n",sizeof(int));

//    printf("sizeof(a)=%lu\n",sizeof(a));

//    printf("sizeof(a/2)=%lu\n",sizeof(a/2));

//    printf("sizeof(a/2.0)=%lu\n",sizeof(a/2.0));

//    return 0;

//}


 9:位操作  bit

    >> 右移  相當於/2^n

    << 左移  相當於*2^n

    & 位與     兩個位同時爲1的時候才取1

    | 位或     只要有一個位爲1就取1

    ~按位取反



//int main()

//{

//    char ch = 0x33;//0011,0011

//    printf("before ch=%d\n",ch);

//    ch = ch>>1;

//    printf("ch=%d,0x%x\n",ch,ch);//0001,1001  -->  ch=25,0x19

//    ch = 0x33;

//    ch = ch<<1;

//    printf("ch=%d,0x%x\n",ch,ch);//0110,0110  -->  ch=102,0x66

//    ch = 0x33;

//    ch = ch&0xf0;

//    /*

//     0x33:0011,0011

//   & oxf0:1111,0000   //可以取出ch的高四位

//     ---------------

//         :0011,0000  -->  0x30

//     */

//    printf("ch=%d,0x%x\n",ch,ch);//0011,0000  -->  ch=48,0x30

//    

//    ch = 0x33;

//    ch = ch|0xf0;

//    /*

//     0x33:0011,0011

//   | oxf0:1111,0000   //ch的高四位設置成1

//     ---------------

//         :1111,0011

//     */

//    printf("ch=%d,0x%x\n",ch,ch);//0011,0000  -->  ch=-13,0xf3

//    

//    ch = 0x33;

//    ch = ~ch;

//    /*

//     ch 0x33:0011,0011

//     ~ch    :1100,1100

//     -------------------

//            :cc

//     */

//    printf("ch=%d,0x%x\n",ch,ch);//1100,1100  -->  ch=-52,0xcc

//}




 10:關係運算符

     括號>單目>算術>關係>邏輯>賦值>逗號


//int main()

//{

//    int a;

//    printf("%d\n",1+2>1);//結果爲1,說明算術運算符優先級高於關係運算符 算術>關係

//    printf("%d\n",0>2||1);//結果爲1,說名關係運算符優先級高於邏輯運算符關係>邏輯

//    printf("%d\n",a=0||1);//結果爲1,說明邏輯運算符優先級高於賦值運算符邏輯>賦值

//    printf("%d\n",a);//j結果爲1

//    a=100,300;

//    printf("%d\n",a);//結果爲100,說明賦值運算符優先級高於逗號運算符   賦值>逗號

//    

//}

//int main()

//{

//    int a =5;

//    int b;

//    b = 1 || a++;//邏輯運算的短路特性, ||  邏輯表達式中,1 || 表達式1     表達式1不會運算

//    printf("b=%d,a=%d\n",b,a);//b=1,a=5

//    b = 0 && a++;//邏輯運算的短路特性, &&  邏輯表達式中,0 && 表達式1     表達式1不會運算

//    printf("b=%d,a=%d\n",b,a);

//}

//int main()

//{

//    char ch;

//    ch = 20;//int 賦值給 char   -->   隱式的類型轉化

//    printf("ch = %d\n",ch);

//    ch = 564;

//    printf("ch = %d\n",ch);

//    printf("564 = 0x%x,ch = 0x%x\n",564,ch);//564 = 0x234,ch = 0x34  如果超過char的範圍,那麼截斷保留低八位

//    

//    int a = 3.14;//double轉換成 int

//    printf("a=%d\n",a);//結果爲3

//    //高精度給低精度類型的數據賦值,可能會損失精度

//    

//    ch = 25;

//    a = ch;

//    printf("a=%d\n",a);//低精度給高精度賦值,不會損失精度

//    

//    ch = -1;

//    a = ch;

//    printf("a=%d\n",a);//爲了保持數據不變,進行位擴展,在前面填充的位數據全部填充爲因爲char1個字節,8bit int4個字節,32bit 因爲char爲負數,最高位爲1所以在數據填充的時候前面所有數據全部填充爲1

//}



  注意: 1, 整型運算,如果有long,都轉成long運算.

       2, 如果有double,轉成double運算.

       3, 強制類型轉換  ,(類型)表達式;

       4, charshort運算時轉換成int運算(可以保證精度)


//int main()

//{

//    int a = 23;

//    int b = 10;

//    long l = 30;

//    printf("sizeof(a+l)=%lu\n",sizeof(a+l));//sizeof(a+l)=8

//    printf("sizeof(a/2.0)=%lu\n",sizeof(a/2.0));//sizeof(a/2.0)=8

//    printf("%f\n",(float)a/b);//2.300000   只對a作用強轉,a轉換成float,然後floatint運算,都轉成float

//    printf("%f\n",(float)(a/b));//2.000000 錯誤的,a/bint,結果爲2,然後整體轉換成float---->2.000000

//}

//int main()

//{

//    char ch = 34;

//    short s = 25;

//    printf("sizeof(ch+s)=%lu\n",sizeof(ch+s));//sizeof(ch+s)=4

//    printf("sizeof(~ch)=%lu\n",sizeof(~ch));//sizeof(~ch)=4

//    int i;

//    i = ch + s ;//通過賦值,隱式的轉成左邊的類型,保證左邊的類型能接收就可以.

//}




基本數據類型




 1:字符輸入輸出

   getchar()

   putchar(ch)


#include <stdio.h>


//int main(int argc, const char * argv[]) {

//    char ch = 'a';

//    char c = 's';

//    putchar(ch);

//    putchar('\n');

//    putchar('s');

//    putchar('\n');

//    putchar('f');

//    putchar('\n');

//    putchar(c);

//    return 0;

//}

//int main()

//{

//    char ch;

//    ch = getchar();//去輸入緩衝區獲取一個字符,賦值給ch.等待用戶輸入,輸入回車鍵的時候才把用戶輸入的字符送入輸入緩衝區

//    printf("獲取到的字符是%c,該字符的ASCII%d\n",ch,ch);

//    ch = getchar();//如果第一次輸入的是a \n那麼此次獲取的是\n字符.

//    printf("獲取到的字符是%c,該字符的ASCII%d\n",ch,ch);

//    return 0;

//}



 printf("格式化字符串",參數列表);

 scanf("格式化字符串",參數的地址列表);

 

 2:printf 格式控制

   %3d : 打印右對齊,前面不足用空格補齊.如果說本來位寬就已經 >=設定的3 就不起作用.

   %03d: 打印右對齊,前面加0補足.

   %.2f: 小數點後保留兩位小數

   %5.2f: 一共打印五位寬,右對齊,不足位加空格補齊.包含小數點.

   %1.2f: 打印右對齊,位寬大於設置位寬,不做處理

 


//int main()

//{

//    int score1 = 100;

//    int score2 = 5;

//    int score3 = 12;

//    float pi = 3.14;

//    printf("小明分數 : %3d\n",score1);//小明分數 : 100

//    printf("小宏分數 : %3d\n",score2);//小宏分數 :   5

//    printf("小量分數 : %03d\n",score3);//小量分數 : 012

//    printf("pi = %f\n",pi);//pi = 3.140000默認6位小數

//    printf("pi = %.2f\n",pi);//pi = 3.14 保留兩位小數

//    printf("pi = %5.2f\n",pi);//pi =  3.14右對齊

//    printf("pi = %1.2f\n",pi);//pi = 3.14 不做任何處理

//    printf("hello ,%d",2015);

//}


//int main()

//{

//    int i;

//    char ch ;

//    short s;

//    printf("請輸入一個int\n");

//    scanf("%d",&i );

//    printf("i = %d\n",i);

//    

//    getchar();//取出上次殘留的'\n'字符

//    printf("請輸入一個char\n");

//    scanf("%c",&ch);

//    printf("ch = %c,ASCII=%d\n",ch,ch);

//    

//    printf("請輸入一個short\n");

//    scanf("%hd",&s);//取字符的時候纔會把'\n'取出.但是取整數是沒有問題的,因爲'\n'不是有效的整數scanf會自動忽略,它只是一個有效的字符.

//    printf("s = %hd\n",s);

//}


//int main()

//{

//    char str[100];

//    printf("請輸入一個字符串\n");

//    scanf("%s",str);//str是字符數組的名字,裏面存儲的是數組的首地址不能接收空格, scanf遇到空格會分割字符串

//    printf("%s\n",str);

//    return 0;

//}



 3:scanf("格式化字符串",參數化列表);

  注意點:

   1:不能顯示非格式字符,格式化字符串不能寫提示字符,包括轉義字符'\n'.

   2:scanf根據空格 ,回車,Tab鍵分個字符.

   3:如果格式化字符串中有非格式化字符,那麼在輸入的時候也要輸入該非格式化字符



//int main()

//{

//    int a;

//    int b;

//    printf("請輸入2個整數:\n");

//    scanf("%d",&a);

//    scanf("%d",&b);

//    scanf("%d%d",&a,&b);//合理的輸入空格,回車,Tab都行

//    scanf("a=%d,b=%d",&a,&b);//合理的輸入是a=1,b=4

//    printf("a=%d,b=%d",a,b);

//    return 0;

//}

//int main()

//{

//    char ch1;

//    char ch2;

//    printf("請輸入兩個字符\n");

//    scanf("%c%c",&ch1,&ch2);//正確是輸入是兩個字符連續輸入  例如ab  加入任何其他符號都會被認爲是有效的字符.

//    scanf("ch1=%c,ch2=%c",&ch1,&ch2);//正確的輸入ch1=e,ch3

//    printf("ch1 = %c.ASCII = %d\n",ch1,ch1);

//    printf("ch2 = %c.ASCII = %d\n",ch2,ch2);

//}

//int main()

//{

//    int a;

//    printf("請輸入一個整數\n");

//    scanf("%3d",&a);//輸入123456,結果只取前三位123..但是不能用%.2f這類.因爲不能確定一個數字是多長,有可能是溢出數據

//    printf("a=%d\n",a);

//}

/*

 4:字符串的接收,字符集的接收

    [a-z]  表示合法的字符集,只能接收小寫字母a-z,遇到其他非法的字母就停止接收.

    [^\n]  表示補集,只有'\n'是唯一的非法字符,遇到'\n'就停止接收


int main()

{

    char str[100];

    printf("請輸入一個字符串\n");

//    scanf("%s",str);//輸入hello world ,接收hello

    scanf("%[^\n]",str);//遇到'\n'停止接收,可以接收空格.

//    scanf("%[a-z]",str);//只能接收a-z之間的數字.

    printf("str = %s\n",str);

    return 0;

}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章