❶ C語言是什麼
C語言是國際上廣泛流行的,很有發展前途的計算機高級語言.它適合作為系統描述語言,即可用來編寫系統軟體,也可用來編寫應用軟體.
早期的操作系統等系統軟體主要是用匯編語言編寫的(包括 UNIX操作系統在內).由於匯編語言依賴於計算機硬體,程序的可讀性和可移植性都比較差.為了提高可讀性和可移植性,最好改用高級語言,但一般的高級語言難以實現匯編語言的某些功能(匯編語言可以直接對硬體進行操作),例如:對內存地址的操作,位操作等).人們設想能否找到一種既具有一般高級語言特性, 又具有低級語言特性的語言,集它們的優點於一身.於是,C語言就在這種情況下應運而生了.
C語言是在B語言的基礎上發展起來的,它的根源可以追溯到ALGOL 60. 1960年出現的ALGOL 60是一種面向問題的高級語言,它離硬體比較遠,不宜用來編寫系統程序.1963年英國的劍橋大學推出了CPL(CombinedProgram- ming Language)語言.CPL語言在ALGOL 60的基礎上接近了硬體一些,但規模比較大,難以實現.1967年英國劍橋大學的Matin Richards對 CPL語言作了簡化,推出了BCPL(Basic Combined Programming Language)語言.1970年美國貝爾實驗室的 Ken Thompson以 BCPL語言為基礎,又作了進一步簡化,設計出了很簡單的而且很接近硬體的 B語言( 取 BCPL的第一個字母),並用 B語言寫第一個UNIX操作系統,在PDP-7上實現. 1971年在PDP-11/20上實現了B語言,並寫了UNIX操作系統.但B語言過於簡單,功能有限.1972年至 1973年間,貝爾實驗室的 D.M.Ritchie在B語言的基礎上設計出了C語言(取 BCPL的第二個字母).C語言既保持了BCPL和B語言的優點(精練,接近硬體),又克服了它們的缺點(過於簡單,數據無類型等). 最初的C語言只是為描述和實現UNIX操作系統提供一種工作語言而設計的.1973年,K.Thom- pson和D.M.ritchie兩人合作把UNIX的90%以上用 C改寫(UNIX第5版.原來的 UNIX操作系統是1969年由美國的貝爾實驗室的 K.Thompson和D.M.Ritchie開發成功的,是用匯編語言寫的).
後來,C語言多次作了改進,但主要還是在貝爾實驗室內部使用.直到1- 975年UNIX第6版公布後 ,C語言的突出優點才引起人們普遍注意.1977年出現了不依賴於具體機器的C語言編譯文本《可移植C語言編譯程序》,使C移植到其它機器時所做的工作大大簡化了,這也推動了UNIX操作系統迅速地在各種機器上實現.例如,VAX,AT&T等計算機系統都相繼開發了UNIX.隨著 UNIX的日益廣泛使用,C語言也迅速得到推廣.C語言和UNIX可以說是一對孿生兄弟,在發展過程中相輔相成.1978年以後,C語言已先後移植到大, 中,小,微型機上,已獨立於UNIX和PDP了.現在C語言已風靡全世界,成為世界上應用最廣泛的幾種計算機語言之一.
以1978年發表的UNIX第7版中的C編譯程序為基礎,Brian W.Kernighan和 Dennis M.Ritchie(合稱K&R)合著了影響深遠了名著《The C Programming Lan- guage》,這本書中介紹的C語言成為後來廣泛使用的C語言版本的基礎,它被稱為標准C.1983年,美國國家標准化協會(ANSI)根據C語言問世以來各種版本對C的發展和擴充 ,制定了新的標准,稱為ANSI C.ANSI C比原來的標准C有了很大的發展.K&R在1988年修改了他們的經典著作《The C Progra- mming Language》 ,按照ANSI C的標准重新寫了該書.1987年,ANSI C又公布了新標准--87 ANSI C .目前流行的C編譯系統都是以它為基礎的.
❷ C語言中賦值語句有哪些規則
最重要的一條,從右向左執行,就好了
❸ C語言的問題,請講解詳細過程
分析如下
第一次循環
y=1時
y=((x=3*y,x+1),x-1);
這句進行語法
首先要明確 賦值符號「=」的優先順序高於 逗號表達式運算符否 「,」
逗號表達式 取最右邊的表達式的值
(x=3*y),x+1 這個表達式 先計算x=3*1=3 , 整個逗號表達式值為最右邊的x+1的值 即4(注意此時x的值為3)
y=(4,x-1); 這個表達式右邊 ()里的是逗號表達式 值為x-1 即為2
所以 y = 2
第二次循環(實際上x+1是個干擾項,由於逗號表達式的得點 x+1 實際不起作用,y=((x=3*y,x+1),x-1);可簡化為 y=((x=3*y),x-1)
y=2
類似同上分析
x=3*2= 6
y=(7,x-1)
y=5
第三次循環 就直接用簡化後的 分析好了
y=5
x=3*5=15
y=14 不滿足y<10循環結束
輸出 x為15 y為14
以上分析 用c-free 運行實測OK
❹ C語言中上下左右鍵賦值到char和int類型中的值不相同
這個問題,因為不知道你具體的使用環境,沒法作出進一步的判斷,只能將 unsigned char型的變數賦給一個int型的變數會發生什麼事情告訴你。
unsigned char a = 'A';
int b = -1666666;
b = a;
由於unsigned char類型的變數只有一個位元組,而int類型有4個位元組,當將一個unsigned char類型的變數賦給一個int型的變數後,會使int型變數的高三個位元組全部清零。在上述實例中就是b的高三個位元組全部變為0。也就是說b永遠為正整數了。細節就是這樣了,至於會不會產生副作用,視你的使用環境而定了。
❺ C語言里,*(&a)==a,&(*p)==p的區別
a和p是變數,&a和*p是表達式,1和0x1000是常量
a和*p表示的都是整形左值,p和&a表示的都是指針型左值,1和0x1000表示整形和指針型右值。(左右值的概念不清的話,google一下)
在內存中,a和p有存儲空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在寄存器中存放的,1和0x1000也有空間,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指針變數,*是解引用操作符,*p是一個表達式,含義是「對指針變數p進行解引用操作」,這與表達式&a的含義「取整形變數a的地址」是正好是相反的操作。
❻ C語言關於取值和取址
1、首先打開Visual C++,點擊左上角「文件」菜單按鈕,並點擊「新建」按鈕。在彈出的窗口中首先選擇「文件」選項卡,在左側列表中選取「C++ Source File」項。
❼ C語言左右值是干什麼呢
其實很簡單,它就是同優先順序操作符在語句中的「運算優先順序(或叫順序)」。比如12/3*4,/和*是同優先順序操作符,先算12/3呢還是先算3*4呢?由於/和*都是左→右結合的,所以12/3*4就被解釋為(12/3)*4,而不會被解釋為12/(3*4)。再比如當p是指針時的*p++,由於*和++同級別,它們又是右→左結合的,所以被解釋為*(p++)而不會被解釋為(*p)++。從以上可知,對於不同優先順序的操作符,結合性就起不到什麼作用了。個人理解,僅供參考。
❽ C語言賦值號左右值
不矛盾。a[0]表示的就是a數組首元素的地址。
❾ 求講解C語言左右對齊的輸出格式,並講解先從左輸出還是右輸出
printf("%-7d", 10000); //左對齊且佔用7個位置
printf("%7d, 10000); //右對齊且佔用7個位置
其他的依次類推
❿ C語言中,p=&a 那麼*p與a的區別是什麼
a和p是變數,&a和*p是表達式,1和0x1000是常量
a和*p表示的都是整形左值,p和&a表示的都是指針型左值,1和0x1000表示整形和指針型右值。(左右值的概念不清的話,google一下)
在內存中,a和p有存儲空間空間,a存放著1,p存放著0x1000,*p和&a沒有空間,他們的運算結果是在寄存器中存放的,1和0x1000也有空間,在程序的常量段存放。
*p按照Stanley Lippman的著作《C++ Primer》中的描述,p是指針變數,*是解引用操作符,*p是一個表達式,含義是逗對指針變數p進行解引用操作地,這與表達式&a的含義逗取整形變數a的地址地是正好是相反的操作。