1. c語言中輸出printf(「%%%%」)
輸出8個字元寬度的空間, 就相當於你在編程的時候按一下「Table」鍵,使游標以8個字元為基準進行跳躍,跳到下一個TAB位置。
它們在雙引號或定界符表示的字元串中有效,在單引號表示的字元串中無效。 表示鍵盤上的「TAB」鍵。
,是一種計算機語言,意思是讓所有的數據都緊跟在製表符後面。換碼符' ',表示水平製表位(horizontal tab),它的作用是將游標移到最接近8的倍數的位置,使得後面的輸入從此開始。換句話說,讓所有的數據都緊跟在製表符後面輸出。
(1)c語言定界符號成對出現擴展閱讀:
轉義字元作用
1、使用轉義字元來表示字元集中定義的字元,比如ASCll裡面的控制字元及回車換行等字元,這些字元都沒有現成的文字代號。所以只能用轉義字元來表示 。
2、某一些特定的字元在編輯語言中被定義為特殊用途的字元。這些字元由於被定義為特殊用途,它們失去了原有的意義。比如說Html中,<被HTML定義為標簽的開始,所以當我們轉入<時,HTML就會把它當作為開始,而不是當作一個<來看待。
網路-
2. c語言中成對的括弧該怎麼打
這是習慣問題
一般是先成對的輸入匹配的括弧,然後再輸入正文
其實這是一個良好的習慣,避免由於括弧不匹配造成的錯誤,值得一提的是,雖然這些錯誤一般是顯式的,但是這么做話,可以幫助coder理清代碼的層次,邏輯
另外,所謂的輸入速度根本不是問題,對於coder來說,打字就是本能;另外一些編輯器會自動的進行括弧匹配,也就是說只要打前括弧,就會出現後括弧,並且將游標退回正文區域的
3. C語言的注釋定界符是什麼
最早期的C語言注釋的起始是/*
結束是*/
後來又增加的行注釋, 為//
4. c語言必看常見符號分類,集合貼
C語言常見符號分類,看完你就懂了......
1、關鍵字
關鍵字,又稱為保留字,他們是C語言中預先規定的具有固定含義的一些單詞,例如C語言的第一個程序中的int和return等,用戶只能按預先規定的含義來使用他們,不能擅自改變其含義。
2、標識符
標識符分為系統預定義標識符和用戶自定義標識符兩類。顧名思義,系統預定義標識符就是由系統預先定義好的,例如主函數main和輸出函數printf等等。與關鍵字不同的是,系統預定義標識符是可以由用戶重新定義的,但是這樣會於原來的定義產生沖突,原來的含義會被替換,所以不建議這樣用!
用戶自定義標識符是由用戶根據需要自行定義的標識符,通常用做變數名,函數名等,標識符的命名有一定的規則。
3、運算符
首先先說明一下,運算符一共有44個,這里沒有一一列舉。然後,因為運算符的用法廣泛,種類繁雜,所以這里只是列舉分類,真正的用途想要講清楚可能要很久所以,先了解有哪些即可,記不住也沒關系的,不用緊張的哈!
(1)算氏拆數運算符:+加 、-減、 *乘、 /除、殲沒棗%取余。
(2)關系運算符:>大於、>=大於等於、==等於、<小於、<=小於等於、!=不等於。
(3)邏輯運算符: ! 邏輯非、&&邏輯與、|邏輯或。
(4)賦值運算符: = 將等號右邊的數據賦值給察顫等號左邊。
(5)增一和減一運算符: ++增一、--減一。
4、分隔符
寫文章為了不產生歧義,我們會在適當的位置增加標點符號,用來區分。而寫C語言程序,就會用分隔符來區分。
例如: 小明校長找你。和小明,校長找你。和小明校長找你。int a=1;inta=1;前一句就是對的,int a=1;就是命名一個整形的變數a等於1。而inta=1;錯誤的,因為inta如果是一個變數名的話,那它就沒有數據類型了int a,b,c; 逗號也是分隔符的一種,表示命名三個變數,分別是a,b,C。
5、其他符號
括弧[] - 括弧的打開和關閉用於數組元素引用,表示單維和多維下標。括弧() - 這些特殊符號用於函數調用和函數參數。大括弧{} - 花括弧的打開和關閉表示包含多個可執行語句的代碼塊的開始和結束。
分號(;)- 它被稱為語句終止符,指示一個邏輯實體的結束。這就是每個單獨的語句必須以分號結尾的原因。預處理器符號(#)- 編譯器使用稱為宏處理器的預處理器在實際編譯開始之前轉換您的程序。定界符」/*"和」*」- 程序注釋所用的符號。
6、編譯、鏈接
編譯分為四個階段:
(1)預編譯:也稱預處理,C程序中的預處理命令都在這個階段完成,預編譯完成的是對源程序的「替換」工作。"#就是預處理符號。
(2)編譯階段:對預編譯的C程序進行詞法和語法分析將錯誤呈現出來,處理完成後,編譯器會將C程序轉為匯編語言或其他中間代碼。
(3)優化階段:對程序代碼進行優化,調整縮進等等。
(4)匯編階段:把中間代碼翻譯成機器代碼,也就是二進制代碼,保存在目標文件中。
鏈接:經過編譯後的目標文件的機器碼之間是相互獨立的,因此,需要鏈接器將它們鏈接組合在一起,並解析它們之間的交叉引用。
5. 求助,關於c語言的。
C語言基礎(01-引言及預備知識): C語言是一門功能強大的編程語言,它也是C++語言的基礎。C語言屬於中級語言。這里所說的中級是相對於計算機的底層硬體而言的。匯編語言是最低級的語言,它可以直接與硬體打交道。高級語言有Pascal、Basic、Fortran等等。高級語言的一條語句對應低級語言的很多條語句,任何高級語言編寫的程序都要經過編譯程序的編譯、連接才能成為可以運行的程序。編譯連接的過程也就是把高級語言翻譯成機器語言(二進制機器碼)的過程,而匯編語言是基本上與機器語言一 一對應的一種語言。這個翻譯過程是由編譯程序自動完成的。把C語言定為中級語言是有它的道理的,因為C語言既有匯編語言的存取底層硬體的能力,又具有高級語言的許多特點。熟練掌握了C語言,學習其它的各種編程語言應該是很輕松的了。
C語言的書寫格式:
1) 一個C語言編寫的源程序,必定有一個主程序(稱為main()函數,在C語言中子程序稱為「函數」(當然,不要理解成為數學裡面的「函數」)。但是決不能有一個以上的main函數(即只能有一個)。
2) 函數語句塊用『{』括弧開始, 以『}』反括弧結束。這樣的花括弧必須成對出現。
3) 表達式寫在小括弧裡面,以『(』括弧開始,以『)』反括弧結束。
4) 函數不能嵌套,即函數裡面不能再套函數。(每一個函數是完成一個特定功能的函數模塊)
C語言的組成:
C語言是由許多函數組成的。其中只有一個主函數(main()函數)。C程序執行時總是從main函數的『{』處開始,至main函數的反大括弧'}'處結束。當然還有其它一些規則,這將在以後的學習中去熟悉它。
C語言的書寫規則:
C語言在書寫時有它自身的特點:書寫格式比較自由,在一行里可以寫多條語句,一個語句也可以分寫在多行上。雖然如此,在書寫源程序時還是要注意哪些可以自由書寫,而哪些必須要按照書寫規則來書寫。
幾條規則寫在下面:
1) 一行內可以寫幾個語句,建議一行不超過兩條語句;
2) 一條語句可以寫在多行上;
3) C語句不需要寫行標號;
4) 每條語句及數據定義的後面要寫上分號以表示該語句結束;
5) C語言中注釋用 /* */來表示;
6) 建議書寫時採用縮進格式;
7) 花括弧、小括弧都是成對出現的。
一個最簡單的C程序的編寫:
/* 程序代碼*/ /* 注釋部分*/
main() /*main是主函數名。緊跟在main後面的括弧是放參數的。
括弧裡面為空說明main函數不需要參數*/
{ /*正寫的大花括弧表示main函數從這里開始*/
} /*反寫的大花括弧表示main函數到這里結束*/
說明:由於是一個演示程序,在函數體內並沒有任何可以執行的語句,也就是這個程序什麼事也不做。
這個程序就是這么簡單: 寫在一行上就是 main() { }
你在TC的編輯環境下把這段代碼輸入進去,按F9鍵編譯連接,按CTRL_F5運行,一定很正常。但是什麼結果也不會有,因為在main函數裡面什麼代碼也沒有。
下面再舉一個可以向屏幕上輸出一條信息的例子:
main()
{
printf("這就是C語言編寫的程序!"); /*這一條語句的作用是向屏幕輸出一條信息
」這就是C語言編寫的程序!"*/
}
在這個程序中,main函數只有一條語句:printf("這就是C語言編寫的程序!");這個語句的作用是向屏幕輸出一個字元串。有關這個語句的知識以後再講。現在要注意的是一個C語言程序的框架是怎樣組成的。
C語言程序的幾種文件格式:
1、 源程序---在TC集成環境中輸入的程序文本稱為源程序。源程序是一種文本文件。它是我們看得見並認識的一種文件。其擴展名為.C。例如你把文件保存為TEST,那麼在磁碟上應看得到TEST.C這個文件。這樣的文件可以用記事本打開。
2、二進制文件---寫完了源程序後接著要做的是編譯這個文件。在TC集成環境里是按ALT_F9鍵,編譯後生成了一個二進制文件,這個二進制文件名為TEST.OBJ,也就是擴展名為OBJ的目標文件。
3、運行文件---最後一步是make(或Link),在TC集成環境里是按F9鍵Make之後生成了一個可以在DOS下運行的文件,其擴展名為EXE。如TEST.EXE。這個EXE文件是由第2步中的OBJ文件生成的。OBJ文件雖然是二進制文件,而電腦又是可以運行二進制文件的,為什麼還要把OBJ文件Link為EXE文件才能運行?這里的知識就比較多了,這里不能多講。但是要明白一點,在DOS下僅僅有了一個二進制文件還不能運行,因為操作系統要把這些二進制文件加以規劃,把相應的數據、程序代碼放到應該放的內存位置,這樣的經過嚴密規劃和組織好了的二進制文件才能運行。而這些只有在生成的EXE文件裡面才做完了這些工作。
---------------------------------------
作業題:
1、下列程序中格式錯在( )處。
A. main() B. int a,b,z;
C. a=2:b=3; D. z=a+b;
分析:A,B,D 沒有錯誤。 C 中在a=2後面應該是分號而不應是":"號
答: C
2、C語言允許將一條語句寫在兩行上,下列語句不正確的是
A. int a,
B;
B. int a
,b;
C. int
a,b
D. int a,b
;
分析:C語言規定可以在語句中的任何一個分隔符或空格處換行。上面4個選項中D.有問題因為在D.中第一行的最後沒有分隔符,而第二行只有一個分號,可以看做一個語句。所以D中的錯誤為:第一行是一個獨立的語句,但是少了一個分號。
答: D
3. C語言的一行寫不下時,可以
A. 用逗號換行 B. 用分號換行
C. 在任意一空格處換行 D. 用回車符換行
分析:C語言可以在任何一個分隔符或空格處換行,所以此題的正確答案是 C
答: C
4. 下列程序段中,哪一個是錯誤的注釋方法?
A. #in/*包含*/clude<stdio.h>
void main()
{
}
B. #include<stdio.h>
void main/* */(/*主函數*/)
{
}
C. #include<stdio.h>
void main()
{ int x/*初始化*/=10;
/*列印*/printf("%d",x);
}
D. #include<stdio.h>
void main()
{
int x=10;
printf("%d",x);
/*列印x的值*」*=10*/
}
分析:根據C語言的規定:注釋不能插在標識符的中間,在其它有分隔符的地方都可以插入注釋,上面四個程序段中只有A是將注釋插入在標識符的中間了。所以A是錯誤的。
答: A
5. C語言程序是由( )組成的?
答:C程序是由函數組成的。
6. C程序運行時,運行的是什麼文件?
數據的類型:
在程序中要處理大量的數據,把這些數據按其特點分為幾種基本的數據類型,它們分別是:
1 、整型 2 、字元型 3 、實型
還有其它的一些擴展的數據類型,但是開始學習時要先熟悉這三種基本數據類型。
在 C 語言中這幾種數據類型用符號表示如下:
整型數據類型 int /* 一般指可以運算的數,如自然數就是整型數據類型 */
字元數據類型 char /* 一般指文字,如英文字母;字元類型的 '1''2''3''4' 等 */
實型 float /* 也稱作浮點型,記住 float 類型的數都是有小數位的,如 425.23*/
常量和變數:
常量――程序運行過程中其值不變的量,如一個整數 134, 一個字元 『a'
變數――程序運行過程中其值可以變化的量,如 int a; char b; 那麼 a 和 b 都是變數。
符號常量 ――用一個「符號」來表示的一個「常量」稱為「符號常量」。
符號常量有什麼好處 ――在給符號常量命名的時候,按習慣取的名字與實際上的含義相符,可以「見名識意」;另外在需要修改常量的值的時候,只需要修改符號常量的定義部分即可,非常方便。
符號常量的定義方法 ―― #define 符號 常量
例: #define NUMBER 30 /* 定義了一個符號常量,在這里是用符號 NUMBER 表示整數 30 ,以後在程序里就可以
用符號 NUMBER 代替整數 30 進行運算 */
main()
{
int a=20; /* 把常量 20 賦給整型變數 a*/
int c; /* 定義了整型變數 c*/
c=NUMBER+a; /* 變數 c 的值此時為 50 ,符號常量 NUMBER 參與了運算 */
}
變數的定義方法 ――在變數的名字前面加上一個變數的數據類型,以說明已定義的變數可以用來存放什麼樣類型的數據。
例: int a; /* 定義了一個整型變數,以後這個變數只能存放整型類型的數 */
char b; /* 定義了一個字元型變數,以後這個變數只能存放符字元型數據 */
怎樣把常量值賦給已定義了的變數 ――用一個 = 號賦值。
例: int a; /* 定義一個整型孌量 a*/
char b; /* 定義了一個字元型變數 b*/
a=20; /* 用 = 號完成賦值,賦值後變數 a 的值此時為 20*/
b='d' /* 把常量字元 'd' 賦給變數 b ,此時變數 b 的值是字元 'd'*/
變數賦值時一種更靈活的方法 ――可以在一行上給多個相同數據類型的變數賦值,變數之間用逗號分隔。
例: int a,b,c,d; /* 定義了 4 個整型變數 */
char e,f,g; /* 定義了 3 個字元型變數 */
深入理解變數 ―― 1 ) 1 個變數必須有一個變數名。 2 )變數必須有其指定的數據類型
3 )變數一旦被定義,它就在內存中佔有一個位置,這個位置稱做該 變數的地址 。
4 )每一個變數都有其對應的值。
l 一定要牢記變數的這 4 個特性。
變數使用時的注意事項 ―― 1 )變數在使用之前一定要先定義,使用一個沒有定義的變數是錯誤的。
2 )變數必須在一個函數的開始部分定義。(這個限制在 C++ 中不存在)
例題:寫一個 2 個整數相加的程序。
/* 解題思路:求 2 個整數相加,必定要先定義 2 個變數來存放這 2 個數,另外還需要 1 個變數用來存放
相加的和,所以共需要定義 3 個整型變數 */
/* 注意每次在寫 C 程序的時候一定要注意書寫格式 */
main()
{
int a,b,c;
a=20,b=30; /* 在這里指定變數的值,因為還沒有講輸入輸出函數,只能這樣了。 */
c=a+b;
}
想一想,這樣簡單的一個題,需要知道的知識面卻不少。 用到了上面所講的哪些知識?
C語言中的庫函數――我們編寫C語言程序時要寫許多代碼,這些代碼是用基本程序語句如運算符、表達式、幾種語句結構來組成。這些語句組成了多個不同的函數,由多個函數組成一個完整的程序。實際上如果程序中的語句都要由自己來寫的話,那麼工作量是很大的了。並且有一些完成基本任務的函數如輸入輸出函數是經常需要使用的。這樣的一些常用的完成基本任務的函數有許多已經由提供編譯程序的公司為我們寫好了。這些已經寫好的函數放在TC或者BC編譯器的文件中。所謂「庫函數」,就是存放「函數」的「倉庫」。在TC中,函數的「倉庫」在哪裡呢?在TC的.\LIB目錄中。編寫程序的時候,如果我們需要使用某個庫函數,就要在這個程序開頭指明這庫函數存放在哪裡,以便讓編譯程序到這個地方去找。這個指明庫函數路徑的語句稱為「包含」語句,寫做#include。完整的寫法是:
#include <stdio.h>
#include 是包含的意思,<stdio.h> 是指明要使用的庫函數在 stdio.h這個文件裡面有說明。尖括弧<>是必須要寫的。而實際上,編譯程序在stdio.h之個文件里根據庫函數名可以在.\LIB目錄下的LIB文件里找到相關的代碼,寫進程序裡面去。使用不同的庫函數時要用不同的包含,關於怎樣使用#include,可以查看庫函數的幫助。
有了眾多的庫函數,給編寫程序帶來了很大的方便。就象做房子要用磚和瓦一樣。如果沒有磚和瓦,做房子自己要挖土燒磚,可想而知,那樣做房子的難度有多大。寫程序也是這樣,有了庫函數,在需要完成某些任務時,找到相應的庫函數調用一下就可以了,不需要自己一點一點的寫代碼。在學習編程的同時要多多了解一些庫函數的特點及用法,對編寫程序是有很大的好處的。
(在Windows下編寫程序,需要了解的「庫函數」就更多了,可以說不了解庫函數就不會編程。VC中用的是MFC,Win32中用的是API,它們都是函數庫)
先了解二個庫函數――1、scanf函數 /*格式化控制台輸入函數*/
函數原型:int scanf(control_string....); /*看上去很復雜。沒關系,以後自然會明白的*/
使用例:
void main()
{
int a,b,c; /*定義了三個整型變數*/
scanf("%d%d",&a,&b); /*從鍵盤輸入二個整數到孌量a和b中*/
c=a+b; /*把變數a與b相加的和送給變數c*/
}
下面仔細講一下scanf函數各參數的用法:
可以看到在小括弧里有二個%d,後面有二個變數a和b。二個%d的寫法為"%d%d",注意凡是這樣的符號都要寫在雙引號裡面,而變數則寫在雙引號的外面並用逗號分隔。這個%d我們稱為格式化說明符,第一個%d用於說明第一個變數a,第二個%d用於說明第二個變數b,這樣的順序是一一對應的。%d格式符說明了後面輸入的變數值是整型數。
另外注意的是二個%d是靠在一起的 %d%d,凡是這樣的寫法,在輸入數時,對於二個數之間的分隔是用「空隔鍵」來實現的。如輸入30和50這二個數形式為 30 50 如果二個%d寫成%d,%d中間有一個逗號,那麼在輸入數據時也一定要在輸入的數之間加上逗號,如 30,50。
再來看一下變數的寫法,可以看到在每一個變數名的前面都有一個&號,這個&號是取變數地址的意思,那麼&a寫在一起就是變數a的地址,&b寫在一起就是變數b的地址。
上面的scanf函數的作用就是把從鍵盤上輸入的二個整數分別送到變數a和變數b的地址裡面去。這個&號是非常重要,不要寫漏了。
scanf函數的格式說明符(格式說明符說明了下一步將讀的是什麼類型的數據)
格式碼 含義
%c 讀一單字元
%d 讀一整數
%i 讀一個浮點數
%e 讀一個浮點數
%f 讀一個浮點數
%g 讀一個浮點數
%o 讀一個八進制數
%s 讀一字元串
%x 讀一十六進制數
%p 讀一指針
%n 讀一個指針收一個等於到目前為止輸入的字元數止的整數
%u 讀一無符號整數
%[] 掃描一字元集
例:從鍵盤輸入二個字元,一個大寫,一個小寫,然後把這個小寫字元轉換成大寫,大寫字元轉換成小寫。
#include<stdio.h> /*因為在程序里用到了庫函數scanf,所以要使用包含#include<stdio.h>*/
void main()
{
char ch,chh; /*定義了二個字元型變數*/
scanf("%c%c",&ch,&chh); /*從鍵盤輸入二個字元,一個大寫,另一個小寫*/
ch=ch+32; /*大寫轉成小寫*/
chh=chh-32; /*小寫轉成大寫*/
}
2、printf函數 /*格式化輸出函數*/
函數原型:int printf(const char *control_string....);
說明:printf把變數的值或常量字元串輸出到控制台(一般是顯示屏)
使用例:
#include<stdio.h>
void main()
{
int a,b,c;
scanf("%d%d",&a,&b);
c=a+b;
printf("輸出二個整數相加的和"); /*輸出字元串常量,這里沒有用到格式化說明符*/
printf("%d",c); /*把變數c的值用整型格式輸出,這里%d是整型格式說明符*/
}
如果有幾個變數的值要輸出,用這樣的形式:printf("%d %d %d",a,b,c);
從這個printf輸出的格式中看出,每一個格式符對應一個變數,其對應順序也是一一對應的,第一個%d對應第一個變數a,以此類推。注意在printf函數中,變數前面就不要加&符號了。
注意printf函數中幾個%d之間留了一些空格,這里的用法與scanf相比有一點不同。在printf函數中格式符之間留多少空隔,輸出的時候每一個輸出的值之間就有多少空隔。如printf("%d %d %d",a,b,c);輸出則為:20 30 50 (這里的數是假設的)。如果寫為printf("%d,%d,%d",a,b,c);則輸出形式為 20,30,50
printf函數的格式符:
格式碼 格式
%c 單個字元
%d 十進制數
%i 十進制數
%e 科學法表示
%E 科學法表示
%f 十進制浮點數
%g 用%e或%f中較短的的一個(如果是%e,用小寫e)
%G 用%e或%f中較短的的一個(如果是%E,用大寫E)
%o 以八進制形式輸出
%s 字元串
%u 無符號十進制數
%x 十六進制數(小寫)
%X 十六進制數(大寫)
%p 顯示一個指針
%n 相關變數是整型指針,它所指處存放至今要寫入字元的總數
%% 列印一個%號
printf函數使用例:
1)char ss="abcdefghijk"; printf("%s",ss); /*輸出一個字元串,屏幕上顯示"abcdefghijk"*/
2)unsigned int a=65535; printf("%u",a); /*以十六進制形式輸出一個無符號數,顯示為ffff*/
3)int a=123,b=456,c=687; printf("%d\t%d\n%d",a,b,c);
輸出形式為:
123 456 /*'\t'是一個製表符,所以要移動一個製表位這么多空格數*/
687 /*'\n'是換行轉義符,在前面字元常量里講過。所以要換一行再輸出687*/
C語言基礎(05-運算符和表達式):運算符(也叫操作符)--運算符是一個表示特定的數學或邏輯操作的符號。如'+'號,表示了一個相加運算;'&&'號表示了一個邏輯『與』的運算。由運算符把需要進行運算的各個量(常量或變數)連接起來組成一個表達式。
下面要講的是標準的運算符,在C++中還有另外的一些運算符。運算符 進行的運算 所屬類別 備注
[ ] 間隔符 標點符號
( ) 間隔符 標點符號
· 直接分量選擇 雙目操作符
-> 間接分量選擇 雙目操作符
++ 前增量、後增量 單目操作符
-- 前減量、後減量 單目操作符
+ 加 雙目操作符、單目操作符
- 減 雙目操作符、單目操作符
* 1)乘 2)間接引用 雙目操作符、單目操作符
/ 除 雙目操作符
% 求余 雙目操作符
& 1)位『與』2)取地址 雙目操作符、單目操作符
! 邏輯『非』 單目操作符
&& 邏輯『與』 雙目操作符
|| 邏輯『或』 雙目操作符
<< 左移位 雙目操作符
>> 右移位 雙目操作符
< 小於 雙目操作符
> 大於 雙目操作符
== 等於 雙目操作符
!= 不等於 雙目操作符
^ 位『異或』 雙目操作符
+= 和賦值 雙目操作符
-= 差賦值 雙目操作符
*= 乘賦值 雙目操作符
/= 商賦值 雙目操作符
<<= 左移賦值 雙目操作符
>>= 右移賦值 雙目操作符
&= 按位『與』賦值 雙目操作符
^= 按位異或賦值 雙目操作符
|= 按位或賦值 雙目操作符
%= 模賦值 雙目操作符
= 賦值 雙目操作符
?: 按條件取值 雙目操作符
, 間隔符 標點符號
# 預處理符號 標點符號
## 預處理符號 標點符號
sizeof 求位元組數
~ 按位求反
| 位『或』
: 間隔符
; 間隔符
... 間隔符
要把表中的運算符仔細的分類是不容易的,因為同一個運算符,在不同的地方其含義是不同的。如*運算符,當作為乘運算時是雙目操作符(所謂雙目操作符,即運算時需要二個操作數),如3*6,那麼3與6總共是二個操作數。當作為取值運算時就是單目操作符(所謂單目操作符是只需要一個操作數)如對一個數求反:!a,這里只有一個操作數a。
要記住運算符的二個特點,一個是運算符的操作對象,另一個就是運算符的優先順序別。其中運算符的優先順序別是最不容易搞清楚和最容易出錯的地方。
在講運算符之前講一下「表達式」的概念:所謂表達式,就是用運算符把各個操作數連接成符合C語法規則的進行運算的式子。這里說的「符合C語法的規則」也很重要。如 a+b+5就是一個用算術運算符連接起來的表達式。
1、算術運算符:+、-、*、/、%
1)+、-、*、/ 分別是相加、相減、相乘、相除
2)% 求二個數運算的模。所謂求模就是求二個數相除後的余數。例:25/3的余數是1,可以說25%3的模是1。要注意的是求模運算時二個操作數必須是整數。如果求25.3/3.1這樣是不能運算的。
下面寫一個例子:
#include<stdio.h> /*程序中要用到輸入輸出庫函數,所以包含了stdio.h*/
void main()
{
int a=10,b=20,c=30; /*定義了3個整型變數,並同時進行了初始化賦值*/
a=a*b+c; /*a*b+c組成了一個算術表達式,運算後的結果為230並把值*/
/*賦給變數a*/
printf("%d",a); /*以整型格式輸出變數a的值。這里輸出230*/
a=a%b; /*進行求模運算。因為沒有餘數,最後的模為0*/
printf("%d",a); /*輸出變數a的值。這里輸出0*/
}
下面是一個要考慮運算符優先順序的例子:
#include<stdio.h>
void main()
{
int a=10,b=20,c=30;
a=c-a*b; /*這里就要考慮運算符優先順序,*運算符的優先順序比-運算符*/
/*的高,所以先進行乘運算。這里最後結果為-170*/
}
由上面這個例子看到,在一個有多個運算符連接起來的表達式中需要考慮運算符的優先順序,這個例子很簡單。關於運算符優先順序的概念其實在小學生的算術運算中就有這樣的概念了,只不過這里的運算符多了一些,要考慮的情況也就復雜了。
如果這個式子改寫一下,寫成:a=(c-a)*b;在運算時就以括弧中的運算優先。
幾個簡化的運算表達式:
在C語言的程序中,經常看到這樣的運算,如:i++;或者k--;這是運算符號的簡化寫法。
1、加1運算的簡寫
當一個變數進行加1運算時,如a=a+1;這是變數自身加1,簡寫為a++;
2、減1運算的簡寫
當一個變數進行減1運算時,如a=a-1;這是變數自身減1,簡寫為a--;
3、加1個常量運算的簡寫
當一個變數與一個常量相加時,如a=a+5;這是變數自身加5,簡寫為a+=5;
4、減一個常量運算的簡寫
當一個變數與一個常量相減時,如a=a-5;這是變數自身減5,簡寫為a-=5;
5、乘一個常量運算的簡寫
當一個變數與一個常量相乘時,如a=a*5,這是變數自身乘5,簡寫為a*=5;
6、除一個常量運算的簡寫
當一個變數與一個常量相除時,如a=a/5;這是變數自身除5,簡寫為a/=5;
運算符的結合性(或稱作關聯性)
在一個復雜的表達式中,常常有許多運算符和變數,這時就要判斷優先順序和結合性這二個因素。
例:-5+7; 這樣的一個表達式用結合性來判斷,因為運算符'-'和'+'相對於運算的數來說是『左』結合的,所以就有'-5'和'+7'所以運算的結果為 2。
通過這個例子要知道什麼是「左結合性」和「右結合性」
左結合性--變數(或常量)與左邊的運算符結合
右結合性--變數(或常量)與右邊的運算符結合
運算符的優先順序和結合性表
優先順序 運算符(高 ------→低) 結合率 運算符類型
高 ( ) [ ] -> . 從左至右 雙目運算符
! ~ ++ -- (類型) sizeof + - * & 從右至左 單目運算符
* / % 從左至右 雙目運算符
+ - 從左至右 雙目運算符
<< >> 從左至右 雙目運算符
< <= > >= 從左至右 雙目運算符
== != 從左至右 雙目運算符
& 從左至右 雙目運算符
^ 從左至右 雙目運算符
| 從左至右 雙目運算符
&& 從左至右 雙目運算符
|| 從左至右 雙目運算符
?: 從右至左 三目運算符
低 = += -= *= /= %= &= ^= |= <<= >>= 從左至右 雙目運算符
高 -------------→ 低
從表中可以看出一個規律,凡是單目運算符都是「右結合」的,凡是雙目運算符都是「左結合」的。其中有一個?:運算符是三目運算符是右結合的,記住了這個規律,運算符的結合性也就掌握了。
如果代碼行中的運算符比較多,用括弧確定表達式的操作順序,避免使用默認的優先順序。
由於將表熟記是比較困難的,為了防止產生歧義並提高可讀性,應當用括弧確定表達式的操作順序。例如:
d = (high << 8) | low /*用括弧把需要先運算的括起來*/
if ((a | b) && (a & c)) /*用括弧把需要先運算的括起來*/
例:
下列程序輸出的結果是
#include<stdio.h>
void main()
{
int a=2;
a%=4-1;
printf("%d",a);
a+=a*=a-=a*=3;
printf("\n%d",a);
}
A. 2,0 B. 1,0
C. -1,12 D. 2,12
分析:由於%=運算符的優先順序別低於-運算,a%=4-1即是a%=3,等價於a=a%3即a=2%3=2,所以選項B和C是錯誤的。表達式a+=a*=a-=a*=3,計算時注意賦值類表達式的值和變數的值隨時被更新,計算表達式的值,開始時a=2,表達式賦值是從左至右進行的,表達a*=3使得a=6,此表達式的值也為6,於是表達式a-=a*=3相當於a-=6=6-6=0,a的值為0,後面的計算就不用做了,所以a的值最終為0。
答:A
下列語句中錯誤的是
A.x=sizeof int;
B.x=sizeof 3.14
C.printf("%d",a=a+1,b--,c+1);
D.printf("%d",++x,x++);
分析:此題的選項A的作用是測試int類型所佔內存的位元組數,因為類型符要用括弧括起來,這時缺少括弧是錯誤的。
選項B是正確的。
選項C從表面上看似乎復雜一些,但其中的a=a+1,b--,c+1是一個逗號表達式,C語言允許使用這種表達式所以D也是正確的。
答案:A
下面的語句中,符合C語言語法的賦值語句是
A.a=7+b+c=a+7; B.a=7+b++=a+7;
C.a=7+b,b++,a+7; D.a=7+b;c=a+7;
分析:一般情況下,表達式不能放在賦值號的左邊,所
6. c源程序的基本單位是函數,在定義函數時,函數體必須使用一對什麼作為定界符
必須使用一對花括弧{ }作為定界符
請採納,謝謝。
7. C語言中的一句話「表達式為真」,這個「真」是什麼意思
因為形式邏輯並不研究「判斷的絕對之真」,而C語言是基於形式邏輯理論而編寫的計算機編程語言,所以「表達式為真」指的是「命題的相對之真」。
真和假的哲學定義
真/假是對事物體感知程度的判斷。是成對出現的,必須一起定義。
真和假構成一對抽象范疇概念,用范疇式定義就是:體感{假/真}。可知假涵蓋了真。
真/假分為絕對和相對兩種。
一、絕對(判斷)真假:有界為真,沒界為假。絕對真/假表達了對所有事物的共同性質:本體(連/限)的直接感知程度。就是說只有在有界的情況下,一件事物才能夠被感知為是一件被確認的事物;如果沒界就沒法感知到真有這件事物。這就是絕對真假的含義。分開來定義就是:
絕對的「真」:在連續的混沌中界出了有確定邊界的東西。
絕對的「假」:在連續的混沌中沒界出有確定邊界的東西。
通常所說的:看真些。其實就是說要把對象的邊界確認清楚。所謂真假難分,就是說事物總是難以「確界」的。這里有兩層意思,1、某一個人對某物難以確界,2、每個人的確界難以相同。其中1涵蓋了2。
如表所示,絕對真假是對事物體直接感知程度的判斷,共有四級:假的有三級,真的只有一級。我們常說:1、聽得不是很真(失真)。指的是聽到的與以前不一樣;2、沒聽到什麼啊。指的是聽不到聲音,就是聽不到有什麼可以作為限制的東西;3、靜靜的。指的是一片「連」著的空白,這與2反著說但意思相同;4、聽到明顯的聲音。指的是聽到「界限」了。
二、相對(命題)真假:把有界傳作沒界或把沒界傳作有界都是傳遞之假(失真);把此界傳作他界也是傳遞之假(誤傳);把此界傳作此界或把沒界傳作沒界則是傳遞之真(真傳)。可見傳遞的真假是相對於命題的。相對真假問題是指判斷的真假在命題和推理過程中的正確傳遞與否的問題。形式邏輯中的《基本命題真值表》表達的正是絕對真假的相對傳遞規律,至於如何保證原始判斷的絕對真假問題,形式邏輯並不研究。