亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C語言基礎及細節

發布時間:2020-08-26 15:23:01 來源:網絡 閱讀:386 作者:Wsundaysky 欄目:編程語言
簡單來說什么是C語言,就是用c寫的語言就是C語言。接下來言歸正傳。
1.沒有注意數據類型存儲范圍
     int main(int argc, char **argv)
     {
             char a;
             a = 1;
             for (a=0; a<128; a++)
                     printf("#");
             return 0;
     }
你猜是循壞了128,還是死循環呢? 答案是死循環,因為a的類型是有符號char型,它的取值范圍為-128-127;當a=127時,a<128,會繼續執行,代碼執行完之后a會加1,但是a的最大值為127,在加1就會變成最小值-128,為什么會變成-128呢,就是我們平時的時鐘,時間為12:59時,再過一分鐘就會變成1點,這就簡單的說明了為最大值加一會變成最小值,最小值減1就會變成最大值。在計算中數據都是以2進制進行存儲的,127在計算機存儲時為0x7f,加1,就會變成0x80,因為char中0x80表示最小值-128;所以-128小于128,以此類推,a<128;永遠為真。

2.打印類型時,選擇正確的格式。
例如 double a = 4.5;
printf("%lf",a);
一定不能使用%f打印,否則會報警告
小結:只要時double ,long類型的數據打印時別忘了加上l
3.顯示無符號整數
%u:顯示無符號整數
%o:顯示無符號八進制
%x:顯示無符號16進制
4.各種數據類型的變量與0進行比較正確的書寫方式
int a=5;
if (0 == a);

 char ch = 'a';
 if ('\0' == char)

 float f =0.152;
 if ((x>-0.000 001) && (x<0.000 001))

 bool  flag = 1;
 if ( flag )

 int *p = &a;
 if ( NULL == p)

5.轉義字符:轉移字符是一種特殊的字符常量,轉移字符常以反斜線"\"開頭
常用的轉移字符:
\a:蜂鳴,響鈴
\b:回退:向后退一格
\f:換頁
\n:換行:光標到下行行首
\r:回車,光標到本行行首
\t:水平制表符
6.調試代碼有很多中一般分為printf調試,bug調試等、
我要講的是用printf調試,這種方式方便簡單易操作。
利用FILE,LINE,FUNCTIONDATE,
TIME實現代碼跟中
FILE:顯示代碼的文件名;
FUNCTION:顯示調用函數的名稱,沒有默認為主函數
LINE:顯示所在的行數;
TIME:顯示時間
DATE:顯示日期
7.數據類型的轉換
在多種數據類型混合運算時,系統一般自動完成類型轉換
轉化的規則:存儲長度較短的轉化成存儲長度較長的,并且不丟失
(a)自動轉換 :
int a=5; double d = 4.5;
a + d ;結果是double類型的
(b)賦值轉換
int a=5; double d = 4.5; char ch;
ch = a + d ;結果是char類型的
(c)強制轉換
a = (int ) d + c;
字符型數據賦值給整型變量時,將字符數據放到整型變量存儲單元的低八位中
--對于無符號類型,則將字符的8位放到整型變量低八位中,高24位補零
--對于有符號字符類型,若最高位為0,整型變量高24為補0,若字符最高位為1 ,則高24位補1
char 0000 0001 --> 0000 0000 0000 0000 0000 0001
1111 1111 --> 11111 1111 1111 1111 1111 1111
將一個整型數據賦值給一個char類型變量時,直接將其低八位原封不動的送到char型變量(即截斷),精度會丟失。
將整型數據賦給浮點型變量時,數值不變,但以浮點型形式存放到變量中精度可能丟失;
將浮點型數據賦給整型數據,直接將浮點型數據存放到int類型存儲空間中;
將浮點型賦給double類型數據,直接將30--22位放到double類型62--52中,其他的放到剩下51位中,
將double類型數據賦給float類型,直接將取7位有效數字放到浮點型存儲空間中。

