c語言題目 若有下列定義 char a int b floa

時間 2021-10-17 02:37:57

1樓:豬頭或火寶寶

你好!!!

char a;int b;float c;double d;

c*=b+d-c這個表示式中含有不同的資料型別,那麼編譯器就會自動把低階型別向高階型別轉換(當然這個轉換是自動轉換的)即編譯器會把char ,int, float 轉換成double的型別,

c*=b+d-c但是我們定義變數c是float型別的,那麼這個計算結果就會強制轉換成float,然後把轉化後float型別的資料在賦值給變數c.

總結:在有不同型別的計算中,都會把低階運算想高階運算自動轉化,要是表示式中都float,那麼其他低於float型別的都會轉化成float,要是有double也是如此。

但是注意一點:編譯器在計算的時候是按等級最高的型別計算的,計算的只是表示式結果的型別,那要是把高階型別的幾個賦值給低階型別,會發出自動轉換。比如:

char a;int b;float c;double d;

表示式a+b+c+d,那麼這個表示式中最高的型別就是double,那麼表達結果的型別就是double,但是我們可把double型別賦值給int 型別:int x=a+b+c+d,那麼此時x的型別還是int

2樓:匿名使用者

你定義c為float,最後c就是float雖然b+d-c的結果是double型,

但最後賦值給c時都要強制轉為float型

畢竟c(float)只佔4個位元組的空間,你怎麼把8個位元組的內容(double)直接放進去呢?

3樓:

這個c的型別肯定是double的

這是數字型別轉換的基本規則,有double參與運算,則結果肯定是double的

4樓:匿名使用者

高 double <--float

^ ^

| |

| long

| |

| unsignd

| |

低 int <-- char,short由低到高!注意這個不是一層一層的變的(int->unsigned->long->long)

int->long,int->double都是可行的

5樓:匿名使用者

這個是肯定要發生隱式轉換的,你小型別和大型別做運算,就會發生這樣的情況

6樓:

同意五樓的觀點,因為本身定義了c的型別

7樓:匿名使用者

應該是強制型別轉換,或者隱式型別轉換

1,若有以下定義,char a;int b;float c;double d;則表示式a*b+d-c值的型別為( )

8樓:匿名使用者

答案:double型別

參考:「隱式型別轉換」

c++定義了一組內建的型別物件之間的標準轉換,在必要時它們被編譯器隱式的應用到物件上。在算式轉換保證了二元操作符,如加法或乘法的兩個運算元被提升為共同的型別,然後再用它表示結果的型別。兩個通用的指導原則如下:

1、為防止精度損失,如果必要的話,型別總是被提升為較寬的型別。

2、所有含有小於整形的有序型別的算術表示式在計算之前其型別都會被轉換成整形。

規則的定義如上面所述,這些規則定義了一個型別轉換層次結構,我們從最寬的型別long double 開始,那麼另一個運算元無論是什麼型別都將被轉換成long double .如果兩個運算元千不是long double 型,那麼若其中一個運算元的型別是double 型,則另一個就被轉換成double 型。例如:

int ival;

float fval;

double dval;

dval + fval + ival //在計算加法前fval和ival都被轉換成double

類似地,如果兩個運算元都不是double型而其中一個操作float型 ,則另一個被轉換成float型。例如:

char cval;

int ival;

float fval;

cval + ival + fval //在計算加法前ival和cval都被轉換成float

否則如果兩個運算元都不是3種浮點型別之一,它們一定是某種整值型別。在確定共同的目標提升型別之前,編譯器將在所有小於int 的整值型別上施加一個被稱為整值提升的過程。

在進行整值提升時型別char、signed char、unsigned char和short int 都被提升為型別int 。如果機器上的型別空間足夠表示所有unsigned short 型的值,這通常發生在short用半個字而int 用一個字表示的情況下,則unsigned short int 也被轉換成int 否則它會被提升為unsigned int 。wchar_t和列舉型別被提升為能夠表示其底層型別所有值的最小整數型別。

在下列表示式中:

char cval;

bool found;

enum mumbermval;

unsigned long ulong;

cval + ulong;ulong + found; mval + ulong;

在確定兩個運算元被提升的公共型別之前,cval found 和mval都被提升為int 型別。

一旦整值提升執行完畢,型別比較就又一次開始。如果一個操作是unsigned long 型,則第二個也被轉換成unsigned long 型。在上面的例子中所有被加到ulong上的3個物件都被提升為unsigned long 型。

如果兩個操作型別都不是unsigned long 而其中一個操作long型,則另一個也被轉換成long型。例如:

char cval;

long lval;

cval + 1024 + lval; //在計算加法前cval和1024都被提升為long型 。

long型別的一般轉換有一個例外。如果一個操作long型而另一個是unsigned int 型,那麼只有機器上的long型的長度足以unsigned int 的所有值時(一般來說,在32位作業系統中long型和int 型都用一長表示,所以不滿足這裡的假設條件),unsigned int 才會被轉換為long型,否則兩個運算元都被提升為unsigned long 型。若兩個運算元都不是long型而其中一個是unsigned int 型 ,則另一個也被轉換成unsigned int 型,否則兩個運算元一定都是int 型。

儘管算術轉換的這些規則帶給你的困惑可能多於啟發,但是一般的思想是儘可能地保留型別表示式中涉及到的值的精度。這下是通過把不同的型別提升到當前出現的最寬的型別實現的。

9樓:機賢媯寅

double

表示式的型別會自動提升為參與表示式求值的最上級型別

