當前位置:首頁 » 編程語言 » 條件取值c語言
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

條件取值c語言

發布時間: 2022-08-21 05:51:57

1. 條件運算符的c語言

表達式為:表達式1?表達式2:表達式3
先求解表達式1,
若其值為真(非0)則將表達式2的值作為整個表達式的取值,
否則(表達式1的值為0)將表達式3的值作為整個表達式的取值。
例如:
1、max=(a>b)?a:b
就是將a和b二者中較大的一個賦給max。
2、min=(a<b)?a:b
就是將a和b二者中較小的一個賦給min。 條件運算符優先順序高於賦值、逗號運算符,低於其他運算符
例如:
⑴ m<n ? x : a+3
等價於:(m<n) ?(x) :(a+3)
⑵ a++>=10 && b-->20 ? a : b
等價於:(a++>=10 && b-->20) ? a : b
⑶ x=3+a>5 ? 100 : 200
等價於:x= (( 3+a>5 ) ? 100 : 200 ) 條件運算符具有右結合性
當一個表達式中出現多個條件運算符時,應該將位於最右邊的問號與離它最近的冒號配對,並按這一原則正確區分各條件運算符的運算對象。
例如:
w<x ? x+w : x<y ? x : y
與 w<x ? x+w : ( x<y ? x : y) 等價
與 (w<x ? x+w : x<y) ? x : y 不等價

2. C語言各個數據類型取值范圍有哪些

目前,主流編譯環境都是32位,32位平台下各種數據類型取值范圍:

[signed]in: -2147483648~+2147483648。

無符號整型unsigned[int] :0~4294967295。

短整型 short [int]:-32768~32768。

無符號短整型unsigned short[int]:0~65535。

長整型 Long int: -2147483648~+2147483648。

無符號長整型unsigned [int]:0~4294967295。

字元型[signed] char:-128~+127。

無符號字元型 unsigned char:0~255。

單精度 float:3.4 x 10^(-38)~ 3.4 x 10^(+38)。

雙精度double:1.7 x 10^(-308)~ 1.7 x 10^(+308)。

長雙精度 long double:1.7 x 10^(-308)~ 1.7 x 10^(+308)。

3. 在C語言中,「」。「:」是什麼意思

1、意思:是條件運算符,條件運算符是C語言中唯一的三目運算符,就是說他有三個運算對象。

2、條件運算符的形式是「?:」由他構成的表達式稱為條件表達式。形式為:表達式1?表達式2:表達式3。

運算符

表達式為:表達式1?表達式2:表達式3

先求解表達式1

若其值為真(非0)則將表達式2的值作為整個表達式的取值,

否則(表達式1的值為0)將表達式3的值作為整個表達式的取值。

例如:max=(a>b)?a:b

就是將a和b二者中較大的一個賦給max。

以上內容參考:網路-條件運算符

4. C語言的條件表達式取值

#include <stdio.h>
int main(void)
{
int a, b, max;
printf("請輸入a, b的值:\n");
scanf("%d,%d", &a, &b);
max = (a>b) ? printf("最大的值是:%d\n", a):printf("最大的值是:%d\n", b);
printf("最大值是:%d\n", max);
/*
max被賦值的值來自於printf函數
也就是printf函數的字元位元組長度
一個中文字或大寫符號就是2位元組,
英文字元或者小寫字元佔用1位元組.
"最大的值是" 一共5個字, 2*5 = 10位元組
':' 1位元組, '\n' 1位元組, %d(佔位符)
因為輸入的是'1', 所以也是1位元組
所以max == 10 + 1 + 1 + 1 == 13
*/
return 0;
}

修改方法 (只需修改一句):

max = (a>b) ? printf("最大的值是:%d\n", a):printf("最大的值是:%d\n", b);
改為
(a>b) ? printf("最大的值是:%d\n", max=a):printf("最大的值是:%d\n", max=b);

