迎戰校招訓練題

一、雙空

編譯器可以根據硬件特性選擇合適的類型長度,但要遵循如下限制:short與int類型至少為___C___位,long至少為__D____位,并且short類型不長于int類型,int類型不得長于long類型。

A. 4 ? ?B.8 ?C.16 D. 32 E. 64

二、

如下結構體在64位機器上的大小為__D_字節。

struct s1
{char a;union{short b;char c:2,d:1;};int *e;
};
A.4 B. 11 C. 13 D. 16 E. 18
解析:這里考了struct的字節問題,需要考慮對齊。并且union 的字節取成員變量的最大字節,即2.a是一個指針,在64位系統下是8字節,所以考慮上對齊為16字節。

三、

以下程序輸出結果是_C_____

#include <stdio.h>void main()
{int a = 1, b = 1;a+++b;printf("a=%d,b=%d", a, b);
}
A.1,1 ? ?B.1,2 ? ? ?C.2,1 ? ? ?D.2,2
解析:

a+++b=a++ + b=(a++)+b

四、

以下程序輸出的是__D_____

#include <stdio.h>void main()
{int a = 5;int b;b = ++a;printf("a=%d,b=%d", a, b);
}
A.5,5 ? ? ?B.5,6 ? ? ? ?C.6,5 ? ? ? D.6,6
五、

請問以下程序輸出結果是:____B_____

#include<iostream>
using namespace std;
int main () 
{int a[][3]={{1,2,3},{4,5,0}},(*pa)[3],i;
pa=a;
for(int i=0;i<3;i++)
{if (i<2){pa[1][i]=pa[1][i]-1;}else{pa[1][i]=1;}}
printf("%d\n",a[0][1]+a[1][1]+a[1][2]);}
A.6 ? ? ?B.7 ? ? ? ? C.8 ? ? ? ? D.9 ? ? ? ? E.10 ? ? ? ? ? ? F.以上答案不對
解析:

這里的 int?(*pa)[3],實際上定義了一個指向由三個元素組成的一維數組,令pa=a,所以pa完全代替了a,所以后面的賦值,也就是對a的賦值,因此答案是B
六、

若有定義:int A[3][4];能表示數組元素A[1][1]的是____B_____

A. (A[1]+1) ? ? B.*(&A[1][1]) ? ? ?C.(*(A+1)[1]) ? ? ? D.*(A+5)

解析:

A.?(A[1]+1) 表示A[1][1]的地址,B.正確 C.正確的分解順序是(A+1)[1]=*(A+1+1)=*(A+2):表示第二行第0列的首地址,然后再加上*,就表示A[2][0]. ? D.越界

注意:[ ]的優先級優于*或者&

七、

(多選)

定義一個函數指針變量pfun,使下面的賦值語句沒有編譯警告,且無編譯錯誤:

int test(void)
{return 0;
}
pfun=test;

請選擇:_____A, B____

A. int (*pfun)(void);

B.typedef ?int(*PFUN)(void);

PFUN pfun;

C. int* (pfun)(void);

D.int *(*pfun)(void);

解析;本題考了函數指針,其中A是常規的做法,B、typedef的典型用法,typedef有兩種用法,一種是創建別名,另一種是掩飾復合類型,如數組和指針。

例如,你不用像下面這樣重復定義有 81 個字符元素的數組:
char line[81];
? ? ? ?char text[81];
只需這樣定義,Line類型即代表了具有81個元素的字符數組,使用方法如下:
    typedef char Line[81];Line text,line;getline(text);
或者如上面的題中的用法。
八、

定義變量a,包含10個函數指針的數組,函數帶一個整型變量,返回值為整型:___C_____

A. int a[10]() ? ?B. (int*) a[10] ?C.int (*a[10])() ?D.int *(a()[10])
九、

已知

	struct point{int a;int *b;	}p;p.a=300;p.b=(int*)500;
則 p.a+p.b的值是_B____

A.800 ? B.1700 ?C.2300 D.1100?
解析;

p.b=(int*)500;將500轉化為指針,實際上就是pb取了500的八進制數,一般地址取十六進制(用printf("%X",p.b)輸出)。然后p.a+p.b實際上就是將p.b的地址往后移了300*4=1200字節,(int為4個字節)所以實際上等于500+300*4=1700

