自問自答學c語言 2

2021-06-01 03:11:59 字數 2847 閱讀 9494

問題11c語言的基本型別?

數字: 整數和小數 int 和float; int 有short int long int; float有double

字元: char

邏輯: bool

乙個整體: struct, union, enum, 陣列

操作底層的:指標,void

問題12不同資料型別,空間大小的問題?

sizeof是運算子,不是函式; 是c語言中的關鍵字,同float,int,return一樣;c++中的new也是關鍵字。

問題14ascii碼表

設計計算機時,以英文為語言;只要可以輸入基本常用的字元共127個就可以了,於是2的7次方為

16*16/2=128 , 而16*16=(16+6)*10+6*6=220+36=256速算,速演算法參我的另一部落格文章

而64*64=64*66-128=4224-128=4096

因此乙個byte表示所有的127個基本字元,其中高位全置為0.

問題15unsigned char 和signedchar的範圍

signed char: 非負數 第八位為0其它全為1; 即0111 1111 大小為2的7次方-1=127因此範圍0-127

負數 第八位為1其它為1: 即11111111大小為-1;1000 0000 大小為-128

unisigned char: 0-1111 1111 大小為2的8次方-1=255;

可以這樣記憶:

先記憶無符號的8位,範圍在2的8次方-1=255 0-255; 符號的範圍最小為-2的八次方/2=-128, 最大由於正數裡面多了個0,因此到127即 -128-127

問題16 scanf printf引數寫的是變數名字還是變數位址?

printf("variable a is %d",a);

scanf("%d",&a);

設定時為了方便從stdin輸入的東西直接放入變數的位址裡就可以了,不必在通過變數定址存放,因此scanf會設計成直接寫入位址。

printf是列印的變數的資料和位址無關,因此這樣設計。

我經常犯的毛病是寫成scanf("%d",a)了。其次是scanf的輸入格式的問題

scanf(「%d  %d」,&a,&b)兩個空格隔開的則應該輸入兩個空格

scanf(「a=%d,b=%d」,&a,&b);

問題17沒有計算器寫個2進製,10進製的轉換.

編譯器在printf中看到%會認為和後面組成 輸出格式, 那就有個問題,我就想輸出%d怎麼辦?

#include

int main()

signed int i = -1;

signed int j =0xffffffff;

printf("i is %d,%x\n",i,i);

printf("j is%d,%x\n",j,j);

printf("%%d");

return 0;

還有我一直認為-1是1000 0000其實是1111 1111,因為-1是負數的最大。

問題18輸出單個字元,我必須用printf(「%c」,c);嗎?

不必,可以下列**putchar

#include

int main()

char c='bc1';//此處int截斷為char

char d='b';

putchar(c);

putchar('\n');

putchar(d);

return 0;

}問題19scanf語句呼叫後,我不按回車,是否可以無窮盡的輸入字元?

顯然是不會的,否則和永動機沒區別了,實際上使用者利用鍵盤輸入時,輸入的字元會依次被送到緩衝區中,在此處等待的輸入函式只有在使用者輸入了回車時,才會去緩衝區中取字元。接下來的輸入函式也是先去緩衝區中檢視當前是否存在字元。如果存在,則會取出字元;如果不存在,則會中斷,提示使用者輸入

所以下面的**才會有不合理的表現,加上fflush(stdin)後,第二個scanf顯然在緩衝區查到不存在字元,因此中斷,提示使用者輸入。一般緩衝區大小為4k

我們敲入的回車鍵也是作為乙個字元送到緩衝區的。也被看成乙個字元,和字元1沒有什麼區別,只是作為字元輸入的結束符,當輸完回車後,則所有輸入的字元包括回車字元,一起被送入緩衝區,並執行此處等待的輸入函式。

#include

int main()

char a,b;

printf("pleaseinput a and b as the format: a=123\n");

scanf("a=%c",&a);

//fflush(stdin);

scanf("b=%c",&b);

printf("a=%c,b=%c",a,b);

return 0;

}問題20:運算子的優先順序是什麼?

想到最基礎的運算子+-*/%,需要2個運算元,叫做雙目運算子;

相應還有單目的,三目的;

單目的有: 自減,自加;* & !還有 (int) (double)型別轉換,還有乙個是sizeof

三目的有:?:, 常用在a>=b?a:b

還有移位,邏輯,關係,賦值運算子。 

速記如下: 單目的肯定高了;

處長想當局長了(移位運算子<<>>),於是去找關係跑官(< ><= >= == !=),這種思維很符合現代中國人的邏輯(&& ||), 但是局長推託說不符合條件(?:)不能安排,給你個副局長乾乾(副職->賦值= += *=)

移位》關係》邏輯》條件》賦值

C語言自問自答

windows系統下,最好如何配置環境?notepad tdm gcc,powershell來進行!scanf函式的返回值,和不符合格式如何返回?1 include2 void main 3 輸入 1 2 3 返回1,2,3,3 輸入 1 a 3 返回1,1,0,1 其中,x為scanf的返回值,i...

前端知識自問自答

1.什麼是rfcs 並非所有的rfc文件都是網際網路標準,只有很少的rfc文件最後變成了網際網路標準。2.vue的雙向繫結的原理是什麼?vue.js是採用資料劫持結合發布者 訂閱者模式的方式,通過es5提供的object.defineproperty 方法來劫持 監視洛個屬性的setter,gett...

spark 機制原理自問自答

本文主要收錄spark學習和工作中思考的問題。1 當spark task failed,什麼情況下task重計算,什麼情況下stage重計算?答 如果task失敗是因為shuffle output files lost,則dagscheduler會對stage重提交計算 如果不是因為shuffle ...