A. C語言編譯器為何對相同的數進行不同格式輸出,三個數結果不同
作死了唄。
printf 的格式控制符 %d 只能輸出 int 類型的數,但是對應的參數 factor(5) 不是 int 類型的而是 double 類型的,所以 printf 就不知道怎麼輸出了,因此後面輸出的都是垃圾值……
B. 請問C語言如何實現數據類型的強制轉化
強制類型轉換
當操作數的類型不同,而且不屬於基本數據類型時,經常需要強制類型轉換,將操作數轉化為所需要的類型。強制類型轉換具有兩種形式,稱為顯式強制轉換和隱式強制類型轉換。
1、顯式強制類型轉換
顯式強制類型轉換需要使用強制類型轉換運算符,格式如下:
type(<expression>)
或
(type)<expression>
其中,type為類型描述符,如int,float等。<expression>為表達式。經強制類型轉換運算符運算後,返回一個具有type類型的數值,這種強制類型轉換操作並不改變操作數本身,運算後操作數本身未改變,例如:
int nVar=0xab65;
char cChar=char (nVar);
上述強制類型轉換的結果是將整型值0xab65的高端兩個位元組刪掉,將低端兩個位元組的內容作為char型數值賦值給變數cChar,而經過類型轉換後nVar的值並未改變。
2、隱式強制類型轉換
隱式類型轉換發生在賦值表達式和有返回值的函數調用表達式中。在賦值表達式中,如果賦值符左右兩側的操作數類型不同,則將賦值符右邊操作數強制轉換為賦值符左側的類型數值後,賦值給賦值符左側的變數。在函數調用時,如果return後面表達式的類型與函數返回值類型不同,則在返回值時將return後面表達式的數值強制轉換為函數返回值類型後,再將值返回,如:
int nVar;
double dVar=3.88;
nVar=dVar;//執行本句後,nVar的值為3,而dVar的值仍是3.88
1,若已知x,y為double類型,則表達式:x=1,y=x+3/2結果是多少啊?
因為x,y都是double型,所以執行了y=x+3/2這個語句後,會輸出小樹部分,double型默認的是小數點後幾位我忘了,你自己調試下,就會明白了!
C. C語言文件的編譯與執行的四個階段並分別描述
開發C程序有四個步驟:編輯、編譯、連接和運行。
任何一個體系結構處理器上都可以使用C語言程序,只要該體系結構處理器有相應的C語言編譯器和庫,那麼C源代碼就可以編譯並連接到目標二進制文件上運行。
1、預處理:導入源程序並保存(C文件)。
2、編譯:將源程序轉換為目標文件(Obj文件)。
3、鏈接:將目標文件生成為可執行文件(EXE文件)。
4、運行:執行,獲取運行結果的EXE文件。
(3)c語言編譯器對類型的處理擴展閱讀:
將C語言代碼分為程序的幾個階段:
1、首先,源代碼文件測試。以及相關的頭文件,比如stdio。H、由預處理器CPP預處理為.I文件。預編譯的。文件不包含任何宏定義,因為所有宏都已展開,並且包含的文件已插入。我歸檔。
2、編譯過程是對預處理文件進行詞法分析、語法分析、語義分析和優化,生成相應的匯編代碼文件。這個過程往往是整個程序的核心部分,也是最復雜的部分之一。
3、匯編程序不直接輸出可執行文件,而是輸出目標文件。匯編程序可以調用LD來生成可以運行的可執行程序。也就是說,您需要鏈接大量的文件才能獲得「a.out」,即最終的可執行文件。
4、在鏈接過程中,需要重新調整其他目標文件中定義的函數調用指令,而其他目標文件中定義的變數也存在同樣的問題。
D. 在16位操作系統下的C語言編譯器中,錯誤的int類型變數賦值是
正確的int范圍是-32768~32767
原因是:題中16位操作系統,int類型數據佔16位。2^16=65536。int帶符號,故答案是-32768~32767
E. C語言中char類型的數據輸入和輸出時怎麼控制啊
1、首先打開Microsoft Visual C++軟體,單擊「文件」菜單->「新建」,新建一個文件,文件名後綴為.c。
F. c語言 如果要定義函數的返回類型為布爾類型,怎麼定義
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
G. 在 c語言中int long unsigned 和 char這四種類型數據的轉換規律是什麼
首先,在C中,數據之間的運算必須是同類型的才能進行運算。如果類型不一致,就必須先轉換成相同的類型----------由低級別 → 高級別轉換。
本題中,數據類型級別由低到高分別為:char→int→unsigned→long。轉換時由低級別向高級別轉換。
比如,有兩個數的數據類型分別為:char型跟long型。 就要先char轉換為long型(因為long級別比char高),再進行運算。
但是不能理解為:先將char轉換成int,再轉換成unsigned,再轉換成long。
H. (C語言)unsigned long類型變數輸出時,格式轉換說明符應如何定義
需要准備的材料分別有:電腦、C語言編譯器。
1、首先,打開C語言編譯器,新建一個初始.cpp文件,例如:test.cpp。
I. C語言編譯器原理小知識
1、char *p="asdf"; 則sizeof(p)=2; 是返回指針p佔用位元組數;即使你是先定義再賦值,char *p; p="asdfasdf"; sizeof(p)都是等於2;任何指針在turbo c中都是2個位元組,不是說「字元串中有'0\'佔一個位元組,字元類型指針佔一個位元組」。。樓上有的說sizeof(p)是求變數p或字元串長度,是錯的,是求佔用位元組數,不是長度,長度是用函數strlen(p); sizeof不是函數,是一種運算符。。例子:char p[]="abc";則sizeof(p)=4;strlen(p)=3; 比較於char p[10]="abc"; sizeof(p)=10; strlen(p)=3。。。 但如果定義成:char p[]="asdf"; 則sizeof(p);就等於5了,數組名p雖然可以看做指針,但不完全跟指針一樣,這就是例子了。。 2、編譯器可以看作一個虛擬機器,可以有自己虛擬的內存,棧等。。編譯系統就可以看作是物理電腦操作系統上虛擬機的運行系統。。所以不一定是物理地址,但跟物理地址有映射關系,至於為什麼,怎麼映射,我也不知道。。。 3、編譯器是16位。。跟「loat 為4個位元組 double 32個字元」??。。跟float 4位元組32位沒關系,那是編譯器設定的,就是常說電腦是16位或32位操作系統一樣,編譯器16位就看作虛擬機器是16位運行系統。。 4、 我也不知道為什麼, (*p)(int,int);是int (*p)(int,int);吧。。。
J. 編譯原理
編譯原理是計算機專業的一門重要專業課,旨在介紹編譯程序構造的一般原理和基本方法。內容包括語言和文法、詞法分析、語法分析、語法制導翻譯、中間代碼生成、存儲管理、代碼優化和目標代碼生成。 編譯原理是計算機專業設置的一門重要的專業課程。編譯原理課程是計算機相關專業學生的必修課程和高等學校培養計算機專業人才的基礎及核心課程,同時也是計算機專業課程中最難及最挑戰學習能力的課程之一。編譯原理課程內容主要是原理性質,高度抽象[1]。
中文名
編譯原理[1]
外文名
Compilers: Principles, Techniques, and Tools[1]
領域
計算機專業的一門重要專業課[1]
快速
導航
編譯器
編譯原理課程
編譯技術的發展
編譯的基本流程
編譯過程概述
基本概念
編譯原理即是對高級程序語言進行翻譯的一門科學技術, 我們都知道計算機程序由程序語言編寫而成, 在早期計算機程序語言發展較為緩慢, 因為計算機存儲的數據和執行的程序都是由0、1代碼組合而成的, 那麼在早期程序員編寫計算機程序時必須十分了解計算機的底層指令代碼通過將這些微程序指令組合排列從而完成一個特定功能的程序, 這就對程序員的要求非常高了。人們一直在研究如何如何高效的開發計算機程序, 使編程的門檻降低。[2]
編譯器
C語言編譯器是一種現代化的設備, 其需要藉助計算機編譯程序, C語言編譯器的設計是一項專業性比較強的工作, 設計人員需要考慮計算機程序繁瑣的設計流程, 還要考慮計算機用戶的需求。計算機的種類在不斷增加, 所以, 在對C語言編譯器進行設計時, 一定要增加其適用性。C語言具有較強的處理能力, 其屬於結構化語言, 而且在計算機系統維護中應用比較多, C語言具有高效率的優點, 在其不同類型的計算機中應用比較多。[3]
C語言編譯器前端設計
編譯過程一般是在計算機系統中實現的, 是將源代碼轉化為計算機通用語言的過程。編譯器中包含入口點的地址、名稱以及機器代碼。編譯器是計算機程序中應用比較多的工具, 在對編譯器進行前端設計時, 一定要充分考慮影響因素, 還要對詞法、語法、語義進行分析。[3]
1 詞法分析[3]
詞法分析是編譯器前端設計的基礎階段, 在這一階段, 編譯器會根據設定的語法規則, 對源程序進行標記, 在標記的過程中, 每一處記號都代表著一類單詞, 在做記號的過程中, 主要有標識符、關鍵字、特殊符號等類型, 編譯器中包含詞法分析器、輸入源程序、輸出識別記號符, 利用這些功能可以將字型大小轉化為熟悉的單詞。[3]
2 語法分析[3]
語法分析是指利用設定的語法規則, 對記號中的結構進行標識, 這包括句子、短語等方式, 在標識的過程中, 可以形成特殊的結構語法樹。語法分析對編譯器功能的發揮有著重要影響, 在設計的過程中, 一定要保證標識的准確性。[3]
3 語義分析[3]
語義分析也需要藉助語法規則, 在對語法單元的靜態語義進行檢查時, 要保證語法規則設定的准確性。在對詞法或者語法進行轉化時, 一定要保證語法結構設置的合法性。在對語法、詞法進行檢查時, 語法結構設定不合理, 則會出現編譯錯誤的問題。前端設計對精確性要求比較好, 設計人員能夠要做好校對工作, 這會影響到編譯的准確性, 如果前端設計存在失誤, 則會影響C語言編譯的效果。[3]