參考:

1.?為什么整數可以轉換為指針

2.?int *p=(int *)100; 數字轉換成int類型的指針?

3.c語言 一個指針值加上一個整型值是什么意思?

十、

(多選) 以下程序輸出__A,B_____
? ? ?printf("%d",55^0xAA);

A. 157 ?B.0x9D ? C.127 D.128

解析: ?55(二進制):110111 ?0xAA(二進制):10101010 二者取異或運算得:10011101------>十進制(157),十六進制(0x9D)

十一、

? ?以下程序輸出的是_____C_____

        int a,b;a=1;b=32;printf("%d,%d\n",a<<b,1<<32);

A.0,0 ? B.0,1 ? ? ?C.1,0 ? ?D.1,1

?解析; ? 左移或者右移把握一個標準,就是移位運算時,byte、short和char類型移位后的結果會變成int類型,對于byte、short、char和int進行移位時,規定實際移動的次數是移動次數除以32的余數,也就是移位33次和移位1次得到的結果相同。移動long型的數值時,規定實際移動的次數是移動次數和64的余數,也就是移動66次和移動2次得到的結果相同。

而且左移時高位移出(舍棄),低位的空位補零。右移時,若是負數,低位舍棄,高位補1,;若是正數,低位舍棄,高位補0

例如:

int i = 1, j = 0x80000000; //設int為32位i = i << 33; // 33 % 32 = 1 左移1位,i變成2j = j << 33; // 33 % 32 = 1 左移1位,j變成0,最高位被丟棄int k= 0x80000000; 即二進制為100000000 00000000 00000000 00000000k = k>> 1; //k的值不會變成0x40000000,而會變成0xc0000000,即二進制為11000000 00000000 00000000 000000000

這里a=1,a<<32 //32%32=0,未移位,故a=1, ?但是1<<32,由于越界,直接舍棄高位,所以答案為0,總之記住若是int類型,移動的次數為移動次數與32/64的余數,若是一個數常數,則移位超過32/64,直接舍棄高位,為0


十二、

如果數組a的首地址為65072,每個整數為16位的,則下列程序打印輸出的是______C_______

#include <stdio.h>
int main()
{int a[3][4]={1,3,5,7,9,7,5,3,1,3,5,7};printf("%u\n",a+1);return 0;
}
A. 65088 ? ?B. 65120 ? ?C. 65080 ? D.65096 E.以上答案都不對
解析:

? ? ? ?a的首地址:65072,a+1指向a[1][0],離首地址相差4個int,由于每個整數為16位,也就是2字節,所以共相差8個字節,因此輸出65072+8=65080

十三、

如果數組a的首地址為50152,則下列程序打印輸出的是______B_______

#include <stdio.h>
int main()
{int a[3][4]={1,3,5,7,9,7,5,3,1,3,5,7};printf("%u\n",&a+1);return 0;
}

A. 50168 ? ?B.50200 ? ? C.50153 ? ? D.50156 ? ??E.以上答案都不對

解析:

? ?注意到a為二維數組的首地址,指向第0行,&a+1指向二維數組的最后一個元素的下一個元素,因此:50152+12*4=50200

十四、

請問以下程序輸出結果是_____C_______

?

        int a[3][3]={1,2,3,4,5,6,7,8,9};int (*ptr)[3]=a;printf("%d",(*(ptr+1))[2]);
A.4 ? ? B.5 ? ? C.6 ? ? D.7

解析:ptr=a;所以ptr指向a數組的第0行,然后再看(*(ptr+1))[2]);,看的順序是:ptr+1---->*(ptr+1)------->(*(ptr+1))[2]),依次指向: 1行首地址;1行0列首地址;1行2列元素,即a[1][2],也就是6

十五、多選題

HASH值計算公式是(MAC[1]^MAC[2]^MAC[3]^MAC[4])%8

下面4個MAC地址,哪些是不會發生hash沖突的___??______

A. 00 d0 f8 01 02 03

B.00 1a a9 7f 78 58

C. 00 00 5e 00 01 cc