8.運算符
運算符是非常常見的,無論你用那種語言寫編程都會用到運算符,談到運算符,就會想到他的優先級,這里我們不講他的優先級,直降容易出錯的地方。
優先級:不是誰的優先級高就先算誰,所謂的優先級就是結合型,誰的優先級高就和誰結合,至于知怎算個的要根據優先級運算順序,相同的優先級運算順序時由編譯器決定的
(a) ++、 --
a++:就是獻給狀態值a;然后自行加一
++a; 先自加一,再給a+1的狀態結果;
-- a ; a++ 同理
(b) 不要對同一個變量,在一個表達式多次賦值
例如: a = 5;
c = a++ + a++ + a++; //編譯器不知道從那邊開始算
a = 5;
a = a++;同理
printf("%d %d %d %d %d\n", a++, a++, a++, a++, a++);
你要想這么做,就把a++ 結果賦值給其他變量,用其他變量進行計算
(c) 位移(只能用于整數或者字符型)

                無符號數據類型:右移時左邊高位補0;左移時右邊補0;
                有符號:正數:右移時,左邊補0;左移時右邊補0;
                                            負數:右移時,左邊補1;左移時,右邊補0
                對于正數右移一位相當于除以2,左移1位相當于乘以2;
    (d)邏輯運算符
                &  |  ^
                &  :兩者都是1,才為1,否則位0;  功能置零
                |   :兩者只有要一個為1,結果為1,否則為0,  功能置一
                ^   :  相同為假,不同為假, 功能取反
                舉例: &     A & 1 = A ; A & 0 = 0
                                    |       A  | 1 = 1;     A | 0 = A;
                                        ^       A ^ 1 = ~A ;  A ^ 0 = A;
        (e) 條件運算符:三目運算符
           表達式1 ? 表達式2 : 表達式3
             條件運算符運算有先后順序的:先算表達式1,若表達式1為真,算表達式2,結束,否則,計算表達式3,算完結束
             例題: a = b=c= 1;
                                    x = a++ ? b++ ?c--:c++:b--?c++:c--;
                                    結果為:a=2;b=2,c=1;
         (f)逗號運算符
                 優先級最低,將兩個表達式鏈接起來,從左往右以此計算、
                 注意:并不是任何地方的出現的逗號都是逗號運算符,例如函數參數,也是用逗號來間隔的

9.scanf和printf函數:
   scanf:
     修飾符   功能
     m   :輸ru數據寬度,遇到空格或不可轉換字符結束
     *  :抑制符,指定輸入項讀入后不賦給變量

     輸入分割符的指定:
         一般以空格、TAB或回車鍵作為分隔符
         其他字符作分割符:格式串中兩個格式符間字符

例題:scanf("%d,%d,%d",&a,&b,&c);
                輸入方式必須以:12,13,14回車
            scanf("%d  ",&a);
            輸入 12   12回車才能結束否則不結束   過濾分割符,要輸入兩次
            scanf("a=%d",&a);
            輸入:必須以“a=”開頭+數字+回車 結束
            scanf("%*4d",&a);
            輸入:132345       a=45;
            scanf("%d%c",&a,&c);
            輸入 12回車  就結束了  因為%c會自動讀取回車、空隔

             char ch;
             int i;
             for (i=0; i<10; i++)
             {
                     printf("i=%d\n",i);
                     scanf("%c",&ch);
                     printf("%c\n",ch);
                     getchar();  //表示取走回車鍵,只能取走一次
             }
             %s he %c  遇到空格,回車鍵就自動停止
             scanf("%[^\n]",&a);//表示不取空格鍵
             scanf("%[a-z]",&a);//表示只取a-z

    10.switch:
        是一種多路判斷語句,他判斷表達式置是否與整型或字符常量例表中的某個值相匹配,若找到了相應的匹配,就會執行與常量關聯的語句,switch,case,和default都是關鍵字。語句可以時簡單或符合語句。
        switch后面只需要用圓括號括起來,而且switch的主題用{}括起來,計算表達式的數據類型與指定case常量數據類型匹配
        switch后的表達式可以包含任何變量名,也可以時常量
        case后面只能時常量(整型和字符型)
        case后面長量不能為相同,可以不按照順序,不影響程序結果,但是一般時按照順序。
        case 后面不加break,則表示找到匹配之后往下執行,如果沒有遇到break;會執行到程序結束,
        default:是說明沒有匹配的選項進行說明,放到開始位置要加上break,否則會繼續執行,放到末尾,就不用加了,執行玩后就結束了
        例如:case 5: 語句 ;break;
                                case 5: 語句;break; //錯誤,有兩個相同的case,因為在匹配中不知道該選則那個,
                                case 1: 語句 ;break;
                                case 7 || 6: 語句;break; //錯誤7 || 6 返回狀態結果為1,與case 1:重復 ,但是你可以這樣寫 case 6:     case 7: 語句;break;

