[ 收藏 ] [ 简体中文 ]  
臺灣貨到付款、ATM、超商、信用卡PAYPAL付款,4-7個工作日送達,999元臺幣免運費   在線留言 商品價格為新臺幣 
首頁 電影 連續劇 音樂 圖書 女裝 男裝 童裝 內衣 百貨家居 包包 女鞋 男鞋 童鞋 計算機周邊

商品搜索

 类 别:
 关键字:
    

商品分类

  •  管理

     一般管理学
     市场/营销
     会计
     金融/投资
     经管音像
     电子商务
     创业企业与企业家
     生产与运作管理
     商务沟通
     战略管理
     商业史传
     MBA
     管理信息系统
     工具书
     外文原版/影印版
     管理类职称考试
     WTO
     英文原版书-管理
  •  投资理财

     证券/股票
     投资指南
     理财技巧
     女性理财
     期货
     基金
     黄金投资
     外汇
     彩票
     保险
     购房置业
     纳税
     英文原版书-投资理财
  •  经济

     经济学理论
     经济通俗读物
     中国经济
     国际经济
     各部门经济
     经济史
     财政税收
     区域经济
     统计 审计
     贸易政策
     保险
     经济数学
     各流派经济学说
     经济法
     工具书
     通货膨胀
     财税外贸保险类考试
     英文原版书-经济
  •  社会科学

     语言文字
     社会学
     文化人类学/人口学
     新闻传播出版
     社会科学总论
     图书馆学/档案学
     经典名家作品集
     教育
     英文原版书-社会科学
  •  哲学

     哲学知识读物
     中国古代哲学
     世界哲学
     哲学与人生
     周易
     哲学理论
     伦理学
     哲学史
     美学
     中国近现代哲学
     逻辑学
     儒家
     道家
     思维科学
     马克思主义哲学
     经典作品及研究
     科学哲学
     教育哲学
     语言哲学
     比较哲学
  •  宗教

  •  心理学

  •  古籍

     经部  史类  子部  集部  古籍管理  古籍工具书  四库全书  古籍善本影音本  中国藏书
  •  文化

     文化评述  文化随笔  文化理论  传统文化  世界各国文化  文化史  地域文化  神秘文化  文化研究  民俗文化  文化产业  民族文化  书的起源/书店  非物质文化遗产  文化事业  文化交流  比较文化学
  •  历史

     历史普及读物
     中国史
     世界史
     文物考古
     史家名著
     历史地理
     史料典籍
     历史随笔
     逸闻野史
     地方史志
     史学理论
     民族史
     专业史
     英文原版书-历史
     口述史
  •  传记

  •  文学

  •  艺术

     摄影
     绘画
     小人书/连环画
     书法/篆刻
     艺术设计
     影视/媒体艺术
     音乐
     艺术理论
     收藏/鉴赏
     建筑艺术
     工艺美术
     世界各国艺术概况
     民间艺术
     雕塑
     戏剧艺术/舞台艺术
     艺术舞蹈
     艺术类考试
     人体艺术
     英文原版书-艺术
  •  青春文学

  •  文学

     中国现当代随笔
     文集
     中国古诗词
     外国随笔
     文学理论
     纪实文学
     文学评论与鉴赏
     中国现当代诗歌
     外国诗歌
     名家作品
     民间文学
     戏剧
     中国古代随笔
     文学类考试
     英文原版书-文学
  •  法律

     小说
     世界名著
     作品集
     中国古典小说
     四大名著
     中国当代小说
     外国小说
     科幻小说
     侦探/悬疑/推理
     情感
     魔幻小说
     社会
     武侠
     惊悚/恐怖
     历史
     影视小说
     官场小说
     职场小说
     中国近现代小说
     财经
     军事
  •  童书

  •  成功/励志

  •  政治

  •  军事

  •  科普读物

  •  计算机/网络

     程序设计
     移动开发
     人工智能
     办公软件
     数据库
     操作系统/系统开发
     网络与数据通信
     CAD CAM CAE
     计算机理论
     行业软件及应用
     项目管理 IT人文
     计算机考试认证
     图形处理 图形图像多媒体
     信息安全
     硬件
     项目管理IT人文
     网络与数据通信
     软件工程
     家庭与办公室用书
  •  建筑

     执业资格考试用书  室内设计/装潢装修  标准/规范  建筑科学  建筑外观设计  建筑施工与监理  城乡规划/市政工程  园林景观/环境艺术  工程经济与管理  建筑史与建筑文化  建筑教材/教辅  英文原版书-建筑
  •  医学

     中医
     内科学
     其他临床医学
     外科学
     药学
     医技学
     妇产科学
     临床医学理论
     护理学
     基础医学
     预防医学/卫生学
     儿科学
     医学/药学考试
     医院管理
     其他医学读物
     医学工具书
  •  自然科学

     数学
     生物科学
     物理学
     天文学
     地球科学
     力学
     科技史
     化学
     总论
     自然科学类考试
     英文原版书-自然科学
  •  工业技术

     环境科学
     电子通信
     机械/仪表工业
     汽车与交通运输
     电工技术
     轻工业/手工业
     化学工业
     能源与动力工程
     航空/航天
     水利工程
     金属学与金属工艺
     一般工业技术
     原子能技术
     安全科学
     冶金工业
     矿业工程
     工具书/标准
     石油/天然气工业
     原版书
     武器工业
     英文原版书-工业技
  •  农业/林业

     园艺  植物保护  畜牧/狩猎/蚕/蜂  林业  动物医学  农作物  农学(农艺学)  水产/渔业  农业工程  农业基础科学  农林音像
  •  外语

  •  考试

  •  教材

  •  工具书

  •  中小学用书

  •  中小学教科书

  •  动漫/幽默

  •  烹饪/美食

  •  时尚/美妆

  •  旅游/地图

  •  家庭/家居

  •  亲子/家教

  •  两性关系

  •  育儿/早教

  •  保健/养生

  •  体育/运动

  •  手工/DIY

  •  休闲/爱好

  •  英文原版书

  •  港台图书

  •  研究生
     工学
     公共课
     经济管理
     理学
     农学
     文法类
     医学

  •  音乐
     音乐理论

     声乐  通俗音乐  音乐欣赏  钢琴  二胡  小提琴
  • C語言程序設計及應用教程
    該商品所屬分類:研究生 -> 工學
    【市場價】
    193-280
    【優惠價】
    121-175
    【作者】 郭鵬 
    【所屬類別】 圖書  教材  研究生/本科/專科教材  工學 
    【出版社】清華大學出版社 
    【ISBN】9787302468165
    【折扣說明】一次購物滿999元台幣免運費+贈品
    一次購物滿2000元台幣95折+免運費+贈品
    一次購物滿3000元台幣92折+免運費+贈品
    一次購物滿4000元台幣88折+免運費+贈品
    【本期贈品】①優質無紡布環保袋,做工棒!②品牌簽字筆 ③品牌手帕紙巾
    版本正版全新電子版PDF檔
    您已选择: 正版全新
    溫馨提示:如果有多種選項,請先選擇再點擊加入購物車。
    *. 電子圖書價格是0.69折,例如了得網價格是100元,電子書pdf的價格則是69元。
    *. 購買電子書不支持貨到付款,購買時選擇atm或者超商、PayPal付款。付款後1-24小時內通過郵件傳輸給您。
    *. 如果收到的電子書不滿意,可以聯絡我們退款。謝謝。
    內容介紹



    開本:16開
    紙張:膠版紙
    包裝:平裝-膠訂

    是否套裝:否
    國際標準書號ISBN:9787302468165
    叢書名:普通高校本科計算機專業特色教材精選·算法與程序設計

    作者:郭鵬
    出版社:清華大學出版社
    出版時間:2017年06月 


        
        
    "
    編輯推薦
    精心策劃,專為零基礎初學者循序漸進地講解C語言基礎。 
    內容簡介
    本書針對零基礎初學者循序漸進地介紹了C語言知識及其程序設計方法,主要教學內容包括算法、數據類型、運算符、表達式、程序結構、數組、函數、指針、結構體、共用體、位運算、文件和實例分析。
    本書根據初學者特點,在章節安排、內容講解和例題分析方面做了精心策劃。整書體繫合理,教學內容由淺入深且通俗易懂,章節例題力求典型且講解細致。為使讀者放心參考,本書所有例程均在Visual C 6.0運行環境下進行了驗證。
    本書非常適合作為高等院校電類專業C語言程序設計課程的教材,也可作為廣大C語言學習愛好者的自學和參考用書。
    作者簡介
    郭鵬,石家莊學院教師,多年來一直從事C語言程序設計、電路分析、單片機原理等課程的教學工作。科研方向為智能控制、嵌入式繫統設計,曾主持參與河北省自然科學基金項目1項,河北省科技廳、教育廳課題7項,石家莊市級課題10項,橫向課題1項,校級課題多項;發表電類專業論文20餘篇,EI收錄4篇,中文核心10篇,參編電氣專業教材1部。作為省級優秀指導教師指導學生參加科研競賽成績優異,獲全國及省市級獎勵13項。
    目錄
    目錄



    第1章C語言概述

    1.1基礎知識

    1.2為什麼要學C語言

    1.3C程序結構分析

    1.4C程序上機步驟

    目錄


     


     


     


    第1章C語言概述


     


    1.1基礎知識


     


    1.2為什麼要學C語言


     


    1.3C程序結構分析


     


    1.4C程序上機步驟


     


    第2章算法


     


    2.1算法的概念


     


    2.2常見的算法描述方法


     


    2.2.1用自然語言表示算法


     


    2.2.2用傳統流程圖表示算法


     


    2.2.3用結構化流程圖表示算法


     


    2.2.4用偽代碼表示算法


     


    2.2.5用計算機語言表示算法


     


    2.3結構化程序設計方法


     


    第3章數據類型、運算符和表達式


     


    3.1數據類型


     


    3.2常量與變量


     


    3.2.1標識符


     


    3.2.2常量和符號常量


     


    3.2.3變量


     


    3.3C語言的常用數據類型


     


    3.3.1整型數據


     


    3.3.2實型數據


     


    3.3.3字符型數據


     


     


    3.3.4為變量賦初值


     


    3.4不同數據類型間的轉換


     


    3.4.1混合運算中的數據類型轉換


     


    3.4.2賦值運算中的數據類型轉換


     


    3.4.3強制轉換


     


    3.5運算符和表達式


     


    3.5.1算術運算符和算術表達式


     


    3.5.2賦值運算符和賦值表達式


     


    3.5.3逗號運算符和逗號表達式


     


     


     


     


     


     


     


     


    第4章程序結構


     


    4.1順序結構程序設計


     


    4.1.1C語句


     


    4.1.2賦值語句


     


    4.1.3數據的輸入與輸出實現


     


    4.1.4字符數據的輸入與輸出


     


    4.1.5格式輸入與格式輸出


     


    4.1.6順序結構程序設計舉例


     


    4.2選擇結構程序設計


     


    4.2.1關繫運算符和邏輯運算符


     


    4.2.2if語句


     


    4.2.3if語句的嵌套


     


    4.2.4switch語句


     


    4.2.5選擇結構程序舉例


     


    4.3循環結構程序設計


     


    4.3.1goto語句


     


    4.3.2while語句


     


    4.3.3do…while語句


     


    4.3.4for語句


     


    4.3.5循環的嵌套


     


    4.3.6break語句和continue語句


     


    4.3.7循環語句小結


     


    4.3.8循環結構程序舉例


     


    第5章數組


     


    5.1一維數組


     


    5.1.1一維數組的定義


     


    5.1.2一維數組的初始化


     


    5.1.3一維數組的引用


     


    5.1.4一維數組程序舉例


     


    5.2二維數組


     


    5.2.1二維數組的定義


     


    5.2.2二維數組的初始化


     


    5.2.3二維數組的引用


     


    5.2.4二維數組程序舉例


     


    5.3字符數組


     


    5.3.1字符數組的定義、初始化和引用


     


    5.3.2字符串


     


    5.3.3字符串的輸入與輸出


     


    5.3.4字符串處理函數


     


    5.3.5字符串程序舉例


     


    第6章函數


     


    6.1函數概述


     


    6.2函數的類別


     


    6.2.1庫函數


     


    6.2.2用戶自定義函數


     


    6.3函數的定義


     


    6.3.1無參函數的定義


     


    6.3.2有參函數的定義


     


    6.3.3空函數


     


    6.4函數聲明


     


    6.5函數的參數與函數的返回值


     


    6.5.1函數的實際參數和形式參數


     


    6.5.2數組作為函數參數


     


    6.5.3函數的返回值


     


    6.6函數的調用


     


    6.6.1函數調用的一般形式


     


    6.6.2函數調用的過程


     


    6.6.3三種函數調用方式


     


    6.6.4函數的嵌套調用


     


    6.6.5函數的遞歸調用


     


    6.7變量的作用域和存儲類型


     


    6.7.1局部變量和全局變量


     


    6.7.2變量的存儲類型


     


    6.7.3變量定義和聲明的區別


     


    6.8內部函數和外部函數


     


    6.8.1內部函數


     


    6.8.2外部函數


     


    6.9編譯預處理


     


    6.9.1宏定義


     


    6.9.2文件包含


     


    6.9.3條件編譯


     


    第7章指針


     


    7.1指針概述


     


    7.2指針變量和簡單變量


     


    7.2.1定義指針變量


     


    7.2.2指針變量的初始化


     


    7.2.3指針變量的引用


     


    7.3指針變量與一維數組


     


    7.3.1作為指針的數組名


     


    7.3.2使用指針變量引素


     


    7.3.3使用指針變量處理字符串


     


    7.3.4指針運算


     


    7.4指針變量與函數


     


    7.4.1指針變量作為函數參數


     


    7.4.2數組名作為函數參數


     


    7.5指針的高級應用


     


    7.5.1指針與多維數組


     


    7.5.2指向函數的指針變量


     


    7.5.3返回指針的函數


     


    7.5.4指針數組


     


    7.5.5指向指針的指針變量


     


    第8章結構體與共用體


     


    8.1結構體類型


     


    8.1.1結構體類型的定義


     


    8.1.2結構體變量的定義


     


    8.1.3結構體變量的初始化和引用


     


    8.2結構體數組


     


    8.2.1結構體數組的定義


     


    8.2.2結構體數組的初始化


     


    8.2.3結構體數組的引用


     


    8.3共用體數據類型


     


    8.3.1共用體變量的定義


     


    8.3.2共用體變量的引用


     


    8.4枚舉數據類型


     


    8.4.1枚舉類型及其變量的定義


     


    8.4.2枚舉變量的引用


     


    8.5自定義類型


     


    第9章位運算


     


    9.1位運算符與位運算


     


    9.1.1按位與運算符“&”


     


    9.1.2按位或運算符“|”


     


    9.1.3按位異或運算符“^”


     


    9.1.4按位取反運算符“~”


     


    9.1.5左移運算符“”


     


    9.1.6右移運算符“”


     


    9.2位段


     


    第10章文件


     


    10.1C文件的概念


     


    10.1.1文件名


     


    10.1.2文件的分類


     


    10.2文件的打開與關閉


     


    10.2.1文件類型指針


     


    10.2.2文件的打開(fopen函數)


     


    10.2.3文件的關閉(fclose函數)


     


    10.3文件的讀取和寫入


     


    10.3.1fgetc函數和fputc函數


     


    10.3.2fgets函數和fputs函數


     


    10.3.3fprint函數和fscanf函數


     


    10.3.4fread函數和fwrite函數


     


    10.4文件的定位


     


    10.4.1rewind函數


     


    10.4.2fseek函數


     


    10.4.3ftell函數


     


    10.4.4實例解析


     


    第11章C語言在單片機編程中的實例解析


     


     


    附錄A常用字符與ASCII代碼對照表


     


    附錄B關鍵字及其用途


     


    附錄C運算符和結合性


     


    附錄D常用的C語言庫函數


     

    前言
    前言
    自1972年誕生以來,由於數據類型豐富、運算方便、表達方式靈活、兼具高級語言和低級語言的優點且能夠直接對計算機硬件進行操作,C語言迅速成為一種在全世界範圍內被廣泛使用的程序設計語言。
    在實際應用中,從網絡後臺程序到計算機操作繫統,各種各樣的應用程序和遊戲均可使用C語言進行開發設計,用其編寫的程序普遍具有執行效率高、代碼緊湊、可移植性好等優點。鋻於C語言在工業領域中的重要性,很多高職院校和普通高等院校都將其作為電類專業學生的程序設計基礎語言課程,其目的是使學生在了解並掌握程序設計思想和方法的基礎上,培養計算機程序設計的實踐能力。C語言的優秀教材很多,但能夠將C語言與電類專業應用聯繫在一起,並讓零基礎初學者欣然接受的卻並不多。因此,本書針對初學者的學習特點,通過內容整合、示例精講、實例分析等方式,重新整理安排了電類專業C語言教學內容,力圖使其更加簡潔明確、通俗易懂,更具專業針對性。
    本書以ANSI C為標準(美國國家標準協會推出的C語言標準),以Visual C 6.0為集成開發環境,全面繫統地介紹了C語言及其程序設計思想和方法,主要特點如下:前言
          自1972年誕生以來,由於數據類型豐富、運算方便、表達方式靈活、兼具高級語言和低級語言的優點且能夠直接對計算機硬件進行操作,C語言迅速成為一種在全世界範圍內被廣泛使用的程序設計語言。
    在實際應用中,從網絡後臺程序到計算機操作繫統,各種各樣的應用程序和遊戲均可使用C語言進行開發設計,用其編寫的程序普遍具有執行效率高、代碼緊湊、可移植性好等優點。鋻於C語言在工業領域中的重要性,很多高職院校和普通高等院校都將其作為電類專業學生的程序設計基礎語言課程,其目的是使學生在了解並掌握程序設計思想和方法的基礎上,培養計算機程序設計的實踐能力。C語言的優秀教材很多,但能夠將C語言與電類專業應用聯繫在一起,並讓零基礎初學者欣然接受的卻並不多。因此,本書針對初學者的學習特點,通過內容整合、示例精講、實例分析等方式,重新整理安排了電類專業C語言教學內容,力圖使其更加簡潔明確、通俗易懂,更具專業針對性。
    本書以ANSI C為標準(美國國家標準協會推出的C語言標準),以Visual C 6.0為集成開發環境,全面繫統地介紹了C語言及其程序設計思想和方法,主要特點如下: 
    (1) 教學內容由淺入深、循序漸進,符合初學者零基礎的特點。前4章作為基礎部分,各章節知識點講解簡單明了,示例豐富,能夠幫助讀者盡快掌握C語言基礎。第5~10章作為進階部分,在介紹知識點的同時更注重知識點的綜合運用。第11章作為高級部分,通過專業編程實例向讀者展示了電類專業C語言編程常用知識點的實際使用情況。(2) 章節安排合理。在循序漸進安排教學內容的同時,本書對部分章節的知識點講解順序進行了調整,使整個教學內容更富條理,更符合初學者的學習節奏,學習效率更高。(3) 避免知識點的簡單羅列,避免細枝末節的語法干擾。因為C語言的知識點多且散,初學者很難全部掌握,所以本書根據C語言在電類專業的實際應用情況,對知識點進行了必要的區分。常用知識點均輔以經典實例詳細講解,使讀者對知識點的掌握更深入透徹。偏僻知識點的講解則力求簡潔,以免過多的語法細節干擾讀者的學習進度。(4) 示例經典,注釋詳細。書中的重點教學內容均附有典型示例,對相關知識點的注釋講解極為詳細,方便讀者直觀了解和分析知識點的應用情況。(5) 結合科研競賽內容,理論聯繫實際,注重實戰能力培養。在計算機、電氣、電子、通信等電類專業實際應用中,C語言的編程應用極為廣泛。因此,借助作者所在單位——石家莊學院物電學院近年來在全國電子設計大賽、全國智能車競賽、河北省挑戰杯等科研競賽中的經驗積累,本書專門整理搜集了多個基於C語言的科研競賽實例。通過實例分析讓讀者更好地感受和實踐C語言編程的樂趣。本書由石家莊、孫宏強、孫建起編寫,其中,第1~3章、第5~7章和第9章由郭鵬編寫,第8章、第10編寫,第11章由孫宏強編寫,第4章由孫建起編寫。全書由郭鵬主編並統稿。此外,石家莊學院張玉豐和張勇傑同學也參與了本書的部分實例整理工作。本書在編寫過程中參閱了大量的參考文獻,在此對它們的作者表示衷心的感謝。由於編者水平有限,書中難免有錯誤和疏漏之處,懇請廣大讀者批評指正。

    作者2017年3月


    在線試讀
    第3章數據類型、運算符和表達式

    根據所執行任務的不同,C語言程序經常要用到各種類型的數據,如整數、實數、字符等。不同類型的數據作為C語言程序的基本組成部分都是以特定的形式存儲在計算機內存中的,其所占的存儲空間和運算性質也不盡相同。為方便理解數據類型的概念,這裡需要先簡單介紹一下計算機內存的相關知識。計算機內存是依次逐字節排列的,一個字節(Byte,簡寫為B)包含8位(Bit)。C語言程序在經過編譯器的編譯、連接之後終會以二進制序列的形式存儲在計算機內存當中,如圖3.1所示。


    圖3.1C程序在內存中的存儲示意圖

    第3章數據類型、運算符和表達式

    根據所執行任務的不同,C語言程序經常要用到各種類型的數據,如整數、實數、字符等。不同類型的數據作為C語言程序的基本組成部分都是以特定的形式存儲在計算機內存中的,其所占的存儲空間和運算性質也不盡相同。為方便理解數據類型的概念,這裡需要先簡單介紹一下計算機內存的相關知識。計算機內存是依次逐字節排列的,一個字節(Byte,簡寫為B)包含8位(Bit)。C語言程序在經過編譯器的編譯、連接之後終會以二進制序列的形式存儲在計算機內存當中,如圖3.1所示。


    圖3.1C程序在內存中的存儲示意圖


    可以看到,在圖3.1中C語言程序是按照內存的結構逐字節存儲的,因此C語言的基本存儲單位是字節。圖3.1中的每一個小方格都代表計算機內存中的一個小存儲單位——“位(Bit)”。每一位能且僅能存儲一個二進制數,即“1”或“0”。在計算機中,一般用高電平代表二進制數“1”,用低電平代表二進制數“0”。為方便用C語言程序對計算機內存進行數據的讀寫,計算機對內存進行了逐字節編址,即以字節(B)為單位,計算機內存中的個字節的地址是0,之後計算機內存地址按字節遞增1,直至內存的後一個字節。需要注意的是,計算機內存地址都是從0開始,但內存地址的值由計算機內存容量決定(不同的計算機,內存容量可能不同)。計算機內存地址的作用有點類似於教室的房間號,學生可以通過教室的房間號找到上課教室。同樣,C語言程序可以通過內存地址找到存儲在該的數據。除了字節(B)和位(Bit)之外,常見的內存計量單位還有字(Word,簡寫為W)、千字節(KB,簡寫為K)、兆字節(MB,簡寫為M)、千兆字節或吉字節(GB,簡寫為G)、太字節(1TB,簡寫為T)等。各種單位的換算關繫如下: 1B=8Bit; 1W=4B=32Bit; 1KB=210B=1024B; 1MB=220B=1024KB; 1GB=230B=1024MB; 1TB=240B=1024GB。一個漢字一般占兩個字節,假設硬盤有500GB的存儲空間,那麼可以存儲的漢字個數x是多少呢?x=500×1024×1024×1024÷2=268435456000個。3.1數 據 類 型按照數據結構中的定義,數據類型是指一個值的集合以及定義在這個值集上的一組操作。在C語言中,一個值的數據類型決定了這個值在計算機中的存儲形式以及允許對這個值進行的操作種類。這裡,以VC 6.0開發環境為例(不同的開發環境,相同數據類型的存儲空間可能不同),一個整型數據(int型)占4個字節的存儲空間,允許對其進行加、減、乘、除、取餘等運算; 一個雙精度浮點型數據(double型)占8個字節的存儲空間,允許對其進行加、減、乘、除運算,不允許進行取餘運算。為方便理解數據類型的必要性,拋開數據類型允許的操作不提,隻考慮其存儲情況,讀者就可以明白數據類型的重要。因為C語言程序運行時需要的數據都以字節為單位存儲在內存中,而計算機的內存是有限的,所以為了有效地利用和管理內存,繫統必須根據數據的類型給它分配,即不同類型數據所占的內存空間不盡相同。這就好比歸納物品時為節約空間,大的物品要放到大盒子裡,小的物品要放到小盒子裡一樣。C語言中常見的數據類型如圖3.2所示。

    圖3.2C語言的數據類型

    如圖3.2所示,C語言中常見的數據類型有以下4種。(1) 基本類型: 基礎的簡單數據類型,其值無法再分解為其他類型。(2) 構造類型: 顧名思義是根據已定義的一個或多個數據類型用構造的方法來定義。構造數據類型是由多個其他數據類型組合而成的,所以一個構造類型的值可以分解成若干個“成員”或&ldq素”,其中每個成員要麼是基本數據類型,要麼是又一個構造類型。(3) 指針類型: C語言中比較重要、比較難理解的內容,在後面會詳細講解。(4) 空類型: 表示沒有類型,常與函數、指針等相關內容結合使用。3.2常量與變量按照取值是否可變,基本數據類型有常量和變量兩種形式。在程序執行過程中其值不變的量稱為常量,其值可變的量稱為變量。常量和變量一般要與數據類型結合使用,如整型常量、整型變量、實型常量、實型變量、字符常量、字符變量等。在程序中常量是可以不經說明而直接引用的。變量必須先定義後使用。例如: 
    int a; /*定義了一個整型變量a*/
    a=5; /*將整型常量5賦給整型變量a*/
    在上例中,整型常量5不用說明可以直接引用,整型變量a必須先定義再使用。如果對變量a不加說明直接使用,則程序編譯時會報錯,因為繫統不知道a是什麼。3.2.1標識符標識符在C語言中的作用與人的姓名類似,是用來標識變量名、符號常量名、函數名、數組名、類型名、文件名的有效字符序列。C語言規定標識符隻能由字母、數字和下畫線三種字符組成,且個字符必須為字母或下畫線。C語言對標識符有以下分類。(1) 關鍵字: C語言已經預先定義了一批標識符,它們在程序中都代表著固定的含義,不能另作他用,這些標識符稱為關鍵字,如用來說明變量類型的關鍵字int、double、char及if語句中的if、else等,它們作為C語言的關鍵字不能再用作變量名或函數名,否則程序編譯時會報錯。(2) 預定義標識符: 指在C語言中預先定義並具有特定含義的標識符,如C語言提供的庫函數名稱(printf、scanf等)和預編譯處理命令(define、include等)。C語言允許把這類標識符重新定義另作他用,但這將使這些標識符失去預先定義的原意,因此為避免誤解,建議用戶不要把這些預定義標識符另作他用。(3) 用戶標識符: 由用戶根據需要自定義的標識符稱為用戶標識符,又稱自定義標識符。例如: 
    a、sum、_pointer、Array123、point_a1; /*合法自定義標識符*/
    1b、string.a、#89、totala、int。/*非法自定義標識符*/
    在使用自定義標識符時有以下幾點需要注意: (1) C語言區分大小寫,同一字母的大寫字母和小寫字母對C編譯器而言是兩個不同的字符。為了與日常習慣保持一致,增加程序的可讀性,變量名一般用小寫字母表示。(2) ANSIC未規定標識符的長度,但為了提高程序的可移植性和閱讀方便,變量名不宜過長(不同的編譯器有自己的規定,一般不超過32個字符)。(3) 如果用戶標識符與關鍵字相同,則程序編譯時繫統報錯。如果用戶標識符與預定義標識符相同,繫統不報錯,隻是預定義標識符將失去原定含義,代之以用戶確認的含義,這可能會引發一些程序運行錯誤。(4) 在自定義標識符時要盡量做到“見名知意”,建議優先使用有含義的英文單詞或縮寫作為標識符。3.2.2常量和符號常量常量作為數據的一種,從字面形式上即可判別,因此也叫字面常量。常量也分數據類型,如整型常量、實型常量、字符常量和字符串常量等。例如: 整型常量: -3、0、3; 實型常量: -0.33、4.56; 字符常量: 'a' 'b' 'c' 'd'; 字符串常量: "aBcdEfgHello"。除以上形式外,在C語言中還允許用一個標識符來表示一個常量,稱為符號常量。符號常量在使用之前必須先定義,其定義格式如下: 
    #define 標識符常量
    其中,define是一條預處理命令(以“#”開頭),稱為宏定義命令(第6章將詳細介紹),其功能是用標識符表示後面的常量。例如: 
    #define PI 3.14
    在符號常量PI定義後,程序中出現的所有PI都表示常量3.14。為方便與變量標識符區分,符號常量的標識符習慣使用大寫字母,變量標識符使用小寫字母。在使用符號常量時一定要注意符號常量與字符常量、字符串常量的區別。例如: 
    #define PI 3.14/*PI為符號常量,代表3.14*/
    printf("PI");/*"PI"為字符串常量,表示一串字符*/
    例3.1符號常量的使用,計算半徑為2的圓的面積。程序如下: 
    #define PI 3.14/*定義符號常量PI,代表3.14*/
    #include
    int main(void)
    {
    int r=2; /*定義int型變量r,表示圓的半徑*/
    float area; /*定義float型變量area,表示圓的面積*/
    area=PI*r*r;/*計算圓面積*/
    printf("半徑為2的圓面積area=%d\n",area);/*輸出圓面積*/
    return 0;
    }
    程序運行結果如下: 


    程序第1行用宏定義#define定義了符號常量PI,用於代表常量3.14(圓周率π),之後本程序中出現的PI都表示常量3.14,它可以像常量一樣直接參與運算。使用符號常量的優點及注意事項如下: (1) 含義清楚,見名知意。如例3.1的程序中一看PI就可以知道它代表圓周率π。(2) 一改全改,在需要改變某個常量時隻需修改其對應的符號常量,程序中所有用到它的地方也就做了相應修改。在例3.1中,如果需要改變圓周率π(由3.14變為31415926),使計算結果更精確,隻需修改符號常量的定義即可。
    #define PI 3.1415926/*修改符號常量的定義,將π改為3.1415926*/
    (3) 符號常量與變量不同,符號常量一經定義就不能再對其進行賦值操作。例如: 
    #define PI 3.1415
    PI=5;/*錯誤,符號常量不可賦值*/
    3.2.3變量顧名思義,變量就是可以改變的量。在程序運行期間,變量的值是可以改變的。變量存儲於內存當中,因此變量其實就是內存中的一個具有特定屬性的,用於存放數據,而這個數據就是變量的值。在C語言中,所有的變量都必須“先定義,後使用”。在定義變量時需要給變量指定一個名稱(變量名),以便程序引用該變量。此外,變量的定義還要指定變量的數據類型,明確所定義的變量用於存儲什麼類型的數據。例如: 
    int x;/*基本整型變量的定義*/
    上述語句定義了一個變量,變量名為x,變量的數據類型是基本整型(int型),這說明變量x對應的可存儲int型數據。若假設x的值為1,則變量x的存儲情況如圖3.3所示。

    圖3.3變量存儲示意圖
    如圖3.3所示,x是變量名,1是變量的值,2000H是該變量對應的在內存中的地址(H表示2000是十六進制數。內存地址常用十六進制或十進制表示)。C編譯器在對C程序進行編譯、連接時會給每一個變量都分配一個,用於存儲變量的值,而這個的地址就是變量名。這樣,從變量中取值的過程實際上就是通過變量名得到內存地址,並從該讀取數據的過程。簡單來說,變量名其實就是以一個名字代表一個內存地址。因此,對程序而言,變量名就是該變量在內存中的地址。程序通過變量名可以在內存中找到並引用該變量的值。變量的定義一般放在函數體的開頭部分。通過變量定義(也叫變量聲明)編譯器就建立了變量符號表。在此之後,程序會用到哪些變量,每個變量在哪裡,它們都是什麼數據類型,編譯器就都掌握了。如果某個變量未定義就使用,編譯器就無法了解該變量的信息,在程序編譯時會報錯。對於變量的使用有以下幾點需要注意: (1) 變量在定義時必須指定數據類型,以便編譯器為其分配適合的存儲空間。以VC 6.0為例,int型數據占4個字節的內存,char型數據占一個字節的內存,float型數據占4個字節的內存,double型數據占8個字節的內存。(2) 不同數據類型的變量,其運算性質是不同的。例如,C語言允許對整數進行取餘運算,如果x和y都是整型變量,則“x%y”是正確的; 如果x和y都是或其中之一是實型變量,則“x%y”是錯誤的,程序在編譯時會報錯。(3) 對於未定義的變量,編譯器無法識別。(4) 變量名和變量的值是不同的概念。例如: 
    int x;
    x=10;
    在上述語句中,x是變量名,代表變量的內存地址,10是變量值,是保存在變量中的數據。3.3C語言的常用數據類型3.3.1整型數據1. 整型常量整型常量就是整常數,包括正整數、負整數和0。正整數可以在前面加“ ”,也可以不加。負整數要在前面加“-”。在C語言中,整型常量可以用八進制、十六進制和十進制三種形式表示。為方便識別,C語言對整型常量做了以下分類。(1) 十進制整型常量: 無前綴,數碼取值為0~9。例如: 
    237、-568、65535、1627; /*正確的十進制整型常量表示*/
    023、23D。/*錯誤的十進制整型常量表示*/
    (2) 八進制整型常量: 必須以“0”開頭,即以“0”作為八進制數的前綴,數碼取值為0~7。八進制數通常是無符號數。例如: 
    015、0101、0177777;/*正確的八進制整型常量表示*/
    256、03A2、-0127./*錯誤的八進制整型常量表示*/
    (3) 十六進制整型常量: 前綴為“0X”或“0x”,數碼取值為0~9、A~F或a~f。例如: 
    0X2A、0XA0、0XFFFF; /*正確的十六進制整型常量表示*/
    5A、0X3H。/*錯誤的十六進制整型常量表示*/
    C語言程序是根據前綴來區分進制的,因此用戶在書寫常數時不要把前綴弄錯,以免結果不正確。2. 整型變量根據在內存中所占存儲空間的不同,整型變量可分為基本整型、短整型、長整型和無符號型。其中,無符號整型變量隻能存放不帶符號的正整數,不能存放負數。無符號整型變量又可分為無符號基本整型、無符號短整型和無符號長整型。各種整型變量的類型符號、所占存儲空間、取值範圍以及可表示的數據個數如表3.1所示(以VC 6.0為例)。
    表3.1整型變量分類情況表



    數據類型類型符號所占字
    節數
    (位數) 取值範圍可表示的數據個數

    基本整型int4(32)-2147483648~2147483647,
    即(-231) ~ (231-1)232=4294967296=1GB短整型short2(16)-32768~32767,
    即(-215)~ (215-1)216=65536長整型long [int]4(32)-2147483648~2147483647,
    即(-231) ~ (231-1)232=4294967296=1GB無符號
    基本整型unsigned[int]4(32)0~4294967295232=4294967296=1GB續表



    數據類型類型符號所占字
    節數
    (位數) 取值範圍可表示的數據個數

    無符號
    短整型unsigned short [int]2(16)0~65535216=65536無符號
    長整型unsigned long [int]4(32)0~4294967295232=4294967296=1GB




    在表3.1中,用中括號“[]”括起來的內容表示可以省略,即long int可簡寫為long,unsigned int可簡寫為unsigned,unsigned short int可簡寫為unsigned short,unsigned lont int可簡寫為unsigned long。整型變量的一般定義格式如下: 
    類型說明符變量名;
    其中,類型說明符用於說明整型變量的具體類型,後面跟變量名,如果同時定義多個變量,則多個變量名之間需要用“,”隔開。例3.2整型變量定義示例。
    int x, y, z;/*定義基本整型變量x、y、z*/
    short a;/*定義短整型變量a*/
    long b; /*定義長整型變量b*/
    unsigned c; /*定義無符號基本整型變量c*/
    unsigned short d; /*定義無符號短整型變量d*/
    unsigned long e; /*定義無符號長整型變量e*/
    例3.3整型變量的使用。程序如下: 
    #include
    int main(void)
    {
    int a,b,sum;/*定義基本整型變量a、b、sum*/
    unsigned c;/*定義無符號基本整型變量c*/
    a=3;/*分別給a、b、c賦值*/
    b=-4;
    c=5;
    sum=a b c;/*對a、b、c三值求和,並賦給變量sum*/
    printf("a、b、c之和為: \n%d\n",sum);/*輸出計算結果*/
    return 0;
    }
    程序運行結果如下: 


    在使用整型變量和整數變量時有以下幾點需要注意: (1) 整型常量後面可以加後綴,以表示常量的數據類型,如235L或2351,表示常量235為長整型數據; 345U或345u,表示345為無符號型數據。(2) 給一個整型變量賦的值不應超過該整型變量規定的取值範圍,否則會溢出。例如: 
    short x; /*定義一個短整型變量x*/
    x=66656; /*非法,數據溢出,短整型取值範圍為-32768~32767*/
    (3) 整型數據在內存中是以補碼形式表示的,一個正整數的補碼和它的原碼(即該數的二進制表達形式)相同。一個負整數的補碼是將該數的值的二進制形式按位取反再加1。在整型數據的中,左邊的一位(位)是符號位,“0”表示正、“1”表示負。例如: 
    (4) 無符號整型數據沒有符號位,它的的位也用於存儲數據。3.3.2實型數據在C語言中隻使用十進制的實型數據(實數),也叫浮點型數據。在C語言中浮點型數據有以下兩種表示形式。 小數形式: 如0.0、27.0、5.89、4.13、-5.2、300.、-267.8230等。在使用這種方式表示浮點型數據時可以沒有整數部分或小數部分,但必須有小數點,如1.25、1.0、.14、3.都是正確形式。 指數形式: 即利用科學記數法表示實數,如3.65e3表示3.65×103(即3650),-1.35e-2表示-1.35×10-2(即-0.0135)。在使用這種方式表示浮點型數據時e(或E)之前必須有數字,且e(或E)後面的指數必須為整數,不能寫成e3或1e.5等形式。整數在計算機中的存儲比較簡單,而浮點型數據在計算機中的存儲卻相對麻煩。在計算機中,浮點型數據都是以指數形式存儲在內存中的。以實數1.23456為例,其在內存中的存儲情況如下。



    .1234561符號位小數部分指數


    .123456×101即1.23456


    為方便讀者理解,這裡使用十進制數描述了浮點型數據在內存中的存儲情況,而在實際的計算機中小數部分是用二進制數表示的,指數部分是用2的冪次表示的。對浮點型數據的存儲而言,C語言的標準並未規定,小數部分應占多少位,指數部分應占多少位,不同編譯環境的規定可能不同。但在大多數的編譯環境中,小數部分(包括符號位)占24位,指數部分占8位。小數部分占的位數越多,實數的有效數字越多,精度越高。指數部分占的位數越多,實數的取值範圍就越大。1. 浮點型變量C語言中的浮點型變量可分為單精度(float型)、雙精度(double型)和長雙精度(long double型)。浮點型數據所占的字節數、有效數字和取值範圍在不同的編譯環境中可能不同。在多數編譯環境中,單精度浮點型數據占4個字節,有效數字為7位,取值範圍為-3.4×1038~3.4×1038; 雙精度浮點型數據占8個字節,有效數字為16位,取值範圍為-1.7×10308~1.7×10308; 長雙精度浮點型數據所占的字節數可能是8字節、10字節、12字節或16字節,有效數字從15到19位不等,取值範圍為-1.2×104932~1.2×104932。由於long double型數據很少應用,故不做詳述。例如: 
    float x;/*定義單精度浮點型變量x*/
    double y;/*定義雙精度浮點型變量y*/
    需要注意,因為浮點型變量是由有限的組成的,所以它能提供的有效數字是有限的。在計算時,有效位以外的數字將被舍去,這可能會產生一些計算上的誤差,即舍入誤差。2. 浮點型常量在C語言中,繫統一般將浮點型常量按雙精度浮點數處理。例3.4浮點型數據的舍入誤差示例。程序如下: 
    #include
    int main(void)
    {
    float x;/*定義單精度變量x*/
    double y;/*定義雙精度變量y*/
    x=1.234*3.23456;/*將兩個浮點型常量的乘積賦給x*/
    y=1.234*3.23456;/*將同樣的乘積賦給y*/
    printf("x=%f\ny=%.10f\n",x,y);/*分別輸出x和y*/
    return 0;
    }
    程序運行結果如下: 


    在上例中,繫統先把兩個浮點型常量123.456和2.3456當成雙精度浮點數相乘,乘積(3.99144704)也是一個雙精度浮點數,然後將乘積分別賦給變量x和y。由於單精度變量隻能接收7位有效數字,所以繫統從乘積中取7位有效數字(3.991447)賦給變量x,乘積的後兩位“04”被舍去,導致舍入誤差。而y是雙精度變量,可接收的有效數字為16位,所以y可以接收整個乘積(3.99144704)。需要注意,浮點型常量按雙精度浮點數處理雖然精度高,但運算速度較慢。為了提高運算速度,可以在浮點型常量後面加後綴f或F,此時繫統會將其當成單精度浮點數處理。例如: 
    x=1.234f*3.23456f;/*將兩個單精度浮點型常量的乘積賦給變量x*/
    3.3.3字符型數據1. 字符常量在C語言中,字符常量是指用單引號括起來的一個字符。凡是鍵盤可以正常輸入的字符均可作為字符常量,如'a' 'b' ' ' '=' '?' '0'等。如果沒有單引號",繫統會將其當成變量或其他有名字的對像。在C語言中字符常量有以下特點: (1) 字符常量隻能用單引號括起來,不能用雙引號或其他括號,例如'a'是字符常量,而"a"是一個字符串(後面會介紹)。(2) 字符常量隻能是單個字符,如'abc'是非法的。(3) 字符可以是字符集中的任意字符。(4) 數字被定義為字符型之後不宜參與算術運算,否則其運算結果和預期結果會截然不同,如'6'是字符常量,它如果參與算術運算('6' 6),其結果不是12而是60,因為'6'在進行加法運算時使用的值是它的ASCII碼值54,所以('6' 6)相當於54 6,詳見例3.5。(5) 大寫字母和小寫字母代表不同的字符常量,如'A'和'a'是不同的字符常量。(6) 單引號中的空格也是一個字符常量,但不能寫成''(中間沒有空格)的形式。(7) 字符常量在內存中占一個字節,存放的是字符的ASCII碼值。在C語言中,所有的字符型常量(變量)和整型常量(變量)是通用的,其ASCII碼值就是對應的整數值。例3.5字符型常量和整型常量示例。程序如下: 
    #include
    int main(void)
    {
    char x,y;/*定義兩個字符型變量x和y*/
    int z;/*定義int型變量z*/
    x='M';/*分別給x和y賦值*/
    y='m';
    z='6' 6;
    printf("x=%c,y=%c\n",x,y);/*以字符形式輸出x和y*/
    printf("x=%d,y=%d\n",x,y);/*以整數形式輸出x和y*/
    printf("z=%c\n",z);/*以字符形式輸出z*/
    printf("x=%d\n",z);/*以整數形式輸出z*/
    return 0;
    }
    程序運行結果如下: 


    在上例中,程序第6行和第7行分別給字符型變量x和y賦值為'M'和'm',因為字符型數據和整型數據是通用的,所以字符型數據也可以進行算術運算,參與運算的操作數為字符型數據的ASCII碼值。程序第8行將'6' 6的和賦給了變量z,在這個加法運算中,第1個操作數是字符'6'的ASCII碼值54,第2個操作數是整型常量6,兩者之和為60。程序第9行以字符形式輸出了變量x和y的值。程序第10行以整數形式輸出了變量x和y的值,其值為對應的字符型數據'M'和'm'的ASCII碼值。同一個字母(僅限26個英文字母)的小寫形式的ASCII碼值比大寫形式的ASCII碼值大32。程序第11行以字符形式輸出的變量z是字符'<',其ASCII碼值為60。程序第12行以整數形式輸出的是變量z的ASCII碼值60。2. 轉義字符除了上述普通的字符常量之外,C語言還允許使用轉義字符。轉義字符是一種特殊形式的字符常量,是以反斜線“\”開頭的字符序列,如\n、\t、\f等。轉義字符具有特定的含義,主要用來表示用一般字符不便於表示的控制代碼,如表3.2所示。
    表3.2C語言常用的轉義字符及其含義



    轉義字符含義ASCII碼值

    \n按回車鍵換行10\t水平制表(橫向跳到下一制表位置)9\v豎向制表(豎向跳到下一制表位置)9\b退格8\r按回車鍵13\f走紙換頁12\\代表一個反斜杠字符92\'代表一個單引號字符39\"代表一個雙引號字符34\0代表空字符(NULL)0\ddd1~3位八進制數代表的字符\xdd1~2位十六進制數代表的字符



    在使用轉義字符時需要注意以下幾點: (1) 轉義字符是常量,隻能用小寫字母表示,且每個轉義字符隻代表一個字符,如'\n' '\101'隻代表一個字符。(2) 反斜線後的八進制數可以不用0開頭,如'\101'。(3) 反斜線後的十六進制數隻可由小寫字母x開頭,不允許用大寫字母X,也不能用0x開頭,如'\x41'。(4) C語言中的任何一個字符均可用轉義字符來表示,表3.2中的\ddd和\xhh就是為此提出的。比如'\101'表示的是ASCII碼值為八進制數101的字符,因為八進制數101對應十進制數65,因此'\101'相當於ASCII碼值為65的字符'A',即'\101'與'A'等價。再如'\x41'表示的是ASCII碼值為十六進制數41的字符,因為十六進制數41對應的十進制數也是65,所以'\x41'也相當於ASCII碼值為65的字符'A',即'\x41'也與'A'等價。換而言之,'\101' '\x41' 'A'三者等價。(5) 部分轉義字符操作的屏幕顯示結果和打印機顯示結果不同,如\v和\f對屏幕無影響,而打印機則會執行相應操作。3. 字符串常量C語言允許使用字符串常量。字符串常量是由雙引號括起來的一串字符,如"Hello!" "My name is Henry!" "a" "3.15"等。在字符串常量的雙引號中允許插入任何轉義字符,如"I am \097 boy.\n" "\\abc"等。例3.6輸出字符串常量。程序如下: 
    #include
    int main(void)
    {
    printf("I am a boy!\n");/*字符串中包含轉義字符\n*/
    printf("I am \141 boy!\n");/*字符串中包含轉義字符\141和\n*/
    printf("I am \x61 boy!\n");/*字符串中包含轉義字符\x61和\n*/
    return 0;
    }
    程序運行結果如下: 


    上述程序包含三個字符串輸出語句。每個語句的內容都不同,但輸出結果相同,請讀者自行分析原因。C語言規定以字符'\0'作為字符串常量的結束標志,即繫統會在每個字符串的後自動加入一個字符'\0'作為字符串的結束標志。這裡以字符串"Welcome"為例,它在內存中的存儲情況如下。


    Welcome\0
    因此,字符常量和字符串常量是不同的,兩者主要存在以下不同: (1) 表達形式不同,字符常量用單引號括起來,而字符串常量用雙引號括起來,如'a'是字符常量,而"a"是字符串常量。(2) 存儲長度不同,字符常量固定占用一個字節的存儲空間,而字符串常量占用的字節數為字符串中的字符個數加1。如上例中,字符串常量"Welcome"有7個字符,但是它占用8個字節的存儲空間,因為後一個字節要用於存儲字符串結束標志"\0"。(3) 單純的一對雙引號" "也是一個字符串常量,稱為空串,它也要用一個字節的存儲空間存放字符串結束標志'\0'。(4) 可以把一個字符常量賦給一個字符變量,但不能把一個字符串常量賦給一個字符變量。在C語言中沒有字符串變量的概念,這和BASIC語言是不同的。C語言是用字符數組來存放字符串常量的,這部分內容將在第5章中詳細介紹。4. 字符變量字符變量用於存儲字符常量,能且僅能存放一個字符。字符變量的類型說明符是“char”,字符變量的定義格式和書寫規則與整型、浮點型變量相同。例如: 
    char x, y;/*定義字符變量x和y*/
    x='a';/*給字符變量x賦值*/
    y='A';/*給字符變量y賦值*/
    上述語句定義了字符變量x和y並進行了賦值。變量x和y能且僅能存放一個字符。變量x被賦予'a',其值為字符'a'的ASCII碼值; 變量y被賦予'A',其值為字符'A'的ASCII碼值。前面說過,在C語言中字符型數據和整型數據是通用的,字符變量可以進行任何整型變量允許的運算。在編程時可以給整型變量賦字符值,也可以給字符變量賦整型值(ASCII碼值)。在變量輸出時可以把字符變量當成整型數據輸出,輸出字符的ASCII碼值,也可以把整型值(ASCII碼值)當成字符數據輸出,輸出該ASCII碼值對應的字符,見下例。例3.7字符變量示例。程序如下: 
    #include
    int main(void)
    {
    char x,y,z;/*定義三個字符型變量x、y、z*/
    x='A';/*將字符常量A賦給變量x*/
    y=x 32;/*計算x 32的結果並將其賦給字符變量y*/
    z=65;/*將十進制數65賦給字符變量z*/
    printf("x=%c,y=%c,z=%c\n",x,y,z);/*以字符形式輸出x、y和z*/
    return 0;
    }
    程序運行結果如下: 


    請讀者結合前面的內容認真分析程序,思考程序的運行結果。3.3.4為變量賦初值在C語言中有時需要給一些變量賦初值,C語言允許在定義變量的同時為其賦初值。例如: 
    int x=5, y=6;/*定義基本整型變量x和y,並分別給它們賦初值5和6*/
    float m=3.0;/*定義單精度變量m,初值為3.0*/
    char ch1='A';/*定義字符變量ch1,初值為'A'*/
    C語言允許為定義的一部分變量賦初值。例如: 
    int x, y, z=3;/*定義基本整型變量x、y和z,但僅對z賦初值3*/
    如果想把一個數同時賦給多個變量,應寫成以下形式: 
    int x=1, y=1, z=1;/*將變量x、y、z的初值均賦為1*/
    注意,上述語句絕不能寫成以下形式: 
    int x=y=z=1;/*非法*/
    需要說明的是,給變量賦初值的操作不是在程序編譯階段完成的,而是在程序運行階段完成的,即在程序編譯時編譯器知道整型變量x的存在,但此時變量x沒有變量值。變量x的初值是在程序運行時賦予的。例如: 
    int x=1;
    其實相當於: 
    int x;
    x=1;
    3.4不同數據類型間的轉換3.4.1混合運算中的數據類型轉換C語言允許整型、單精度型、雙精度型和字符型數據進行混合運算。當不同類型的數據進行混合運算時,需要先按照一定的順序(如圖3.4所示)將不同類型的數據轉換成同一種類型的數據,然後再進行運算。具體的數據轉換工作由編譯器自動完成,轉化規則如下: 

    圖3.4不同數據類型混合運算時的
    轉換順序

    (1) 混合運算時首先進行水平方向的轉換,這種水平方向的轉換是必須進行的,如圖3.4所示,char和int處於同一水平。如果兩個char(short)變量想進行運算,必須先轉換成int型的變量,然後再運算。同理,float型數據的運算也要先轉換成double型數據再運算。(2) 在進行水平方向的轉換後,若仍存在不同類型數據,則按照垂直方向由低到高繼續轉換,直至所有數據類型一致。例如,int型數據和double型數據進行運算,需要先把int型數據按從低到高的方向轉換成double型數據,然後再運算。int型數據和float型數據進行運算,均需轉換成double型數據纔能運算。例3.8C語言混合計算示例。程序如下: 
    #include
    int main(void)
    {
    int a=1;
    float b=2.0;
    double c=3.0,y;
    long d=6;
    y=1 'm' a*b-d/c;
    printf("%f\n",y);
    return 0;
    }
    程序運行結果如下: 


    上例在求y值時,編譯器對表達式“1 'm' a*b-d/c”的執行是從左到右的,具體運算過程如下: (1) 先計算1 'm','m'轉換成整數109,求得兩者之和為110。(2) 因為“*”比“ ”的優先級高,所以先計算a*b,因為a為int型、b為float型,所以a和b都要轉換成double型,兩者之積也為double型。(3) 將110與a*b的積相加,計算“110 a*b”,其結果為double型。(4) 因為c為double型,所以要將變量d轉換成double型之後再計算d/c,其結果也是double型。(5) 將“110 a*b”與“d/c”相減,計算結果為double型。需要注意的是,上述運算過程中的轉換都是繫統自動完成的。3.4.2賦值運算中的數據類型轉換C語言規定,在賦值運算中若賦值運算符“=”兩邊的數據類型不一致,且都是數值型或字符型,將進行數據類型轉換,此時會將賦值運算符右邊的數據類型轉換成左邊的數據類型。具體規則如下: (1) 浮點型數據賦予整型變量,浮點型數據的小數部分將被舍去,而不是四舍五入。例如,x為整型變量,執行x=3.98的賦值運算,賦值結果為x=3,浮點數3.98的小數部分被舍去(注意不是四舍五入)。(2) 整型數據賦予浮點型數據,數值不變,但將以浮點數的形式存放,即增加小數部分,且小數部分的值為0。例如,x為float型變量(7位有效數字),將整數10賦給x,則先轉換成10.00000,然後再賦給變量x,x=10.00000。(3) float型數據賦給double型變量,數值不變,但有效位由7位擴至16位,占據的存儲空間也由4字節擴至8字節。(4) double型數據賦給float型變量時會產生舍入誤差,繫統取double型數據的前7位有效數字存入float型變量(前提是取值範圍不能溢出),其餘數字舍去。例如: 
    float x=1e20;/*正確*/
    floaty=1e100;/*非法,數據溢出*/
    (5) 在將char型數據賦予int型變量時,將char型數據的ASCII碼值以二進制的形式放入int型變量的低8位中,左側高位均為0。(6) 在將int、short、long型數據賦給char型變量時,隻將數據的低8位作為ASCII碼值存入char型變量,剩餘高位的內容都舍去。(7) 在將short型數據賦給int、long型變量時(以VC 6.0為例)需進行符號擴展。先將short的16位二進制數送入int、long型變量的低16位,然後進行符號擴展,若short型數據為正,則int、long型變量的高位補0,否則補1。(8) 在將unsigned short型數據賦給int、long型變量時不存在符號擴展問題,隻需將高位補0即可。(9) 在將非unsigned型數據賦給長度相同的unsigned型變量時也是原樣賦值,即符號位也作為數值一起傳送。以上轉換規則看起來有些煩瑣,其實總結起來就是一點,即賦值時的類型轉換其實就是按中的存儲形式直接傳送。3.4.3強制轉換前面兩種數據轉換是由編譯器自動完成的。除此之外,C語言還允許對數據進行強制轉換。強制轉換的作用是利用強制轉換運算符“( )”把一個表達式強制轉換成需要的數據類型,一般格式如下: 
    (類型說明符)  (表達式)
    例如: 
    (float) a/*把變量a強制轉換為float型*/
    (int) (x y)/*把x y的結果強制轉換為整型*/ 
    在使用強制轉換時應注意以下兩點: (1) 類型說明符和表達式都必須加括號,單個變量可以不加括號。若把(int)(x y)寫成(int)x y,則相當於把x轉換成int型後再與y相加。(2) 強制轉換隻是為了運算需要對數據進行的臨時性轉換。在強制轉換後,程序會得到一個所需數據類型的臨時變量,而原有變量的數據類型並未改變。例3.9強制轉換示例。程序如下: 
    int main(void)
    {
    float x=3.14;
    printf("(int)x=%d\n",(int)x);  /*float型變量x被強制轉換後得到一個int型臨時變量*/
    printf("x=%f\n",x);  /*被強制轉換的float型變量x本身並未改變*/
    return 0;
    }
    程序運行結果如下: 


    由上例可知,float型變量x在程序的第4行中被強制轉換,得到一個臨時的int型數據並輸出,而x原有的數據類型並未改變,仍為float型,如程序運行結果的第2行所示。3.5運算符和表達式除控制語句和輸入輸出以外,C語言幾乎把所有的基本操作都作為運算符處理。因此,C語言具有極為強大的運算功能,運算符種類很多,如算術運算符、關繫運算符、邏輯運算符、位運算符、賦值運算符、條件運算符、逗號運算符、指針運算符、求字節數運算符、強制類型轉換運算符、分量運算符、下標運算符等。各種運算符的數量及作用分別如下。(1) 7種算術運算符: 用於各類數值運算,包括加“ ”、減“-”、乘“*”、除“/”、求餘“%”、自增“ ”、自減“--”。(2) 6種關繫運算符: 用於比較運算,包括大於“>”、小於“<”、等於“==”、大於等於“>=”、小於等於“<=”和不等於“!=”。(3) 3種邏輯運算符: 用於邏輯運算,包括與“&&”、或“‖”、非“!”。(4) 6種位運算符: 對參與運算的數據按二進制位進行運算,包括按位與“&”、按位或“|”、按位取反“~”、按位異或“^”、左移“<<”、右移“>>”。(5) 11種賦值運算符: 用於賦值運算,包括簡單賦值運算符“=”,復合算術賦值運算符“ =” “-=”“*=” “/=”“%=”,復合位運算賦值符“&=” “|=” “^=” “>>=” “<<=”。(6) 條件運算符“?:”: C語言中的三目運算符,用於條件求值。(7) 逗號運算符“,”: 用於把兩個表達式連在一起構成一個表達式。(8) 指針運算符: 包括取內容運算符“*”和取地址運算符“&”。(9) 求字節數運算符“sizeof”: 用於計算數據類型所占的字節數。(10) 強制類型轉換運算符“()”: 用於將表達式的值強制轉換成需要的數據類型。(11) 分量運算符“.->”: 用於結構指針指向成員名的操作,也叫指向結構體成員運算符。(12) 下標運算符“[]”: 用於引素。(13) 其他: 如函數調用運算符&ldquo
     
    網友評論  我們期待著您對此商品發表評論
     
    相關商品
    在線留言 商品價格為新臺幣
    關於我們 送貨時間 安全付款 會員登入 加入會員 我的帳戶 網站聯盟
    DVD 連續劇 Copyright © 2024, Digital 了得網 Co., Ltd.
    返回頂部