D.02 03 05 06 aa fe

解析:?MAC地址是6字節十六進制數組成的。

A:?d0 ^ f8 ^ 01 ^ 02=11010000 ^?11111000 ^00000001^00000010=00101011=43(10進制)

B:1a ^ a9 ^ 7f ?^78=00011010 ^10101001 ^01111111 ^01111000=10110100=180(10進制)

C:?00^ 5e ^ 00^ 01=95(10進制)

D:03^ 05 ^06^ aa=170(10進制)

43%8=3,180%8=4 ,95%8=7 ,170%8=2 好像都不會沖突啊,怎么做?

十六、

請補齊以下程序____??______

? ? ??

int setx_r(int len)
{Lock(cb);g_ptx_ptr->length=len;g_ptx_ptr->str=kmalloc(d_len);if (g_ptx_ptr->str==null||g_ptx_ptr!=OK){_________________;return ERR;}Unlock(ch);Return Success;
}
A. Lock(cb) B.Unlock(cb) C. break D.不必填寫 E。以上答案都不對

十七、

以下程序輸出是___D_____

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Max 10
char* test()
{
char buf[Max];
memset(buf,0,Max);
sprintf(buf,"%s","001");
sprintf(buf,"%s%s",buf,buf);
return buf;}
void main()
{printf("%s",test());}
A.001 ? ?B.001001 ?C.001001001 ?D.不確定或者運行錯誤 E.以上答案都不對

答案: D

解析:由于char* test(),返回的是局部指針,所以一旦函數調用結束,buf分配的內存釋放,所以返回的是隨機的字符。

十八、

請問以下程序輸出結果是______F____

int i,j;
int array[10];
int *ap=array+5;
for(i=0;i<10;i++)
{array[i]=i;
}
i=3;j=5;
printf("i[array]+j=%d\n",i[array]+j);
A.3 ? B.4 ?C. 5 ?D.6 E.7 ?F.8 G.9 ?H.以上答案都不對
解析: 上面代碼起初我以為是錯的,后來實際編譯一下,可以通過,i[array]相當于*(array+i),也就是array[i],所以這里相當于array[3]+5=3+5=8

十九、

下面程序片段的運算結果為____C_______

int main () 
{
int x=2016,y=2017,z=2018;
z+=x+++y++;
printf("%d\n",z);}
A.4033 B.4034 C.6051 D.6052
解析: z+=x+++y++,由于++的優先級優于+,故左式相當于z+=(x++)+(y++);x++,y++,都是先使用后自增,故z=2016+2017+2018=6051

二十、

下面程序的輸出結果為_______C______

#include<iostream>
#include<math.h> //包含了<string.h>
using namespace std;char buf[256];
int main () 
{
sprintf(buf+sprintf(buf,"%s","abc\0%de"),"%s","fgh%%di");
printf(buf,112);
return 0;}
A.abc ? ?B.fgh ? ? C.abcfgh%di ? ? ?D.fgh%de ? ? ?E.abc%de

二十一、下面的輸出結果是____8_____

	char* s = "\\tmp012\012";cout << strlen(s) << endl;
解析: 最初拿到這道題,我的答案是7,原因是'\\'使用了轉義字符表達‘\’,后面還有‘\0’,strlen遇到'\0'就停止計數,所以共有'\\'+'t'+'m'+'p'+'0'+'1'+'2'共7個字符。其實錯了,'\012',實際上是用八進制表示的字符'\n',表示換行。所以共有8個字符。實際上,‘\0’是不會直接出現在字符串中,編譯器默認字符串的末尾為‘\0’。在C++中,除了用八進制表示字符,還可以使用'\x**'即一個十六進制表示一個字符,或者使用ASCII值直接表示。

二十二、下面的輸出結果是_____53_____

int a[5] = { 9876, 0123, 4567, 2345, 8901 };printf("%x\n", *(a + 1));
解析: *(a+1)=a[1]=0123,輸出%x,實際上輸出16進制。而0123是8進制,轉化為16進制為53.
二十三、下面的輸出結果是_____0____

	int a = -6;unsigned int b = 6;cout << a + b << endl;

解析:unsigned int 與int相加時會轉化為int,再加

