<li id="8g3ty"><tbody id="8g3ty"><th id="8g3ty"></th></tbody></li>
    <label id="8g3ty"><samp id="8g3ty"></samp></label>
  • <span id="8g3ty"></span>

    1. <center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
    2. <bdo id="8g3ty"><meter id="8g3ty"><bdo id="8g3ty"></bdo></meter></bdo><center id="8g3ty"><optgroup id="8g3ty"></optgroup></center>
      <label id="8g3ty"><samp id="8g3ty"></samp></label>

    3. 電子開發(fā)網(wǎng)

      電子開發(fā)網(wǎng)電子設(shè)計 | 電子開發(fā)網(wǎng)Rss 2.0 會員中心 會員注冊
      搜索: 您現(xiàn)在的位置: 電子開發(fā)網(wǎng) >> 編程學習 >> C語言 >> 正文

      【C語言】超詳解,讓你C語言成功入門(一)_怎么去看懂c代碼

      作者:佚名    文章來源:網(wǎng)絡(luò)整理    點擊數(shù):    更新時間:2024/3/26

      目錄

      一、簡單了解C語言和程序設(shè)計

      了解什么是計算機程序和計算機語言

      計算機程序

      程序就是一組計算機能識別和執(zhí)行的指令,每一條指令使計算機執(zhí)行特定的操作。一個特定的指令序列用來完成一定的功能。為了使計算機能實現(xiàn)各種功能,往往需要成百上千萬個程序。

      總之,計算機的一切操作都是由程序控制的,離開程序,計算機將毫無用處。所以,計算機的本質(zhì)就是程序的機器,程序和指令是計算機系統(tǒng)中最基本的概念。

      計算機語言

      計算機語言即計算機能識別的語言,粗俗點說,就是計算機能看懂的。

      計算機語言經(jīng)歷了以下幾個發(fā)展階段:

      機器語言 計算機工作基于二進制,從根本上說,計算機只能識別和接受由0和1組成的指令。計算機發(fā)展初期,一般計算機的指令長度為16,即16個二進制數(shù)(0或1)組成的一條指令,如:0010111110101101

      這種能直接識別和接受的二進制代碼稱為機器指令 ,而機器指令的集合就是機器語言。

      缺點:難學,難用,難以推廣使用

      符號語言 為克服上述缺點而創(chuàng)造出來的,它是用一些英文字母和數(shù)字來表示一個指令。如:
      ADD A,B(執(zhí)行A+B=>A,將寄存器A中的數(shù)與寄存器B中的數(shù)相加,放到寄存器A中)

      很明顯,這并不能讓計算機識別并執(zhí)行,所以還需要一種匯編程序的軟件將符號語言的指令轉(zhuǎn)換為機器指令。這種轉(zhuǎn)換的過程又叫做 “匯編” 或 “代真” ,故,符號語言又稱符號匯編語言或匯編語言。

      以上兩種語言均為計算機低級語言。

      高級語言 為克服低級語言的缺點而創(chuàng)造出來,更加利于人們理解。如要計算和輸出3×6÷5,只需寫:a=(3*6)/5;printf(“%d”,a);

      計算機語言就簡單介紹到這里,如需深度了解可上百度等各大瀏覽器查詢。

      C語言的特點

      (1)語言簡潔,使用方便。

      (2)運算符豐富。

      (3)數(shù)據(jù)類型豐富。

      (4)具有結(jié)構(gòu)化的控制語句(while語句,do…while語句,if…else語句,switch語句,for語句)。

      (5)語法限制不太嚴格。

      (6)C語言允許直接訪問物理地址,能進行位(bit)操作,能實現(xiàn)匯編語言的大部分功能,可以直接對硬件進行操作。

      (7)用C語言編寫的程序可移植性好。

      (8)生成目標代碼質(zhì)量高,程序執(zhí)行效率高。

      二、初識C語言程序

      簡單示例

      【例1.1】輸出下面一行代碼。
      Hello World!

      #include<stdio.h>    
                           //這是編譯預處理的一個指令
      int main()           //定義一個主函數(shù)
      {
                          //函數(shù)開始的標志
          printf("Hello World!\n");  //printf是輸出指令,即此時輸出Hello World!
          return 0;        //函數(shù)結(jié)束時返回函數(shù)值0,寫return 1;也行,只是返回值為1
      }                    //函數(shù)結(jié)束的標志
      

      運行結(jié)果:
      Hello World!

      在使用函數(shù)庫中輸入輸出函數(shù)時,編譯系統(tǒng)要求程序提供有關(guān)此函數(shù)的信息(例如對輸入輸出函數(shù)的聲明和宏的定義,全局量的定義等),而我們的程序中的 “ #include<stdio.h> ” 的作用就是用來提供這些信息的。stdio.h 就是一個系統(tǒng)所提供的文件名

      int表示該函數(shù)類型是一個整型的數(shù)據(jù)類型;

      main是該函數(shù)的名字;

      " return 0 ; "的作用是:當main函數(shù)執(zhí)行結(jié)束前將整數(shù)0作為函數(shù)值,返回到調(diào)用函數(shù)處。

      \n ” 是換行符。

      注釋

      // ” 代表注釋,在編譯時注釋的部分是不會產(chǎn)生目標代碼,注釋對運行不起作用,只是給人看的,而不是計算機執(zhí)行的。

      C語言允許注釋的方法有兩種:

      // 開始的單行注釋,以 // 開始,換行(Enter)時結(jié)束。只會注釋掉 // 之后的所有的解釋性語句(這里系統(tǒng)自動換行不算哦,因為你這段話在這一行放不下了),但是若為追求美觀,可以換一行繼續(xù)使用 // 進行注釋

      / * (這里注釋) * /,“ / * * / ”是多行注釋,就是即使 使用了換行符(Enter)也會被注釋掉,以 /* 開始,以 */ 結(jié)束?蓡涡惺褂茫部啥嘈惺褂谩
      注釋內(nèi)又注釋,這會導致注釋可能會出錯。

      #include<stdio.h>    //這是編譯預處理的一個指令 
      /*
      int main()          
      {                    
          printf("Hello World!\n"); 
          return 0;        
      }                   
      */
      

      看看顏色是不是變了?這就說明這一段語句全部被注釋掉了。

      ★特別注意 ! ! !

      以上所有代碼(包括英文、字符和標點符號)全部要用英文來寫 ! ! !

      好,如果你看懂了上面的代碼,那我們繼續(xù)下一道。

      【例1. 2】求兩個整數(shù)之和

      解題思路:首先設(shè)置三個變量a, b, sum(變量可隨便用任何字母或單詞來表示),sum在這里我們代表兩整數(shù)之和。用賦值運算符 “ = ” 將a,b相加后的和賦給sum。

      #include<stdio.h>        //這是編譯預處理的一個指令 
      int main()               //定義一個主函數(shù)
      {
                              //函數(shù)開始的標志
          int a,b,sum;         //變量聲明,定義 a,b,sum為整型變量
          a = 12;              //對變量a進行賦值
          b = 5;               //對變量b進行賦值
          sum = a + b;         //進行 a+b 運算,并把結(jié)果存放在sum中
          printf("%d",sum);    //printf是輸出指令,sum的值輸出
          return 0;            //函數(shù)結(jié)束時返回函數(shù)值0,寫return 1; 也行,只是返回值為1
      }                        //函數(shù)結(jié)束的標志
      

      運行結(jié)果:
      17

      本人個人認為此處在注釋中已經(jīng)講得很明白了,int這個整型的數(shù)據(jù)類型,在后面還會細講。

      【變式1】輸入a, b兩個整數(shù),求兩整數(shù)之和。

      #include<stdio.h>
      int main()
      {
      
          int a,b,sum;
          scanf("%d %d",&a,&b);    //scanf是輸入指令,輸入 a 和 b 的值
          sum = a + b;
          printf("sum = %d",sum);//輸出sum的值
          return 0;
      }
      

      這個printf函數(shù)圓括號內(nèi)有兩個參數(shù)。

      第一個參數(shù)是引號內(nèi)的sum = %d\n,它是輸出格式字符串,作用是輸出用戶希望輸出的字符和輸出的格式。其中sum = 是用戶希望輸出的字符,%d是指定的輸出格式,d表示用 “ 十進制整數(shù) ” 形式輸出。

      第二個參數(shù)sum表示要輸出變量sum的值。

      在執(zhí)行printf函數(shù)時,將sum變量的值(以十進制整數(shù)表示)取代引號中的 %d 。如下圖:
       
      (圖源《C程序設(shè)計(第五版)》譚浩強 著)

      這里就仔細講解一下printf函數(shù)和scanf函數(shù)。

      printf()函數(shù)

      printf()函數(shù)是式樣化輸出函數(shù),一般用于向準則輸出設(shè)備按規(guī)定式樣輸出消息。printf()函數(shù)的調(diào)用格式為:printf(“<式樣化字符串>”,<參數(shù)表>);

      注意,要用英文字符輸入語句。

      其中式樣化字符串包括兩部分內(nèi)容:
      一部分是正常字符,這些字符將按原樣輸出;另一部分是式樣化規(guī)定字符,以 “ % ” 開端,后跟一個或幾個規(guī)定字符,用來確定輸出內(nèi)容式樣。參量表是需求輸出的一系列參數(shù),其個數(shù)務(wù)必于式樣化字符串所闡明的輸出參數(shù)個數(shù)一樣多,各參數(shù)之間用英文逗號“ , ” 分開,且順序逐一對應(yīng),不然會出現(xiàn)意想不到的錯誤。

      函數(shù)原型:
      int printf(const char * format, …);

      函數(shù)值返回值為整型。若成功則返回輸出的字符數(shù),輸出出錯則返回負值。

      scanf()函數(shù)

      scanf() 是輸入函數(shù),就是我們從鍵盤中輸入我們想要測試的數(shù)據(jù)。與 printf() 函數(shù)一樣都被聲明在頭文件 stdio.h 里,因此在使用 scanf() 函數(shù)時要加上 #include <stdio.h> 。(在有一些實現(xiàn)中,printf() 和 scanf() 函數(shù)在使用時可以不使用預編譯命令 #include 。)

      函數(shù)原型:
      int scanf (const char * restrict format , …);
      (稍作了解即可)

      返回值
      scanf() 函數(shù)返回成功讀入的數(shù)據(jù)項數(shù),讀入數(shù)據(jù)時遇到了 “ 文件結(jié)束 ” 則返回EOF。

      如:
      scanf (“%d %d”,&a,&b);

      函數(shù)返回值為 int 型。如果 a 和 b 都被成功讀入,那么 scanf 的返回值就是2;如果只有a 被讀入,返回值為1(b 同樣);如果a 讀取失敗,返回值為0(b 同樣);如果遇到錯誤或遇到enf of file, 返回值為EOF。

      &a,&b中的 & 是尋址操作符,&a表示對象a 在內(nèi)存中的地址,是一個 右值。變量a , b的地址是在編譯階段分配的(存儲順序由編譯器決定)。

      注意。。

      如果 scanf 中 %d 是連著寫的,如 “%d%d%d”,在輸入數(shù)據(jù)時,數(shù)據(jù)之間不可以用逗號分隔,只能用空白字符(空格或Tab 鍵或者回車鍵)分隔——“2(空格)3(Tab)4”或“2(Tab)3(回車)4”等。若是“%d,%d,%d”,則在輸入數(shù)據(jù)時必須加 “ , ” ,如:“2,3,4”。

      【變式2】找兩個整數(shù)中的較大者。

      第一種方式:

      #include<stdio.h>
      int main()
      {
      
          int a,b,max;
          scanf("%d,%d",&a,&b); //輸入數(shù)據(jù) a, b
          if(a >= b)            //如果 a >= b,則將 a賦值給 max
              max = a;
          else                  //否則,將 b賦值給 max
              max = b;
          printf("%d",max);     //輸出 max
          return 0;
      }
      

      第二種方式:(使用函數(shù))

      #include<stdio.h>
      int main()
      {
      
          int max(int x,int y);    //定義函數(shù)
          int a,b,c;
          scanf("%d,%d",&a,&b);
          c=max(a,b);              //調(diào)用 max函數(shù),將值賦給 c
          printf("max = %d\n",c);
          return 0;
      }
      //求兩個整數(shù)中的較大者的 max函數(shù)
      int max(int x,int y)//定義 max函數(shù)函數(shù)值為整型,x、y均為形式參數(shù)
      {
      
          int z;
          if(x>y)
              z=x;
          else
              z=y;
          return z;    //將 z的值作為 max函數(shù)值,返回到調(diào)用函數(shù)的位置
      }
      

      運行結(jié)果:
      8 ,5
      max = 8

      字符輸入輸出函數(shù)

      除了使用 printf()、scanf()輸出和輸入字符外,C語言標準函數(shù)庫還有一些專門用于字符輸入輸出的函數(shù)。

      字符輸出函數(shù)putchar()

      putchar()函數(shù)的一般形式為:
      putchar( c );
      函數(shù)的功能是輸出一個字符,并返回輸出字符的ASCII碼值。
      “ putchar( c ); ”中c可以是字符常量、字符型變量或整型變量,即將一個整型數(shù)據(jù)作為ASCII碼,輸出相應(yīng)的字符。

      【例1. 2】putchar() 函數(shù)的使用

      #include<stdio.h>
      int main()
      {
      
          int i = 97;
          char ch = 'a';    //聲明并初始化
          putchar(i);       //輸出字符 a
          putchar('\n');    //換行,可以輸出控制字符,起控制作用
          putchar(ch);      //輸出字符變量 ch的值 'a'
          return 0;
      }
      

      運行結(jié)果:
      a
      a

      字符輸入函數(shù)getchar()

      getchar()函數(shù)的一般形式為:
      getchar();
      函數(shù)的功能是從鍵盤輸入一個字符,返回值是該字符的ASCII碼值。

      【例1. 3】getchar()函數(shù)的使用

      #include<stdio.h>
      int main()
      {
      
          int ch;
          ch = getchar();  //從鍵盤輸入字符,該字符的ASCII碼值賦給 ch
          putchar(ch);    //輸出 ch對應(yīng)的字符
          return 0;
      }
      

      運行結(jié)果:
      a
      a

      注意:
      執(zhí)行g(shù)etchar()函數(shù)輸入字符時,輸入字符后需要敲一個回車鍵(Enter),回車后才繼續(xù)執(zhí)行程序。getchar()函數(shù)也將空白符作為一個有效字符讀入。因此,在getchar()函數(shù)連續(xù)輸入多個字符時要連續(xù)輸入,中間不要加空白符。

      變量與常量

      常量

      在程序運行過程中,其值不能被改變的量稱為常量。
      常用的常量有以下幾類:

      1.整型常量

      即沒有小數(shù)部分的數(shù)。例如:2,-345,43
      除了十進制,還可用八進制和 十六進制來表示整數(shù)。

      2.浮點型常量

      浮點型常量有兩種表現(xiàn)形式:
      (1)十進制小數(shù)形式,由數(shù)字和小數(shù)點組成。
      注意:在一個值后面加上一個小數(shù)點,該值就是一個浮點數(shù)。例如:3是整數(shù),3.00 、3. 都是浮點數(shù)。

      (2)指數(shù)形式
      例如:3.14e3(表示3.14×10³),–193e–3(表示–193×10﹣²³),0.123E2(表示0.123×10²)。
      需要注意的是,e或E之前必須有數(shù)字,且e或E后面必須為整數(shù),如不能夠?qū)?e4,12e0.2

      3.字符常量

      兩種形式:
      (1)普通字符,用單引號括起來的單個字符。
      例:‘A’,‘b’,‘9’,‘?’
      (2)轉(zhuǎn)義字符
      C語言還允許用一種特殊形式的字符常量,就是用單引號括起來,以字符 \ 開頭的字符序列。

      轉(zhuǎn)義字符
      轉(zhuǎn)義字符 含義
      \n 換行
      \f 清屏并換頁
      \r 回車
      \t Tab符,水平制表符
      \v 垂直制表符
      \b 退格
      \\ 反斜杠(\)
      \’ 單引號
      \" 雙引號
      \a 報警
      \0 空值
      \? 在書寫連續(xù)多個問號時使用,防止他們被解析成三字母詞
      \0ooo 八進制值(ooo必須是有效地八進制數(shù),即每個o表示0~7中的一個數(shù))
      \xhh 十六進制值(hh必須是有效的十六進制數(shù),即每個h表示0~f 中的一個數(shù))

      科普三字母詞:
      ??) ——> ]
      ??( ——> [

      4.字符串常量

      由一對雙引號括起來的字符序列。如:“China”,“中國”,“a”
      雙引號不是字符串的一部分。
      字符串的結(jié)束標志是 \0,不算做字符串內(nèi)容。

      存儲:
      例:char a[10]=“abcdef”;
      char類型的數(shù)組a[10],存放字符串a(chǎn)bcdef。

      #include<stdio.h>
      int main()
      {
        
          char s[] = "abdef";//字符串包含了\0,打印輸出時遇到\0就結(jié)束程序
          char a[] = {
        'a','b','c','d','e','f','\0'};//這里一定要加\0,否則打印輸出時會出錯
          printf("%s\n",s);
          printf("%s\n",a);
          printf("abc\0def\n");
      }
      

      運行結(jié)果:
      abcdef
      abcdef
      abc

      5.define定義的標識符常量

      可以用#define預處理指令來定義一個符號常量。例如:
      #define PI 3.14
      編譯程序時,程序中所有的PI都會被替換成3.14。通常,這樣定義的常量也稱為符號常量。

      格式:#define 符號常量名 符號常量的值
      三者之間用空格隔開。為了和變量名區(qū)分開來,習慣上符號常量用大寫字符表示。

      #include<stdio.h>
      #define MAX 100//定義MAX,其值是100
      #define STR "abcdef"  //STR,abcdef是字符串
      int main()
      {
        
          printf("%d\n",MAX);
          int a=MAX;
          printf("%d\n",a);
          printf("%s\n",STR);//%s 是字符串輸出符
          return 0;
      }
      

      運行結(jié)果:
      100
      100
      abcdef

      6.枚舉常量

      一般形式:
      enum 枚舉類型名{ 常量1,常量2,常量3,…};

      可以一 一列舉出來的

      #include<stdio.h>
      enum Color//類型
      {
        
      //這三個是枚舉常量,可能取值的
          RED,
          GREEN,
          BLUE
      };
      int main()
      {
        
          int num = 10;
          enum Color a = RED;
          enum Color b = GREEN;
          enum Color c = BLUE;
          printf("%d\n",a);
          printf("%d\n",b);
          printf("%d\n",c); 
          return 0;
      }
      

      運行結(jié)果:
      0
      1
      2

      枚舉類型在使用中有以下規(guī)定:1

      1、枚舉值是常量,不是變量。不能在程序中用賦值語句再對它賦值。例如對枚舉weekday的元素再作以下賦值: sun=5;mon=2;sun=mon; 都是錯誤的。

      2、枚舉元素本身由系統(tǒng)定義了一個表示序號的數(shù)值,從0 開始順序定義為0,1,2,… 。如在weekday中,sun值為0,mon值為1, …,sat值為6。

      變量

      在程序運行過程中,其值能被改變的量稱為變量。

      const修飾的常變量

      const修飾的變量,常屬性不能被改變。使用const在一定程度上可以提高程序的安全性和可靠性。

      const修飾的數(shù)據(jù)類型是指常類型,常類型的變量或?qū)ο蟮闹凳遣荒鼙桓淖兊摹?/P>

      #include<stdio.h>
      int main()
      {
        
          const int a = 10;//在C語言中,const修飾的a,本質(zhì)是變量,但是不能被修改,有著常量的屬性
          printf("%d",a);
          return 0;
      }
      

      運行結(jié)果:
      10

      const int Max = 100;
      Max++;  //程序錯誤
      

      如果想修改Max的值,可定義一個指向Max的指針,通過指針來改變Max的值,注意GCC8.2和Clong8.0均會產(chǎn)生警告。

      const int Max = 100;
      int *p = &Max;
      *p = 101;
      //GCC8.2 會產(chǎn)生警告,并輸出Max = 101
      //Clong8.0 會產(chǎn)生警告,且Max值未改變
      
      規(guī)定符
      轉(zhuǎn)換說明 輸出結(jié)果
      %d、%i 十進制有符號整數(shù)
      %u 十進制無符號整數(shù)
      %f 浮點數(shù)
      %lf double浮點數(shù)
      %s 字符串
      %c 單個字符
      %p 指針的值(輸出地址符)
      %e、%E 指數(shù)形式的浮點數(shù)
      %x,%X 無符號以十六進制表示的整數(shù)
      %o 無符號以八進制表示的整數(shù)
      %g、%G 把輸出的值按照%e或者%f類型中輸出長度較小的方式輸出
      %lu 32位無符號整數(shù)
      %llu 64位無符號整數(shù)
      %zu 打印sizeof 的返回值
      %% 輸出一個百分號

      說明

      (1) 可以在“%”和字母之間插進數(shù)字表示最大場寬。

      例如:%3d 表示輸出3位整型數(shù),不夠3位右對齊。
      %9.2f 表示輸出場寬為9的浮點數(shù),其中小數(shù)位為2,整數(shù)位為6,小數(shù)點占一位,不夠9位右對齊。
      %8s 表示輸出8個字符的字符串,不夠8個字符右對齊。

      如果字符串的長度、或整型數(shù)位數(shù)超過說明的場寬,將按其實際長度輸出。但對浮點數(shù),若整數(shù)部分位數(shù)超過了說明的整數(shù)位寬度,將按實際整數(shù)位輸出;若小數(shù)部分位數(shù)超過了說明的小數(shù)位寬度,則按說明的寬度以四舍五入輸出。

      另外,若想在輸出值前加一些0,就應(yīng)在場寬項前加個0。

      例如:%04d 表示在輸出一個小于4位的數(shù)值時,將在前面補0使其總寬度為4位。

      如果用非浮點數(shù)表示字符或整型量的輸出格式,小數(shù)點后的數(shù)字代表最大寬度,小數(shù)點前的數(shù)字代表最小寬度。

      例如:%6.9s 表示顯示一個長度不小于6且不大于9的字符串。若大于9,則第9個字符以后的內(nèi)容將被刪除。

      (2) 可以在“%”和字母之間加小寫字母 l,表示輸出的是長型數(shù)。

      例如:%ld 表示輸出 long 整數(shù)
      %lf 表示輸出 double 浮點數(shù)

      (3) 可以控制輸出左對齊或右對齊,即在"%" 和字母之間加入一個" - "號可說明輸出為左對齊, 否則為右對齊。

      例如:%-7d 表示輸出7位整數(shù)左對齊
      %10s 表示輸出10個字符右對齊

      運算符
      1.算術(shù)運算符
      運算符 含義 范例 結(jié)果
      + 加法 x+y x和y的和
      減法 x–y x和y的差
      * 乘法 x * y x和y的積
      / 除法 x / y x和y的商
      % 求余 x%y x除以y的余數(shù)
      + 正號 +x x的值
      負號 –x x的相反數(shù)

      注意:
      (1)運算符%要求左右兩個運算數(shù)據(jù)必須為整型數(shù)據(jù),如5%2的值為3。
      (2)相除時,結(jié)果為整數(shù),小數(shù)部分舍去。但若除數(shù)或被除數(shù)中有一個為負值,則舍入的方向是不固定的。如5/3=1,但–5/3在有的計算機得到的結(jié)果是–1,而有的計算機上的結(jié)果是–2。C99規(guī)定采取 “向零取整” 的方法,即取整后向零取整。
      (3)字符型數(shù)據(jù)可以和數(shù)值型數(shù)據(jù)進行運算,因為字符型數(shù)據(jù)在計算機中是用一個字節(jié)的整型數(shù)(ASCII碼)表示的。如 ‘A’+1在進行運算時會把A的ASCII碼65與1相加,最后得出結(jié)果就是66。

      【例1. 4】算術(shù)運算符的使用

      #include<stdio.h>
      int main()
      {
        
          printf("%d %% %d = %d\n",-7,4,-7%4);//求余
          return 0;
      }
      

      運行結(jié)果:
      -7 % 4 = -3

      這里有兩個%,是為了在顯示器上顯示出來%。

      2.賦值運算符

      (1)簡單賦值運算
      “ = ”的作用是將賦值符號右邊的對象的值賦值給左邊的對象。例:x = 9;
      把值9賦給x,實際意義是將10存儲到x的存儲單元中。
      此處“ = ”是賦值符,而非等于號。等于號是“ == ”,例如:if(x==10),意思是如果x等于10。

      注:①10 = x是無效語句。賦值運算符的左側(cè)必須是一個運算對象,此對象的值可以改變。10是整數(shù)常量,不能改變其值,不能給常量賦值。
      ②若參與賦值運算的運算對象的數(shù)據(jù)類型不同,則右邊對象的數(shù)據(jù)類型會被轉(zhuǎn)換成左側(cè)對象的類型。

      (2)復合賦值運算
      在賦值運算符前加上其他運算符,例如在“ = ” 前加上“ + ”,運算符就變成了復合運算符“ += ”。
      例:x += 10;
      相當于 x = x+10;
      其他算術(shù)運算符也可以與賦值運算符組合成復合賦值運算符。

      【例1. 5】a = 5,求a += a – = a * a。

      #include<stdio.h>
      int main()
      {
        
          int a = 5;
          a += a -=a * a;
          printf("a = %d\n",a);
          return 0;
      }
      

      運算結(jié)果:
      a = – 40

      3.關(guān)系運算符
      關(guān)系運算符 含義 范例
      < 小于 x<y
      > 大于 x>y
      <= 小于等于 x<=y
      >= 大于等于 x>=y
      == 等于 x==y
      != 不等于 x!=y

      關(guān)系運算符的結(jié)合性是“ 從左到右 ”。a < b > c <= d 與( (a < b) > c) <= d 相同。

      注意:浮點數(shù)之間進行比較時,盡量只使用 “ < ” 和 “ > ”。因為浮點數(shù)使用近似值表示的,這會導致邏輯上相等的兩數(shù)卻不相等。

      4.邏輯運算符
      邏輯運算符 含義 范例
      && 邏輯與 x && y
      ∣∣ 邏輯或 x ∣∣ y
      ! 邏輯非 !x

      在邏輯運算中,如果運算對象的值為非0,則認為是邏輯真,否則認為是邏輯假。真用 1 表示,假用 0 表示。

      邏輯非
      例:int a=5;
      !a的結(jié)果為0,因為a不等于0。

      a b !a !b a&&b a∣∣b

      運算符 ! 的結(jié)合性是“ 從右到左 ”,而&&和 || 的結(jié)合性是“ 從左到右 ”。

      在多個&&(或 ||)相連時,因結(jié)合性是從左到右,故當左邊的運算對象為假(或真),停止運算。

      5.其他運算符
      自增、自減運算符

      自增運算符++
      當 i 變量每次都要加1時,可寫為 i++,或++i
      相當于 i = i +1;

      自減運算符 – –
      當 i 變量每次都要減1時,可寫為 i – – 或 – – i
      相當于 i = i – 1;

      自增、自減運算符的結(jié)合性是“ 從右到左 ”。x * y++ 相當于x * (y++),而并非是(x * y)++。

      sizeof運算符

      一般形式:sizeof(運算對象)
      圓括號可有可無,但是當運算對象是數(shù)據(jù)類型是,必須加上圓括號。
      例如:sizeof(int), sizeof x, sizeof(x), sizeof 34, sizeof(34)
      sizeof的結(jié)合性是“ 從右到左 ”。

      如果運算對象是表達式,那表達式將不會被執(zhí)行,只會輸出此表達式的數(shù)據(jù)類型所占的字節(jié)數(shù)。

      #include<stdio.h>
      int main()
      {
        
          int a = 12,b = 1;
          printf("%zd\n",sizeof(a = a+b);
          printf("a = %d\n",a);
          return 0;
      }
      

      運算結(jié)果:
      4
      a = 12

      sizeof運算的結(jié)果是一個無符號整數(shù)類型。C99新增了轉(zhuǎn)換說明%zd用于輸出 sizeof 運算結(jié)果的值。如果編譯器不支持使用%zd,可以使用 %u 或 %lu 代替 %zd。

      逗號運算符

      逗號運算符(,)用于將兩個表達式連接時。如:
      a+b , a+c
      一般形式:表達式1 , 表達式2
      求解過程:先求表達式1,再求表達式2。整個逗號表達式的值是表達式2的值。

      一個逗號表達式又可以與另一個表達式組成一個新的逗號表達式。所以逗號表達式的一般形式又可拓展為:
      表達式1, 表達式2, 表達式3, … , 表達式 n

      注意:逗號也用作分隔符。下面代碼中的逗號都是分隔符,而非逗號運算符。

      int a,b;
      printf("%d %d",a,b);
      
      ASCII碼表

      ASCII碼表 
      ASCII碼表圖

      運算符的優(yōu)先級

      C語言運算符優(yōu)先級圖 
      運算符優(yōu)先級圖

      ★★數(shù)據(jù)類型

      C語言的數(shù)據(jù)類型十分豐富,如下:(此處若概括不全,還望指出)
      C語言數(shù)據(jù)類型 

      基本類型
      整數(shù)類型
      基本整型(int)

      (1)聲明 int 型變量
      形式:int 變量名;
      如:int num;
      (2)初始化變量
      初始化就是為變量賦值?梢栽诼暶鞯耐瑫r賦值,如:int num = 4;

      聲明是給變量創(chuàng)建存儲空間,初始化就是給變量定一個初始值。

      其他整數(shù)類型

      短整型(short int)
      類型名為short int(或簡寫成 short)。short型是有符號類型,占用的存儲單元可能比 int 小,常用于較小數(shù)值的場合以節(jié)省空間。

      長整型(long int)
      類型名為long int(或簡寫成 long)。long型是有符號類型,占用的存儲單元可能比int 型大,常用于較大數(shù)值的場合。

      雙長整數(shù)(long long int)
      類型名為long long int 或long long(C99標準加入)。long long 型占用的存儲單元可能比 long型大,適用于更大數(shù)值的場合。該類型至少占64位,即8個字節(jié),是有符號類型。

      聲明其他整數(shù)類型與 int型相同,如:
      short s_count;
      long int count;
      long long ago;

      (4)無符號的整數(shù)類型

      所有有符號類型前加上關(guān)鍵字 unsigned,就變成無符號的整數(shù)類型。此類型只用于非負值得場合,取值范圍也與有符號類型不同。

      任何有符號類型前加上signed 并無實際意義,只起到強調(diào)作用。

      整數(shù)溢出

      在給某一類型變量賦值時,超過取值范圍就會“溢出”,輸出的結(jié)果就是錯誤的。

      字符類型

      char 型用來存儲字符,但計算機使用數(shù)字編碼來處理字符,即用特定的整數(shù)來表示特定的字符。目前最通用的編碼是ASCII碼。

      標準ASCII碼的編碼范圍是0~127,只需要7位二進制數(shù)表示即可。char 型通常被定義為8位的存儲單元,因此足以滿足存儲ASCII表中的字符。

      (1)聲明char 型變量
      char ch;
      char color,choose;
      以上聲明創(chuàng)建了三個變量,并分別分配了一個字節(jié)的的存儲單元。

      (2)char 型變量初始化
      若要字符變量初始化為字母A,如:
      char grade = ‘A’;
      字母A的ASCII碼是65,系統(tǒng)把整數(shù)65賦值給grade。

      對于特殊字符可以用轉(zhuǎn)義字符的形式來給變量賦值。
      char ch; //聲明一個char 型的變量
      ch = ‘\n’; //初始化為換行符,把ASCII碼10賦給ch
      ch = ‘\12’; //換行符的八進制表示
      ch = ‘\xa’; //換行符的十六進制表示

      存儲字符實際上存儲的是整數(shù),故也可用整數(shù)來賦值。
      char grade = 65; //65是A的ASCII碼值
      char ch = 10; //10是換行符的ASCII碼值

      注意數(shù)字不要超過127,否則會出錯。

      浮點型類型

      C語言中的浮點數(shù)類型有 float型(單精度浮點型)、double型(雙精度浮點型)和 long double型(長雙精度浮點型)。

      float型必須至少能表示6位有效數(shù)字,且取值范圍至少是10-37~10+37。通常,系統(tǒng)存儲一個 float型要占用32位,其中8位用來存儲指數(shù)的值和符號,剩下的24位用于存儲非指數(shù)部分及其符號。

      double型和 float型的最小取值范圍相同,但至少能表示10位有效數(shù)字。通常,double型占用64位,因此比 float型精度更高,取值范圍更大。

      如精度要求更高,可用 long double型。

      初始化:
      float pi;
      pi=3.14
      double area,quart;
      float weight = 6.5e - 34;
      long double g;

      例: 計算數(shù)據(jù)類型的大小

      #include<stdio.h>
      int main()
      {
        
          printf("int:%zd\n",sizeof(int));
          printf("short:%zd\n",sizeof(short));
          printf("long:%zd\n",sizeof(long));
          printf("long long:%zd\n",sizeof(long long));
          printf("char:%zd\n",sizeof(char));
          printf("float:%zd\n",sizeof(float));
          printf("double:%zd\n",sizeof(double));
          printf("long double:%zd\n",sizeof(long double));
          return 0;
      }
      

      運行結(jié)果:
      int:4
      short:2
      long:4
      long long:8
      char:1
      float:4
      double:8
      long double:16

      強制類型轉(zhuǎn)換

      一般形式:
      (類型名)表達式
      例:a=(int)1.4+(int)1.5;
      注意:強制類型轉(zhuǎn)換符右側(cè)如果是變量,會把變量的值轉(zhuǎn)換成圓括號中指定的數(shù)據(jù)類型,變量本身的類型不會改變。

      int a = 10;
      (float)a + 3.14;
      

      變量a的值(10)被強制轉(zhuǎn)換成float型,再和3.14相加。但a的類型還是int型,其值仍為10。

      剩下的其他數(shù)據(jù)類型,我們將在其具體的知識點中講到。

      C語言程序的結(jié)構(gòu)(簡單了解即可)

      (1)一個程序由一個或多個源程序文件組成。
      一個源文件可以包括3個部分:
      ①預處理指令。如:#include,#define
      ②全局聲明。放在函數(shù)外聲明的是全局變量,函數(shù)內(nèi)聲明的是局部變量。
      ③函數(shù)定義。

      (2)函數(shù)是 c程序中的主要組成部分。

      (3)一個函數(shù)包括兩部分。
      ①函數(shù)首部。即函數(shù)的第一行,包括函數(shù)名,函數(shù)類型,函數(shù)屬性,函數(shù)參數(shù)(形式參數(shù))名,參數(shù)類型。
      C語言函數(shù)名 
      一個函數(shù)名后面必須跟一對圓括號,括號內(nèi)寫函數(shù)的參數(shù)名及其類型。如果函數(shù)沒有參數(shù),可以在括號中寫 void,也可以是空括號。
      int main(void) 或 int main()

      ②函數(shù)體。

      • 聲明部分。變量,調(diào)用的函數(shù)進行聲明。
      • 執(zhí)行部分。函數(shù)中的若干語句。

      (4)程序總是從main函數(shù)開始執(zhí)行的。

      (5)程序中要求計算機的操作是由函數(shù)中的C語句完成的。

      (6)在每個數(shù)據(jù)聲明和語句的最后必須有一個分號。

      (7)C語言本身不提供輸入輸出語句。

      (8)程序應(yīng)當包含注釋。必要的注釋,可以增加程序的可讀性。

      三、算法——程序的靈魂

      程序=算法+數(shù)據(jù)結(jié)構(gòu)

      程序 =(對數(shù)據(jù)的描述)數(shù)據(jù)結(jié)構(gòu)+(對操作的描述)算法

      數(shù)據(jù)結(jié)構(gòu) =個體 + 個體的關(guān)系

      算法 = 對存儲數(shù)據(jù)的操作

      算法的概念:算法是解決問題的方法和步驟。

      算法的特征

      (1)有窮性
      一個算法必須總是在執(zhí)行有窮步后結(jié)束,且每一步都必須在有窮時間內(nèi)完成。

      (2)確定性
      每種情況所執(zhí)行的操作,在算法中都有確切的規(guī)定,不會產(chǎn)生二義性。

      (3)可行性
      算法中的所有操作都可以通過已經(jīng)實現(xiàn)的基本操作運算執(zhí)行有限次來實現(xiàn)。

      (4)零個或多個輸入

      (5)一個或多個輸出

      衡量算法的標準

      1.時間復雜度
      大概程序要執(zhí)行的次數(shù),而非執(zhí)行的時間

      2.空間復雜度
      算法執(zhí)行過程中大概所占用的最大內(nèi)存

      3.難易程度

      4.健壯性

      部分常用的算法

      1.迭代法
      2.枚舉法
      依據(jù)問題的部分條件,確定答案的大致范圍,然后逐一驗證所有可能的情況,這種算法也叫窮舉法。
      3.遞歸法
      函數(shù)的自調(diào)用

      n! 的遞歸調(diào)用算法描述

      void fun(int n)
      {
        
          int f;
          if(n==1) f=1;
          else f=f*fun(n-1);
      }
      

      4.遞推法
      由已知條件,得出中間推論,直至得到結(jié)果。

      F(1)=1,F(2)=1;
      F(n)=F(n-1)+F(n-2);
      

      算法咱就不講深了,算法課會學的。

      總結(jié)

      本篇適用于零基礎(chǔ)或初學C語言的小伙伴們,本人也只是個小菜鳥,根據(jù)教材和教輔資料總結(jié)出來的C語言入門(一),如有錯誤的地方,或需要改進的,還望各位指點一二。
      建議初學者,一定要邊看邊練,多多練習,才能更加深刻的理解代碼的含義。

      Tags:C語言,入門教程,C代碼  
      責任編輯:admin
      請文明參與討論,禁止漫罵攻擊。 昵稱:注冊  登錄
      [ 查看全部 ] 網(wǎng)友評論
      關(guān)于我們 - 聯(lián)系我們 - 廣告服務(wù) - 友情鏈接 - 網(wǎng)站地圖 - 版權(quán)聲明 - 在線幫助 - 文章列表
      返回頂部
      刷新頁面
      下到頁底
      晶體管查詢
      主站蜘蛛池模板: 婷婷综合久久狠狠色99H| 久久狠狠色狠狠色综合| 久久综合久久伊人| 91丁香亚洲综合社区| 久久婷婷五月综合尤物色国产 | 色综合天天综合高清网| 色综合久久综精品| 色综合中文综合网| 亚洲AV综合色区无码二区偷拍 | 99v久久综合狠狠综合久久| 久久五月天综合网| 色综合久久98天天综合| 色婷婷六月亚洲综合香蕉| 国产成人综合久久精品亚洲| 亚洲色欲啪啪久久WWW综合网| 亚洲综合成人婷婷五月网址| 狠狠夜色午夜久久综合热91| 国产成人亚洲综合| 久久婷婷五月综合色高清| 天天做.天天爱.天天综合网| 国产成人亚综合91精品首页| 日日狠狠久久偷偷色综合96蜜桃| 色综合一区二区三区| 香蕉综合在线视频91| 亚洲国产天堂久久综合网站| 色婷婷狠狠久久综合五月| 久久天天日天天操综合伊人av| 久久一日本道色综合久久| 色综合久久加勒比高清88 | 色综合无码AV网站| 99久久综合狠狠综合久久止 | 国产成人综合色在线观看网站| 亚洲亚洲人成综合网络| 婷婷六月久久综合丁香76| 亚洲av综合avav中文| 亚洲色图综合在线| 狠狠色噜噜狠狠狠狠狠色综合久久| 色综合久久98天天综合| 麻豆久久婷婷五月综合国产| 久久天天躁狠狠躁夜夜躁综合| 加勒比色综合久久久久久久久|