国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

C語言基礎教程(二)數據類型、變量和運算符

2019-11-17 05:19:26
字體:
來源:轉載
供稿:網友
    說明:
    1. 象其它一些語言一樣, Turbo C的變量在使用之前必須先定義其數據類型,
未經定義的變量不能使用。定義變量類型應在可執行語句前面, 如上例main()函
數中的第一條語句就是變量定義語句, 它必須放在第一各執行語句clrscr()前面。
    2. 在Turbo C中, 大、小寫字母是有區別的, 相同字母的大、小寫代表不同
的變量。
    3. Turbo C程序的書寫格式非常靈活, 沒有嚴格限制。
    例1的主函數可寫成:
    main(){char c; clrscr(); gotoxy(12,3);
           puts("Welcome to use Turbo C2.0!"); gotoxy(15,13);
               這樣寫語法上沒有錯誤, 但閱讀起來不方便, 同時也使得程序層次不明確。
作者建議用Turbo C編程時, 一行一條語句, 碰到嵌套語句向后縮進,  必要時對
程序加上注釋行。這樣可以便程序結構清楚、易于閱讀、維護和修改。
    通過以上介紹, 可以得出Turbo C源程序的一般形式為:
          包含文件
          子函數類型說明
          全程變量定義
          main()
          {
            局部變量定義
            <程序體>
          }
          sub1()
          {
            局部變量定義
            <程序體>
          }
          sub2()
          {
            局部變量定義
            <程序體>
          }
               .
               .
               .
          subN()
          {
            局部變量定義
            <程序體>
          }
    其中sub1(), ..., subN()代表用戶定義的子函數, 程序體指Turbo C 2.0
提供的任何庫函數調用語句、控制流程語句或其它用子函數調用語句等。

    說明:
    1. 象其它一些語言一樣, Turbo C的變量在使用之前必須先定義其數據類型,
未經定義的變量不能使用。定義變量類型應在可執行語句前面, 如上例main()函
數中的第一條語句就是變量定義語句, 它必須放在第一各執行語句clrscr()前面。
    2. 在Turbo C中, 大、小寫字母是有區別的, 相同字母的大、小寫代表不同
的變量。
    3. Turbo C程序的書寫格式非常靈活, 沒有嚴格限制。
    例1的主函數可寫成:
    main(){char c; clrscr(); gotoxy(12,3);
           puts("Welcome to use Turbo C2.0!"); gotoxy(15,13);
           printf("<CR>--Continue"); gotoxy(15,15);...}
    這樣寫語法上沒有錯誤, 但閱讀起來不方便, 同時也使得程序層次不明確。
作者建議用Turbo C編程時, 一行一條語句, 碰到嵌套語句向后縮進,  必要時對
程序加上注釋行。這樣可以便程序結構清楚、易于閱讀、維護和修改。
    通過以上介紹, 可以得出Turbo C源程序的一般形式為:
          包含文件
          子函數類型說明
          全程變量定義
          main()
          {
            局部變量定義
            <程序體>
          }
          sub1()
          {
            局部變量定義
            <程序體>
          }
          sub2()
          {
            局部變量定義
            <程序體>
          }
               .
               .
               .
          subN()
          {
            局部變量定義
            <程序體>
          }
    其中sub1(), ..., subN()代表用戶定義的子函數, 程序體指Turbo C 2.0
提供的任何庫函數調用語句、控制流程語句或其它用子函數調用語句等。
1. 數據類型    在Turbo C語言中, 每個變量在使用之前必須定義其數據類型。Turbo C有以
下幾種類型: 整型(int)、浮點型(float)、字符型(char)、指針型(*)、無值型
(void)以及結構(strUCt)和聯合(union)。其中前五種是Turbo C的基本數據類型、
后兩種數據類型(結構和聯合)將在第五章介紹。

    2.1 整型(int)
    一、整型數說明
    加上不同的修飾符, 整型數有以下幾種類型;
    signed short int     有符號短整型數說明。簡寫為short或int, 字長為2
                         字節共16位二進制數, 數的范圍是-32768~32767。
    signed long int      有符號長整型數說明。簡寫為long, 字長為4字節共
                         32位二進制數, 數的范圍是-2147483648~2147483647。
    unsigned short int   無符號短整型數說明。簡寫為unsigned int,  字長
                         為2字節共16位二進制數, 數的范圍是0~65535。
    unsigned long int    無符號長整型數說明。簡寫為unsigned long, 字長
                         為4字節共32位二進制數, 數的范圍是0~4294967295。
    二、整型變量定義
    可以用下列語句定義整型變量
    int a, b;            /*a、b被定義為有符號短整型變量*/
    unsigned long c;     /*c被定義為無符號長整型變量*/
    三、整型常數表示
    按不同的進制區分, 整型常數有三種表示方法:
    十進制數:  以非0開始的數
               如:220, -560, 45900
    八進制數:  以0開始的數
               如:06; 0106, 05788
    十六進制數:以0X或0x開始的數
               如:0X0D, 0XFF, 0x4e
    另外, 可在整型常數后添加一個"L"或"l"字母表示該數為長整型數, 如22L,
0773L, 0Xae4l。
    2.2 浮點型(float)     一、浮點數說明
    Turbo C中有以下兩種類型的浮點數:
    float      單浮點數。字長為4 個字節共32 位二進制數,   數的范圍是
               3.4x10-38E~3.4x10+38E。
    double     雙浮點數。字長為 8個字節共 64 位二進制數,  數的范圍是
               1.7x10-308E~1.7x10+308E。
    說明:
    浮點數均為有符號浮點數, 沒有無符號浮點數。
    二、浮點型變量定義
    可以用下列語句定義浮點型變量:
    float a, f;     /*a, f被定義為單浮點型變量*/
    double b;       /*b被定義為雙浮點型變量*/

    三、浮點常數表示
    例如:  +29.56, -56.33, -6.8e-18, 6.365
    說明:
    1. 浮點常數只有一種進制(十進制)。
    2. 所有浮點常數都被默認為double。
    3. 絕對值小于1的浮點數, 其小數點前面的零可以省略。如:0.22可寫為.22,
-0.0015E-3可寫為-.0015E-3。
    4. Turbo C默認格式輸出浮點數時, 最多只保留小數點后六位。
     2.3 字符型(char)
    加上不同的修飾符, 可以定義有符號和無符號兩種類型的字符型變量, 例如:
    char a:              /*a被定義為有符號字符變量*/
    unsigned char l;     /*l被定義為無符號字符變量*/
    字符在計算機中以其ASCII碼方式表示, 其長度為1個字節, 有符號字符型數
取值范圍為-128~127, 無符號字符型數到值范圍是0~255。因此在Turbo C語言中,
字符型數據在操作時將按整型數處理, 假如某個變量定義成char, 則表明該變量
是有符號的, 即它將轉換成有符號的整型數。
    Turbo C中規定對ASCII碼值大于0x80的字符將被認為是負數。例如ASCII 值
為0x8c的字符, 定義成char時,   被轉換成十六進制的整數0xff8c 。 這是因當
ASCII碼值大于0x80時, 該字節的最高位為1, 計算機會認為該數為負數,   對于
0x8c表示的數實際上是-74(8c的各位取反再加1), 而-74 轉換成兩字節整型數并
在計算機中表示時就是0xff8c(  對0074 各位取反再加1)  。  因此只有定義為
unsigned char 0x8c轉換成整型數時才是8c。這一點在處理大于0x80的ASCII碼
字符時(例如漢字碼)要非凡注重。一般漢字均定義為unsigned char(在以后的程
序中會經常碰到)。
    另外, 也可以定義一個字符型數組(關于數組后面再作具體介紹), 此時該數
組表示一個字符串。
    例如:
        char str[10];
    計算機在編譯時, 將留出連續10個字符的空間, 即str[0]到str[9]共10個變
量, 但只有前9個供用戶使用。第10個str[9]用來存放字符串終止符NULL即"/0",
但終止符是編編譯程序自動加上的, 這一點應非凡注重。
    二、字符常數表示
    能用符號表示的字符可直接用單引號括起來表示, 如'a', '9', 'Z',  也可用
該字符的ASCII碼值表示, 例如十進制數85表示大寫字母'U', 十六進制數0x5d表示
']', 八進制數0102表示大寫字母'B'。
    一些不能用符號表示的控制符, 只能用ASCII碼值來表示, 如十進制數10 表示
換行, 下六進制數0x0d表示回車, 八進制數033表示Esc。Turbo C2.0中也有另外一
種表示表示方法, 如'/033'表示Esc,  這里'/ 0' 符號后面的數字表示十六進制的
ASCII值當然這種表示方法也適用于可睦接用符號表示的字符。
    另外, Turbo C2.0中有些常用的字符用以下非凡規定來表示:
          規定符            等價于           含義
          '/f'               '/X0C'          換頁
          '/r'               '/X0D'          回車
          '/t'               '/X09'          制表鍵
          '/n'               '/X0A'          換行
          '//'               '/X5C'          /符
          '/''               '/X27'          '符
          '/"'               '/X22'          "符
    對于字符串常量, 一般用雙引號括起來表示, 如"Hello Turbo C2.0"。

    2.4  指針型(*)
    指針是一種非凡的數據類型, 在其它語言中一般沒有。指針是指向變量的地址,
實質上指針就是存貯單元的地址。  根據所指的變量類型不同,   可以是整型指針
(int *)、浮點型指針(float *)、字符型指針(char *)、結構指針(struct *)和聯
合指針(union *)(結構指針和聯合指針將在第4節中介紹)。
 
    2.5 無值型(void)
    無值型字節長度為0, 主要有兩個用途:  一是明確地表示一個函數不返回任何
值; 一是產生一個同一類型指針(可根據需要動態分配給其內存)。
    例如:
             void *buffer;    /*buffer被定義為無值型指針*/
2 要害字和標識符    3.1  要害字
    所謂要害字就是已被Turbo C2.0本身使用, 不能作其它用途使用的字。例如關
鍵字不能用作變量名、函數名等。
    Turbo C2.0有以下要害字:
    Turbo C2.0擴展的共11個
     asm       _cs       _ds       _es       _ss       cdecl
     far       near      huge      interrupt pascal
    由ANSI標準定義的共32個
     auto      double    int       struct    break     else
     long      switch    case      enum      register  typedef
     char      extern    return    union     const     float
     short     unsigned  continue  for       signed    void
     default   goto      sizeof    volatile  do        if
     while     static
    3.2 標識符
    所謂標識符是指常量、變量、語句標號以及用戶自定義函數的名稱。 Turbo C
2.0標識符的定義十分靈活。作為標識符必須滿足以下規則:
    1. 所有標識符必須由一個字母(a~z, A~Z)或下劃線(_)開頭;
    2. 標識符的其它部分可以用字母、下劃線或數字(0~9)組成;
    3. 大小寫字母表示不同意義, 即代表不同的標識符;
    4. 標識符只有前32個字符有效;
    5. 標識符不能使用Turbo C2.0的要害字。
    下面舉出幾個正確和不正確的標識符:
               正確                不正確
               smart               5smart
               _decision           bomb?
               key_board           key.board
               FLOAT               float

3. 變量    4.1  變量說明
    Turbo C2.0規定所有變量在使用前都必須中以說明。一條變量說明語句由數據
類型和其后的一個或多個變量名組成。變量說明的形式如下:
    類型 <變量表>;
    這里類型是指Turbo C2.0的有效數據類型。變量表是一個或多個標識符名, 每
個標識符之間用","分隔。
    例如:
          int i, j, k;   unsigned char c, str[5], *p;
    4.2 變量種類
    變量可以在程序中三個地方說明: 函數內部、函數的參數定義中或所有的函數
外部。根據所定義位置的不同, 變量可分為局部變量、形式參數和全程變量。
    一、局部變量
    局部變量是指在函數內部說明的變量(有時也稱為自動變量)。用要害字auto進
行說明, 當auto省略時, 所有的非全程變量都被認為是局部變量, 所以auto實際上
從來不用。
    局部變量在函數調用時自動產生, 但不會自動初始化, 隨函數調用的結束, 這
個變量也就自動消失了, 下次調用此函數時再自動產生, 還要再賦值, 退出時又自
動消失。
    二、形式參數
    形式參數是指在函數名后面的小括號里定義的變量, 用于接受來自調用函數的
參數。形式參數在函數內部可以象其它局部變量那樣來作用。
    例如:
     puthz(int x, int y, int color, char *p)
     {
          int i, j, k;   /*定義局部變量*/
          <程序體>
     }
    其中x, y, color, *p為函數的形式參數,  不需要再進行說明就可在該函數內
直使用。
    三、全程變量
    全程變量是指在所有函數之外說明的變量, 它在整個程序內部者是"可見的",
可以被任何一個函數使用, 并且在整個程序的運行中都保留其值。全程變量只要滿
足在使用它以前和函數以外這兩個條件, 可在程序的任何位置進行說明, 習慣上通
常在程序的主函數前說明。
    例如:
     #include<stdio.h>
     int test;                /*定義全程變量*/
     void f1(int x, float y); /*子函數說明*/
     void f2(void);           /*子函數說明*/
     main()
     {
          test=5;             /*給全程變量賦值*/
          f1(20, 5.5);        /*調用有形式參數的子函數f1()*/
                              /*test的值變成115*/
          f2();               /*調用f2(), test的值變為1150*/
     }
     void f1(int x, float y)
     {
          float z;            /*z定義為局部變量*/
          z=x*y;              /*計算*/
          test=test+z;
     }
     void f2(void)
     {
          int count=10;       /*定義局部變量并初始化*/
          test=test*count;
     }

    由于全程變量可被整個程序內的任何一個函數使用, 所以可作為函數之間傳遞
參數的手段, 但全程變量太多時, 內存開銷變大。
    4.3 變量存儲類型
    Turbo C2.0支持四種變量存儲類型。說明符如下:
     auto      static    extern    register
下面分別來介紹。
    一、auto
    auto稱為自動變量, 已在前面作了介紹, 這里不再重復。
    二、static
    static稱為靜態變量。根據變量的類型可以分為靜態局部變量和靜態全程變量。
    1. 靜態局部變量
    它與局部變量的區別在于: 在函數退出時, 這個變量始終存在, 但不能被其它
函數使用, 當再次進入該函數時, 將保存上次的結果。其它與局部變量一樣。
    2. 靜態全程變量
    Turbo C2.0答應將大型程序分成若干獨立模塊文件分別編譯, 然后將所有模塊
的目標文件連接在一起, 從而提高編譯速度, 同時也便于軟件的治理和維護。靜態
全程變量就是指只在定義它的源文件中可見而在其它源文件中不可見的變量。它與
全程變量的區別是: 全程變量可以再說明為外部變量(extern), 被其它源文件使用,
而靜態全程變量卻不能再被說明為外部的, 即只能被所在的源文件使用。
    三、extern
    extern稱為外部變量。為了使變量除了在定義它的源文件中可以使用外, 還要
被其它文件使用。因此,   必須將全程變量通知每一個程序模塊文件,   此時可用
extern來說明。
    例如:
        文件1為file1.c                  文件2為file2.c
    int i, j;/*定義全程變量*/        extern int i, j;/*說明將i, j從
                                                     文件1中復制過來*/
    char c;                          extern char c; /*將c復制過來*/
    void func1(int k);               func2()        /*用戶定義函數*/
                                     {
    main()                              static float k;/*定義靜態變量*/
    {                                   i=j*5/100;
          func1(20);/*調用函數*/        k=i/1.5;
          func2();                           .
          .                                  .
          .                                  .
          .                            }
     }
     func1(int k) /*用戶定義函數*/
     {
          j=k*100;
     }

    對于以上兩個文件file1.c和file2.c, 用Turbo C2.0的集成開發環境進行編譯
連接時, 首先應建立一個.prj的文件。例如file.prj, 該文件內容如下:
     file1.c
     file2.c
    然后將file.prj的文件名寫入主菜單Project中的Project Name項中。 再用F9
編譯連接, 就可產生一個文件名為fioe.exe的可執行文件。
    外部變量和FORTRAN語言中的COMMOM定義的公共變量一樣。
    四、register
    register稱為寄存器變量。它只能用于整型和字符型變量。定義符register說
明的變量被Turbo C2.0存儲在CPU的寄存器中,  而不是象普通的變量那樣存儲在內
存中, 這樣可以提高運算速度。但是Turbo C2.0只答應同時定義兩個寄存器變量,
一旦超過兩個, 編譯程序會自動地將超過限制數目的寄存器變量當作非寄存器變量
來處理。因此, 寄存器變量常用在同一變量名頻繁出現的地方。
    另外, 寄存器變量只適用于局部變量和函數的形式參數, 它屬于auto型變量,
因此, 不能用作全程變量。定義一個整型寄存器變量可寫成:
      register int a;
    對于以上所介紹的變量類型和變量存儲類型將會在以后的學習中, 通過例行程
序中的定義、使用來逐漸加深理解。
    4.4  數組變量
    所謂數組就是指具有相同數據類型的變量集, 并擁有共同的名字。數組中的每
個特定元素都使用下標來訪問。數組由一段連續的存貯地址構成, 最低的地址對應
于第一個數組元素, 最高的地址對應最后一個數組元素。數組可以是一維的、也可
以是多維的。Turbo C2.0象它高級語方一樣也使用數組變量。
    一、一維數組
    一維數組的說明格式是:
      類型  變量名[長度];
    類型是指數據類型, 即每一個數組元素的數據類型, 包括整數型、浮點型、字
符型、指針型以及結構和聯合。
    例如:
     int a[10];
     unsigned long a[20];
     char *s[5];
     char *f[];
    說明:
    1. 數組都是以0作為第一個元素的下標, 因此, 當說明一個int a[16] 的整型
數組時, 表明該數組有16個元素, a[0]~a[15], 一個元素為一個整型變量。
    2. 大多數字符串用一維數組表示。數組元素的多少表示字符串長度,  數組名
表示字符串中第一個字符的地址,   例如在語句char  str[ 8] 說明的數組中存入
"hello"字符串后, str表示第一個字母"h"所在的內存單元地址。str[0] 存放的是
字母"h"的ASCII碼值, 以此類推, str[4]存入的是字母"o"的ASCII碼值, str[5]則
應存放字符串終止符'/0'。
    3. Turbo C2.0對數組不作邊界檢查。例如用下面語句說明兩個數組
    char str1[5], str2[6];
    當賦給str1一個字符串"ABCDEFG"時, 只有"ABCDE"被賦給, "E" 將會自動的賦
給str2, 這點應非凡注重。
    三、多維數組
    多維數組的一般說明格式是:
       類型  數組名[第n維長度][第n-1維長度]......[第1維長度];
    這種說明方式與BASIC、FORTRAN等語言中多維數組的說明不一樣。
    例如:
      int m[3][2];       /*定義一個整數型的二維數組*/
      char c[2][2][3];   /*定義一個字符型的三維數組*/
    數組m[3][2]共有3*2=6個元素, 順序為:
      m[0][0], m[0][1], m[1][0], m[1][1], m[2][0], m[2][1];
    數組c[2][2][3]共有2*2*3=12個元素, 順序為:
      c[0][0][0], c[0][0][1], c[0][0][2],
      c[0][1][0], c[0][1][1], c[0][1][2],
      c[1][0][0], c[1][0][1], c[1][0][2],
      c[1][1][0], c[1][1][1], c[1][1][2],
    數組占用的內存空間(即字節數)的計算式為:
     字節數=第1維長度*第2維長度*...*第n維長度*該數組數據類型占用的字節數

    4.5  變量的初始化和賦值
    一、變量的初始化
    變量的初始化是指變量在被說明的同時賦給一個初值。Turbo C2.0中外部變量
和靜態全程變量在程序開始處被初始化, 局部變量包括靜態局部變量是在進入定義
它們的函數或復合語句時才作初始化。所有全程變量在沒有明確的初始化時將被自
動清零, 而局部變量和寄存器變量在未賦值前其值是不確定的。
    對于外部變量和靜態變量, 初值必須是常數表達式, 而自動變量和寄存器變量
可以是任意的表達式, 這個表達式可以包括常數和前面說明過的變量和函數。
    1. 單個變量的初始化
    例如:
     float f0, f1=0.2;/*定義全程變量, 在初始化時f0被清零, f1被賦0.2*/
     main()
     {
          static int i=10, j; /*定義靜態局部變量, 初始化時i被賦10, j不確
                              定*/
          int k=i*5;          /*定義局部變量, 初始化時k被賦10*5=50*/
          char c='y';         /*定義字符型指什變量并初始化*/
          .
          .
          .
     }
    2. 數組變量的初始化
    例如:
     main()
     {
          int p[2][3]={{2, -9, 0}, {8, 2, -5}};  /*定義數組p并初始化/*
          int m[2][4]={{27, -5, 19, 3}, {1, 8, -14, -2}};/*定義數組m并初
                                                         始化*/
          char *f[]={'A', 'B', 'C'};         /*定義數組f并初始化*/
          .
          .
          .
     }
    從上例可以看出: Turbo C2.0中數組進行初始化有下述規則:
    (1) 數組的每一行初始化賦值用"{}"并用","分開, 總的再加一對"{}"括起來,
最后以";"表示結束。
    (2) 多維數組的存儲是按最右維數的變量變化最快的原則。
    (3) 多維數組存儲是連續的, 因此可以用一維數組初始化的辦法來初始化多維
數組。
    例如:
     int x[2][3]={1, 2, 3, 4, 5, 6};/*用一維數組來初始化二維數組*/
    (4) 對數組初始化時, 假如初值表中的數據個數比數組元素少, 則不足的數組
元素用0來填補。
    (5) 對指針型變量數組可以不規定維數, 在初始化賦值時, 數組維數從0 開始
被連續賦值。
    例如:
     char *f[]={'a', 'b', 'c'};
    初始化時將會給3個字符指針賦值, 即: *f[0]='a', *f[1]='b', *f[2]='c'。

    3. 指針型變量的初始化
    例如:
     main()
     {
          int *i=7899;        /*定義整型數指針變量并初始化*/
          float *f=3.1415926; /*定義浮點數指針變量并初始化*/
          char *s="Good";     /*定義字符型指針變量并初始化*/
          .
          .
          .
     }
    二、變量的賦值
    變量賦值是給已說明的變量賦給一個特定值。
    1. 單個變量的賦值
    (1) 整型變量和浮點變量
    這兩種變量采用下列格式賦值
          變量名=表達式;
    例如:
     main()
     {
          int a, m;      /*定義局部整型變量a, m*/
          float n;       /*定義局部浮點變量f*/
          a=100, m=20;   /*給變量賦值*/
          n=a*m*0.1;
          .
          .
          .
     }
    說明:
    Turbo C2.0中答應給多個變量賦同一值時可用連等的方式。
    例如:
     main()
     {
          int a, b, c;
          a=b=c=0;       /*同時給a,b,c賦值*/
          .
          .
          .
     }
    (2)  字符型變量
    字符型變量可以用三種方法賦值。
    例如:
     main()
     {
          char a0, a1, a2;    /*定義局部字符型變量a0, a1, a2*/
          a0='b';             /*將字母b賦給a0*/
          a1=50;              /*將數字2(十進制ASCII值為50賦給a1*/
          a2='/x0d';          /*將回車符賦給a2*/
          .
          .
          .
     }

    (3) 指針型變量
    例如:
     main()
     {
          int *i;
          char *str;
          *i=100;
          str="Good";
          .
          .
          .
     }
    *i表示i是一個指向整型數的指針, 即*i是一個整型變量, i是一個指向該整型
變量的地址。
    *str表示str是一個字符型指針, 即保留某個字符地址。在初始化時, str沒有
什么非凡的值, 而在執行str="Good"時, 編譯器先在目標文件的某處保留一個空間
存放"Good/0"的字符串, 然后把這個字符串的第一個字母"G"的地址賦給str, 其中
字符串結尾符"/0"是編譯程序自動加上的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湟中县| 望江县| 湘乡市| 家居| 房山区| 长顺县| 安阳县| 龙口市| 工布江达县| 正定县| 游戏| 岳西县| 乐清市| 广东省| 静安区| 城市| 花垣县| 宜城市| 寿宁县| 伊吾县| 龙川县| 特克斯县| 资兴市| 忻州市| 岢岚县| 法库县| 资阳市| 阿坝| 扎赉特旗| 梧州市| 筠连县| 聂荣县| 宜州市| 鸡西市| 古浪县| 安化县| 泰来县| 邻水| 克拉玛依市| 武定县| 滦南县|