二十四、在32位系統下,下面的輸出結果是__64 ,16, 16, 4_______

	int a[4][4];cout << sizeof(a) << endl;cout << sizeof(a[0]) << endl;cout << sizeof(*a) << endl;cout << sizeof(*a+1) << endl;
解析:a表示二維數組,故字節為4*4*4=64,a[0]或者*a代表0行一維數組,故字節為4*4=16,而*a+1表示0行1列元素的地址,是一個指針,所以字節為4




本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/259154.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/259154.shtml
英文地址,請注明出處:http://en.pswp.cn/news/259154.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【ASP.NET Web API2】初識Web API

Web Api 是什么&#xff1f; MSDN&#xff1a;ASP.NET Web API 是一種框架&#xff0c;用于輕松構建可以訪問多種客戶端&#xff08;包括瀏覽器和移動設備&#xff09;的 HTTP 服務 百度百科&#xff1a;Web API是網絡應用程序接口。 個人理解&#xff1a;Web API 是提供給多種…

三星s8怎么分屏操作_三星手機該怎么玩?了解完這幾點用機技巧,可以輕車熟路了!...

其實對于三星這個手機品牌&#xff0c;我還是很佩服的。雖然近些年來&#xff0c;三星在國內的市場份額日漸變少&#xff0c;但是在國內的影響力依然尚存。畢竟三星手機在某些方面還是很有優勢的&#xff0c;特別是旗艦系列機型深受消費者喜愛。接下來&#xff0c;筆者就跟大家…

關于條件編譯的問題

這兩天來忙活ucos-II在PIC18fxxx系列上的移植。在編譯的時候老出現變量被多重定義的錯誤。花費了一天的功夫才成功編譯通過&#xff0c;錯誤何在&#xff1f;&#xff1f;就是因為沒有搞明白條件編譯的原理&#xff0c;二是對mcc18編譯器的特點無知。下面學習條件編譯方面的知識…

二維數組的指針復習

最近一次的考試都是指針&#xff0c;真是給我深深上了一課&#xff0c;所以我特此復習一下指針方面的知識。二維數組的指針 int a[3][4] {{1,3,5,7},{9,11,13,15},{17,19,21,23}}; 下面通過一個表來做詳細的說明&#xff1a; 訪問二維數組&#xff0c;有兩種方法&#xff0c;一…

稱重的問題

給你8顆小石頭和一架托盤天平。有7顆石頭的重量是一樣的&#xff0c;另外一顆比其他石頭略重&#xff1b;除此之外&#xff0c;這些石頭完全沒有分別。你不得假設那顆重頭到底比其他的石頭重了多少。請問&#xff1a;最少要稱量幾次&#xff0c;你才能把那顆較重的石頭找出來&a…

TIF圖像文件的讀取(c++代碼)

一 TIF圖像介紹 TIFF是最復雜的一種位圖文件格式。TIFF是基于標記的文件格式&#xff0c;它廣泛地應用于對圖像質量要求較高的圖像的存儲與轉換。由于它的結構靈活和包容性大&#xff0c;它已成為圖像文件格式的一種標準&#xff0c;絕大多數圖像系統都支持這種格式。 TIFF 是一…

g menu i meun_長沙話讀“這里”,到底是閣(gó)里還是該(gái)里

“帶籠子”、“打抱秋”……這些地道的長沙話&#xff0c;長沙人&#xff0c;你有多久沒聽過了&#xff1f;/ 長沙人&#xff0c;你還記得長沙話嗎 / “去了很多地方&#xff0c;最后還是回到了長沙”“我聽見了一句長沙話&#xff0c;就想回長沙了。”逗霸妹聽過很多人回長沙的…

git使用---工作區和暫存區

轉載于:https://www.cnblogs.com/momo-unique/articles/4380551.html

UC/OS-II的學習

粗略的的看了邵貝貝老師的那本書&#xff0c;感覺有點眉目。UC/OS-II的全局變量繁多&#xff0c;剛接觸的時候容易弄混淆&#xff0c;現在總結下&#xff1a; OSRunning&#xff1a; 用于標識多任務環境是否已經開啟運行&#xff0c;在OSStart()函數里啟動任務后就置為True。 …