輸出測試 (粗體表輸入):

請輸入a, b的值:
1,2
最大的值是:2
最大值是:2

5. 在c語言中,何為條件運算符!具體的條件運算符有哪些

計算機具有邏輯判斷能力,其判斷的依據是計算機內部進行邏輯運算的結果。C語言提供了關系運算和邏輯運算,用來構造C程序控制中的條件,實現程序的選擇結構和循環結構控制。
關系運算和邏輯運算的結果都是邏輯值,即"真"和"假"。由於C語言中沒有邏輯型數據,因此C語言規定用整型數據來表示邏輯值。即:用整數值1表示邏輯"真",用整數值0表示邏輯"假"。在C語言中,將非0就視為"真"。
3.4.1
關系運算符與關系表達式
1.
關系運算符
關系運算實際上是邏輯比較運算,它是邏輯運算中的一種。關系運算符的作用是確定兩個數據之間是否存在某種關系。C語言規定的6種關系運算符及其有關的說明見表3-6。
表3-6
算術運算符
運算符
含義
運算對象個數
結合方向
簡例
>
大於
雙目運算符
自左至右
a>b,3>8
>
=
大於等於
雙目運算符
自左至右
a>=b,3>=2
<
小於
雙目運算符
自左至右
a<b,3<8
<
=
小於等於
雙目運算符
自左至右
a<=b,3<=b
!
=
不等於
雙目運算符
自左至右
a!=b,3!=5%7
=
=
恆等於
雙目運算符
自左至右
a==b,3==5*a
關系運算符都是雙目運算符,其結合性是從左到右結合。優先順序分為兩級:
高級:<、<=、>、>=
低級:==、!=
關系運算符的優先順序低於算術運算符。
2.
關系表達式
用關系運算符將兩個表達式連接起來的式子稱為關系表達式。它的一般形式為:
表達式1
關系運算符
表達式2
其中,關系運算符指明了對表達式所實施的操作。"表達式1"和"表達式2"是關系運算的對象,它們可以是算術表達式、關系表達式、邏輯表達式、賦值表達式和字元表達式。但一般關系運算要求關系運算符連接的兩個運算對象為同類型數據。例如:
a+b>3*c
兩個算術表達式的值作比較
(a=b)<(b=10%c)
兩個賦值表達式的值作比較
(a<=b)==(b>c)
兩個關系表達式的值作比較
'A'!='a'
兩個字元表達式的值作比較
關系式只有兩種可能的結果:或者它所描述的關系成立,或者這個關系不成立,所以說一個關系表達式描述的是一種邏輯判斷。若關系成立,說明關系式表述的關系是"真"的,稱邏輯值為"真",用1表示;若關系不成立,說明關系式表述的關系是"假"的,稱邏輯值為"假",用0表示。所以關系表達式的運算結果一定是邏輯值。
進行關系運算時,先計算表達式的值,然後再進行關系比較運算。例如:
a=2,b=3,c=4,則上述關系表達式的值為:
a+b>3*c
(5>12)關系不成立
表達式結果值為0(假)
(a+=b)<(b*=10%c)
(5<6)
關系成立
表達式結果值為1
(真)
(a<=b)==(b>c)
(1==0)關系不成立
表達式結果值為0(假)
'A'!='a'
(65!=97)關系成立
表達式結果值為1(真)
以關系表達式"a+b>3*c"為例,因為算術運算的優先順序高於關系運算,所以先計算a+b和3*c的值,結果分別為5和12,再將5和12進行關系比較,其運算結果為0。
在表達式中連續使用關系運算符時,要注意正確表達含義,注意運算優先順序和結合性。
例如,變數x的取值范圍為"0≤x≤20"時,不能寫成"0<=x<=20"。因為關系表達式"0<=x<=20"的運算過程是:按照優先順序,先求出"0<=x"的結果,再將結果1或0作"<=9"的判斷,這樣無論x取何值,最後表達式一定成立,結果一定為1。這顯然違背了原來的含義。此時,就要運用下面介紹的邏輯運算符進行連接,即應寫為:"0<=x
&&
x<=9"。
3.4.2
邏輯運算符與邏輯表達式
1.邏輯運算符
C語言規定的3種邏輯運算符及其有關的說明見表3-7。
表3-7
邏輯運算符
運算符
含義
運算對象個數
結合方向
簡例
&&
邏輯與
雙目運算符
自左向右
a&&b,3>8&&a==b
||
邏輯或
雙目運算符
自左向右
a||b,3<=b8||a==b
!
邏輯非
單目運算符
自右向左
!a,!a==b
邏輯運算要求運算對象為"真"(非0)或"假"(0)。這三種邏輯運算符的運算規則可用表3-8的真值表表示:

表3-8
邏輯運算真值表
a
b
a&&b
a||b
!a
!b
0
0
0
0
1
1
0
非0
0
1
1
0
非0
0
0
1
0
1
非0
非0
1
1
0
0
在一個邏輯表達式中,可以含有多個邏輯運算符,其優先順序是:"!"最高,"&&"次之,"||"最低;邏輯運算優先順序低於所有關系運算,而"!"優先順序高於所有算術運算。
例如:某程序中有如下說明:int
a=3,b=1,
x=2,
y=0;則:

(a>b)
&&
(x>y)
的值為1。

a>b
&&
x>y
的值為1。
注意:①②兩式是等價的,因為"&&"運算優先順序低於關系運算,故括弧可以省略。

(y||b)
&&
(y||a)
的值為1。

y||b
&&
y||a
的值為1。
注意:③④兩式結果雖然一樣,但兩式的含義不同。③式中由於括弧的優先順序高於"&&",因此,先計算"y||b"和"y||a"後,再將兩個結果進行"&&"運算。而④式由於"&&"的優先順序高於"||",故要先計算"b&&y",其結果為0,再計算"y||0",其值也為0,最後計算"0||a",結果為1。由此可見,運算符的優先順序制約著表達式的計算次序。

!a
||
a>b
的值為1。
此式中"!"的優先順序高於">",而
">"的優先順序高於"||",故先計算"!a",其值為0,再計算"a>b",其值為1,最後計算"0||1",值為1。
3.4.3
條件運算符與條件表達式
條件運算符是C語言中唯一具的三目運算符,就是說它有三個運算對象。條件運算符的形式是"?
:"由它構成的表達式稱為條件表達式。其形式為:
表達式1
?
表達式2
:
表達式3
條件運算符的"?"個":"總是成對出現的。條件表達式的運算功能是:先計算表達式1的值,若值為非0,則計算表達式2的值,並將表達式2的值作為整個條件表達式的結果;若表達式1的值為0,則計算表達式3的值,並將表達式2的值作為整個條件表達式的結果。例如有以下條件表達式:
(a>b)?a+b:a-b
當a=8,b=4,c=3時,求解條件表達式的過程如下:
先計算關系式a>b,結果為1,因其值為真,則計算a+b的結果為12,這個12就是整個條件表達式的結果。請特別注意,此時不再計算表達式a-b了。如果關系式a>b的結果為0,就不再計算表達式a+b了。這一點在應用中很重要。
條件表達式的優先順序高於賦值運算,但低於所有關系運算、邏輯運算和算術運算。其結合性是自右向左結合,當多個條件表達式嵌套使用時,每個後續的":"總與前面最近的、沒有配對的"?"相聯系。例如在條件表達式"a>0
?
a/b:a<0
?
a+b:a-b"中,出現兩個條件表達式的嵌套,求解這個表達式時先計算後面一個條件表達式"a<0
?
a+b:a-b"的值,然後再與前面的"a>0
?
a/b:"組合。
使用條件表達式可以使程序簡潔明了。例如,賦值語句"z=(a>b)?a:b
"中使用了條件表達式,很簡潔地表示了判斷變數a與b的最大值並賦給變數z的功能。所以,使用條件表達式可以簡化程序
例3-8:定義高等數學中常用的符號函數sign的數學定義如下。
.
對應的C函數定義如下:
/*
L3_8.C
*/
double
sign(double
x)
{
return
x>0
?
1:(x==0
?
0:-1);
}