10樓:

double。。

結果為最複雜的。。。。

c語言中有一道題目:已知"int a=4,b=5,c;",則執行表示式"c=a=a>b後變數a的值為( ) a 0 b 1 c 4 d 5

11樓:匿名使用者

這個涉及到c語言的單目運算子優先順序與結合性的知識:

62616964757a686964616fe59b9ee7ad9431333330356165

優先順序:

在表示式中,優先順序較高的先於優先順序較低的進行運算。而在一個運算量兩側的運算子優先順序相同時,則按運算子的結合性所規定的結合方向處理。

結合性:

c語言中各運算子的結合性分為兩種,即左結合性(自左至右)和右結合性(自右至左)。例如算術運算子的結合性是自左至右,即先左後右。如有表示式x-y+z 則y 應先與「-」號結合,執行x-y 運算,然後再執行+z 的運算。

這種自左至右的結合 方向就稱為「左結合性」。而自右至左的結合方向稱為「右結合性」。

在你的問題中,"="在表示式中是賦值運算子,而在c語言中,賦值運算子是典型的右結合性運算子。如x=y=z,由於「=」的右結合性,應先執行y=z 再執行x=(y=z)運算。

所以,本例就是先計算雙目運算子「>」:a>b,因為a=4,b=5,a是小於b的,所以式子計算就變成了c = a = 0,然後再計算a = 0(即a = (a > b)),最後式子就是c = 0, 所以答案選a

具體運算子優先順序和結核性請參考:

12樓:0冷雨

答案是a;因為a=a>b意思為把波爾值a>b賦值給a,因為a大於b,a>b等於0,所以a為0.望採納~

13樓:匿名使用者

a, a=0

= 是由du右向zhi左運算的,

a>b值為daofalse,值為0

所以c=a=0

另外也可以專寫程式屬驗證:

#include

int main(void)

給出以下定義: char x[]="abcdfeg"; char y[]={'a','b','c','d','e','f','g'};

14樓:匿名使用者

"abcdfeg"是字串,字串是以『\0』結尾的字元陣列,字串的陣列表示是;因此選c

15樓:

a錯誤,因為x是字串,最後有個終止符'\0',而y是字元陣列,沒有終止符'\0';

b正確,長度都為7

c錯誤,同理b

d錯誤,同理b

16樓:輕曳風鈴

c 字串還要加個'\0'

17樓:後知後覺丶飛

b char陣列長度相同

若變數已正確定義並賦值,下面符合c語言語法的表示式是( )。(1分) a、a:=b+1 b、a=b=c+2 c、int 18.5%3

18樓:匿名使用者

b。a無此用法。表示式,是由數字、算符、數字分組符號(括號)、自由變數和約束變數等以能求得數值的有意義排列方法所得的組合,表示式必須要賦值給一個變數才行,故c錯。

等號左邊必須是變數,故d錯。

擴充套件資料:

1、算術表示式:

算術表示式是最常用的表示式,又稱為數值表示式。它是通過算術運算子來進行運算的數學公式。

算術運算子

1)乘法運算子 *

x*y 求x乘y的值 舉例:6*7=42

2) 除法運算子 /

x/y 求x除y的值(浮點數運算) 舉例:2.76/1.2=2.3

3)整除運算子 div

x div y 求x除y的整數商(對整型數計算) 舉例:25=5

4)取餘運算子 mod

x mod y 求x除y的餘數(對整型數運算) 舉例:25 mod 4=1

5)加法運算子 +

x+y 加法運算 舉例:32+2=34

6)減法運算子 -

x-y 減法運算 舉例:48-21=27

2、邏輯表示式

邏輯運算的結果只有兩個:true(真)和false(假)。visual basic提供了六種關係運算子和三種邏輯運算子:

=(等於)、<(小於)、<=(小於等於)、>(大於)、>=(大於等於)、<>(不等於)

not(非)、and(與)、or(或)

19樓:任國榮

a中的":="不是可識別的運算子,故錯;

b是對的,相當於:b=c+2; a=b;(賦值運算從右到左算);

c:錯的,要麼定義變數:int a=18.5%3 ; 要麼資料型別強制轉換:(int)18.5%3; int 18.5%3這就不倫不類了;

d"="號左邊是不能有表示式的,給表示式是不能賦值的,所以d錯,

求c語言題目,求C語言題目

c語言經典100題 程式1 題目 有1,2,3,4個數字,能組成多少個互不相同且無重複數字的三位數 都是多少 1.程式分析 可填在百位,十位,個位的數字都是1,2,3,4.組成所有的排列後再去 掉不滿足條件的排列.2.程式源 main 程式2 題目 企業發放的獎金根據利潤提成.利潤 i 低於或等於1...

c語言的題目,C語言的題目

錯誤1 巨集定義最後沒有分號,將 define d 500 改為 define d 500 錯誤2 l不是整數,因此將l定義為int型就錯了 錯誤3 既然規定輸入格式為p 那麼輸入時就不能直接輸入數值,而應在數值之前輸入p 例如輸入p 6000 另外,程式的不妥之處 1 利潤不一定是整數,因此將p定...

c語言把int轉換為char格式

可以用庫函式中的strtoul,方法網上搜尋一下即可。也可以自己寫個函式轉換一下 如下 inthexstrtoint char str return ret 呼叫這個函式,就可以返回int型的值了。比如intr hexstrtoint 10fa 內容為數字的char,包含 0,1,2,3,4,5,6...