偶數哥德巴赫猜想

已知不小于6的偶數都可以分成兩個素數之和。請編寫6到100000的所有偶數的分解&#xff0c;若有一個偶數可以分解成多個素數之和&#xff0c;只需寫出一種即可。 #include <iostream> #include <algorithm> using namespace std;bool isprime(int n)//判斷素數{int …

[20170420]表達式加0或者減0不一樣.txt

[20170420]表達式加0或者減0不一樣.txt --//oracle 有時候避免某個索引采用字段0或者-0的方式&#xff0c;不使用索引&#xff0c;但是兩者存在一點點區別&#xff0c;通過例子說明。 1.環境&#xff1a; SCOTTbook> &r/ver1 PORT_STRING VERSION …

MAPLAP開發環境中release模式和debug模式燒寫.hex文件的不同之處

昨天看了齊工的報告才知道release模式和debug模式燒寫.hex文件的不同。 三&#xff1a;問題分析 1. PIC系列的仿真器和集成開發環境的情況&#xff1a; Release模式和Debug模式是有區別的&#xff1b;Release模式是只把代碼燒錄到單片機的flash區內&#xff0c;上電執行&am…

JavaWeb -- Session實例 -- 自動登錄 和 防止表單重復提交(令牌產生器) MD5碼

1、 自動登錄 http://blog.csdn.net/xj626852095/article/details/16825659 2. 防止表單重復提交 表單Servlet //負責產生表單 public class FormServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletEx…

電腦常見故障處理_彩超常見故障及維修

彩超是醫學檢測手段中重要的環節之一&#xff0c;是對產婦以及對病人進行內部組織和結構觀察的重要方式之一&#xff0c;彩超應用得當可以及早的診斷出病人的疾病&#xff0c;為患者解除疾病的困擾。彩超設備是一種極為先進的診斷系統&#xff0c;一般彩超系統包括以下幾個部分…

微軟歷史最高市值是多少?

有人說微軟在1999 年 12 月達到股價歷史最高點 $58.38并不準確。我1999年12月22日增加微軟&#xff0c;公司依照1999年12月27日的價格&#xff08;119.125&#xff0c;拆股后變為59.5625&#xff09;給了我一筆期權&#xff0c;這個價格&#xff0c;成為微軟股價空前絕后最高點…

京東2016校招編程題

記得有一個大題&#xff0c;說的是給定一個n*n的矩陣&#xff0c;要求從1開始填充矩陣&#xff0c;最后的矩陣是蛇形的。即如下&#xff1a; n3, 7 8 1 6 9 2 5 4 3 n4, 10 11 12 1 9 16 13 2 8 15 14 3 7 6 5 4 給出代碼&#xff1a; #incl…

leetcode21

/*** Definition for singly-linked list.* public class ListNode {* public int val;* public ListNode next;* public ListNode(int x) { val x; }* }*/ public class Solution {public ListNode MergeTwoLists(ListNode l1, ListNode l2) {//遞歸實現鏈表合并…

springmvc02

1&#xff0c;創建實體類對象User 注意要導入 bean-validator.jar 包 package com.yangw.springmvc.entity;import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.NotEmpty; import org.hibernate.validator.constraints.Range; im…

用基本信號畫出如下的信號_股市入門基本知識丨下跌時期可以抄底的安全信號有哪些...

點擊藍色字體 關注我們 帶來更多精彩股票市場中的秘籍其實就是“低買高賣”&#xff0c;不過我們不能在大盤一開始下跌的時候就進行買入&#xff0c;因為不清楚下跌的時間&#xff0c;太早介入&#xff0c;只有在反彈幅度超出我們介入的點的時候才可以進行高賣。那么什么時候才…

Flume數據傳輸事務分析[轉]

本文基于ThriftSource,MemoryChannel,HdfsSink三個組件&#xff0c;對Flume數據傳輸的事務進行分析&#xff0c;如果使用的是其他組件&#xff0c;Flume事務具體的處理方式將會不同。一般情況下&#xff0c;用MemoryChannel就好了&#xff0c;我們公司用的就是這個&#xff0c;…