6. 求助,關於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;
分析:一般情況下,表達式不能放在賦值號的左邊,所

7. C語言問題

x>y?1:2.3是C語言中的條件表達式。
條件表達式的一般形式為:
表達式1?表達式2:表達式3
條件表達式是這樣執行的:如果表達式1為真,則條件表達式取值表達式2,否則取值表達式3。
表達式2與表達式3的類型可以不同,此時條件表達式的值的類型為二者中較高的類型。
在條件表達式x>y?1:2.3中,因為x>y為真,所以條件表達式的值為1,又因為2.3是實型,比整型高,所以將1轉換成實型值1.0

8. 在C語言中: 是什麼意思

1、意思是:
是條件運算符,條件運算符是C語言中唯一的三目運算符,就是說他有三個運算對象。
2、條件運算符的形式是「?:」由他構成的表達式稱為條件表達式。
形式為:表達式1?表達式2:表達式3

(8)條件取值c語言擴展閱讀:
一、表達式為:表達式1?表達式2:表達式3
先求解表達式1,若其值為真(非0)則將表達式2的值作為整個表達式的取值,否則(表達式1的值為0)將表達式3的值作為整個表達式的取值。
例如:
1、max=(a>b)?a:b
就是將a和b二者中較大的一個賦給max。
2、min=(a<b)?a:b
就是將a和b二者中較小的一個賦給min。
3、優先順序
條件運算符優先順序高於賦值、逗號運算符,低於其他運算符
例如:

m<n
?
x
:
a+3
等價於:(m<n)
?(x)
:(a+3)

a++>=10
&&
b-->20
?
a
:
b
等價於:(a++>=10
&&
b-->20)
?
a
:
b

x=3+a>5
?
100
:
200
等價於:x=
((
3+a>5
)
?
100
:
200
)
參考資料:網路-條件運算符

9. C語言各個數據類型取值范圍

C語言的數據基本類型分為字元型、整型、長整型以及浮點型,取值范圍如下:

c語言中關於變數的取值范圍的計算方法:

1、使用函數的返回值。將函數計算出的變數作為返回值返回給其它函數使用。

2、使用函數的參數。將函數參數設置為引用傳遞而不是值傳遞,就可以把函數計算出的變數通過此參數給其它函數使用。

3、使用全局變數。將函數計算出的值保存到全局變數中,其它函數就可以使用了。

(9)條件取值c語言擴展閱讀

C語言運算中的數據類型自動轉換原則

1、隱式轉換

C語言在以下四種情況下會進行隱式轉換:

(1)算術運算式中,低類型能夠轉換為高類型。

(2)賦值表達式中,右邊表達式的值自動隱式轉換為左邊變數的類型,並賦值給它。

(3)函數調用中參數傳遞時,系統隱式地將實參轉換為形參的類型後,賦給形參。

(4)函數有返回值時,系統將隱式地將返回表達式類型轉換為返回值類型,賦值給調用函數。

2、算數運算的隱式轉換

算數運算中,首先有如下類型轉換規則:

(1)字元必須先轉換為整數(C語言規定字元類型數據和整型數據之間可以通用)。

(2)short型轉換為int型(同屬於整型)。

(3)float型數據在運算時一律轉換為雙精度(double)型,以提高運算精度(同屬於實型)。

其次,有下面的規則。

當不同類型的數據進行操作時,應當首先將其轉換成相同的數據類型,然後進行操作,轉換規則是由低級向高級轉換。