1、一般賦值語句的概念和方法。求下程式輸出:
#include
int main()
這裡主要是想總結:按位與和邏輯與的區別。
答案:x = 4
x = 1
x = 4
x = 1
x = 4
x = 1
2、i++和++i的區別 閱讀**寫輸出
#include
int main()
++i是先自加,再用,i++先用再自加。++i效率較i++高一些。
答案:i = 9
i = 8
i = 8
i = 9
i = -8
i = -9
3、有符號變數與無符號變數的值的轉換 看程式寫輸出
#include
char getchar(int x, int y)
7 + -7
7 0000 0111
-7 1111 1001
1 0000 0000
7 0000 0111
-8 1111 1000
1111 1111
8 0000 1000
int main()
先說明一下getchar函式,傳入兩個引數,將x轉化為無符號數在與y相加,結果與10比較,大於返1,否則返2。這裡要注意:表示式中存在無符號數和有符號數時,所有運算元轉化為無符號數。
7和4時,都是正數,相加11,返回1。7和3相加10,返回2。
7和-7時,以int兩個位元組舉例,有符號數負數是其相反數取補碼,最高位置一得到。-7在計算機中儲存:11111001,再將之以無符號數去看,這是乙個非常大的數,00000111+11111001 = 100000000,結果正好剛溢位,所以得到結果0,函式返回2。
7和-8時,-8在計算機中儲存:11111000,00000111+11111000 = 11111111,差1溢位,所以這是乙個非常大的乙個數字,明顯大於10,返回1。
答案:c1 = 1
c2 = 2
c3 = 2
c4 = 1
4、為什麼標準標頭檔案都有類似以下的結構?
#ifndef _head_h
#define _head_h
#ifdef _cplusplus
extern "c"
#endif
#endif /*_incvxworksh*/
**第1、2、10行的作用是防止該標頭檔案被重複引用。
**第3行作用是表示當前使用的是c++編譯器。
**第4~8行中的extern 「c」是c++編譯器提供的與c連線交換指定的符號,用來解決名字匹配問題。
5、#include 和#include 「head.h」有什麼區別?
<>表示這個檔案是乙個標準標頭檔案,查詢時,編譯器直接去預定義的目錄,可以在編譯器的設定裡面更改目錄。「」表示這個檔案是程式設計師自己寫的工程中的標頭檔案,查詢該檔案時,先從當前目錄查詢,然後到標準位置尋找。
6、c語言中main函式執行完後還執行其他語句嗎?
執行atexit函式
atexit函式的引數是乙個函式指標,指向乙個沒有引數也沒有返回值的函式。
int atexit(void(*) (void));
在乙個程式中最多可以用atexit註冊32個處理函式,這些函式的呼叫順序與其註冊順序相反,類似於先進後出的結構。
7、寫出**輸出結果
#include
#define sqr(x) (x*x)
(b+2*b+2) 3+2*3+2
int main()
這裡sqr(b+2)在編譯時,會轉化為(b+2*b+2),這樣最終得到結果11
8、巨集引數的連線 看**,寫輸出
#include
#define str(s) #s
#define cons(a, b) (int)(a##e##b)
int main()
使用#把巨集引數變為乙個字串,用##把兩個巨集引數貼合在一起。str(vck)實際輸出就是vck這個字串,cons(2,3)轉化為2e3,也就是2x10^3 = 2000。
答案:vck
2000
9、const使用時的注意點,指出下面程式中哪句話出現錯誤
#include
int main()
對於c語言中的const有一句秘訣記住它的特性:進水樓台先得月。意為最靠近const的變數的值是不能變的,一旦發生改變就會出現錯誤。
錯誤:第13行中,x的值不能發生改變,出錯。
第15行的做法是可以的,沒有錯誤,但是16行中取它的值來改變就是錯的,即m是可變的*m不可變。
第19行的做法可以,沒錯,但是18行的做法就是錯的,即n是不可變的,但是*n可變。
第21和22行都是錯的,*s和s都是不可變的。
10、使用sizeof計算普通變數所佔空間大小 計算結果:(假設32位win)
char str = "hello";
char *p = str;
int n = 10;
sizeof(str) = ____;
sizeof(p) = ____;
sizeof(n) = ____;
void func(char str[100]) char* str
void *p = malloc(100);
sizeof(p) = ____;
第四行,str測的是陣列佔的總記憶體大小,1x6 = 6;
第五行,p測的是乙個指標的大小,位址佔4個位元組,結果4
第六行,n測的是int型資料大小,和指標一樣,結果4
第九行,函式是位址傳遞,str測到的還是指標大小,結果4
第十二行,儘管十一行將p指向100位元組的堆記憶體,但是測的還是指標大小,結果4
一些面試小題目 12小球
現有12個小球,它們外形一模一樣,但其中乙個小球與其他11個小球的重量不相同 現有12個小球,它們外形一模一樣,但其中乙個小球與其他11個小球的重量不相同現在有個沒砝碼的天平,問怎樣在3次之內利用這個天平把小球找出來?分三組 每組四個,第一組編號1 4,第二組5 8,第三組9 12.第一次稱 天平左...
雜題 一些程式基礎的小題目
這些是以前面試過或者是看過的程式題目,現在先記下來,以後翻翻。1 十進位制數n轉二進位制 1 每次和1按位與 n 1 n 1 2 c 中用bitset bitsetbs n 2 n的二進位制有幾個1 count 0 while n n n 1 每次少乙個1 count 關於指標的題目。1 char ...
大一寒假acm訓練 小題目總結
include include include includeusing namespace std int t,vis 105 grid 105 105 arr 105 len 105 int bfs int index que.pop return sum int main if v int d...