last :一維數組和二位數組
講數組,就要集合,什么集合,就是把相同的東西放在一起。對于數組呢?也是一樣的,就是把相同的類型的數據放在一起,如果不用一個數組來存放相同數據,用變量來表示,就會顯得雜亂無章,沒有條例性,時間久了,只有上帝知道,你所定義變量的含義了;接下來正式介紹數組
《存儲類型》 《數據類型》 變量名 [元素個數] //數組實際是由 元素數據類型+[元素個數]組成
存儲類型:說白了就是你定義了變量存放的位置。(一般默認auto,放在棧中,當代碼塊執行結束就是放空間,static 為靜態類型,放在靜態取,用static定義數據存儲類型,知道程序結束才釋放空間,否則不釋放空間,extern聲明為全局變量,可以使用其他文件用extern聲明的變量,作用范圍用于整個函數,register修飾符暗示編譯程序相應的變量將頻繁的使用,如果可能話應將放在CPU寄存器中,以加快其存儲速度)
int a[5]; //a實際可以看成 int [5] ;類型
//數組的大小在編譯的時候確定,而變量在運行時才有值
//數組元素個數必須為整型或char類型
初始化:定義同時對變量或數組元素賦值
int a[3] = {1,2,3}; //全部初始化.
char ch[5] = {65,66,67}; //沒有初始化的部分自動清0
int be[100] = { [95] =15,} ; //指定元素初始化,沒有初始化的部分自動清零
int c[6];
c[2] = 2; //對元素賦值,不會影響其他元素,不對數組初始化,起內存的存放的值是未知的,不對數組進行越界檢查,對于越界的元素訪問可能造成不可預知的錯誤;
int cat[9];
cat[2] = 5; //[ ] 數組定義固定格式
2[cat] = 5; //引用變量時,[ ] 時變址運算符 a[i] == (a+i) == (i+a) == i[a];

    數組名的含義:
    #define N 10
    int a[N];
    1.代表整個數組:只有子啊&a,和sizeof(a)
            &a得到的是整個數組地址
            sizeof(a)得到整個數組的字節大小
    2.其他情況數組名代表第一個元素的地址 即 a + 0 == &a[0], sizeof(a+0); 代表第一個數組元素的地址,是一個地址常量,不可以自加,不可以對數組名進行賦值
      a++; //錯誤
        a = {1,23,5};//錯誤 
        int a[0]; 表示是一個地址,不能存放數據
    3.數組遍歷
       int a[10]= {0};
         int i;
         for (i=0; i<10; i++)
         {
                 printf("%d\n",a[i]);
         }

 4.int a[4] ;//數組在編譯時,空間就已經確定了,變量在執行的時候才申請空間賦值

      二維數組:其實是由一維數組組成的,內存存儲空間時線性。
            int a[] [5];  //可以省略一維數組的下標;
            初始化:
            int a[5][5]= {15,6,3,9,7,8,2,1,5,4,6};//部分初始化,其他都清0;
            int c[8][9] = { [6][3]=9,};指定元素初始化,先定行,再指定行中的某一個

            二維數組名的含義:
            1.數組名:
                sizeof(數組名) ==>整個數組大小
                    &(數組名)        ==> 整個數組地址
            2.對于二維數組來說。每一個元素都是一個一維數組,數組名中放在第一個一維數組地址&a[0] ,除了上面的情況,都是代表了&a[0]  即 a == &a[0];
            int a[M][N];
    例如:     sizeof(a) ==  4*M*N;
                   sizeof(a[0]) == 4*N;
                                 sizeof(a[0][0]) == 4;

        遍歷:
        #define M  4
        #define N 5
        int main(int argc,char **argv)
        {
            int a[M][N]={0};
                int i,j;
                for (i=0; i<M; i++)
              {
                        for (j=0; j<N; j++)
                              printf("%d\t",a[i][j]);
                       printf("\n");
                    }
                    return 0;
                }
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

昌江| 蓬安县| 隆回县| 措勤县| 惠州市| 会昌县| 长垣县| 咸丰县| 尉犁县| 澄江县| 云安县| 绥德县| 湖口县| 武宁县| 罗田县| 志丹县| 孟村| 云和县| 威宁| 陆河县| 灵丘县| 斗六市| 阿城市| 江阴市| 托克托县| 杭锦后旗| 东台市| 德兴市| 民和| 彰化市| 宁远县| 印江| 景泰县| 溧阳市| 达拉特旗| 新龙县| 台湾省| 汝南县| 刚察县| 海丰县| 沙雅县|