㈠ 華為c語言上機試題

#include <stdio.h>
#include <assert.h>

void take_num(const char *strIn, int *n, unsigned int *outArray)
{
const char * p = strIn;
int next = 0;

*n = 0;
outArray[0] = 0;
assert(p && n && outArray);

for (p = strIn;*p;p++) {
(('0'<=*p)&&(*p<='9')) {
outArray[*n] = (outArray[*n] * 10)+((*p) - '0');
next = 1; /*後面還有*/
} else {
if (next == 1) {
(*n)++;
}
next = 0;
}
}
}

void max_prefix_match(const char *ip_addr, const char *net_addr_array[], int *n)
{
int ip,tar_net,tar_mask;/*ip地址*/
int ip_it[4],net_it[4],mask_it[4];
char * p;
int index,max_index,cur_bits,max_bits = 0,bit;

*n = -1;
sscanf(ip_addr,"%d.%d.%d.%d",&ip_it[0],&ip_it[1],&ip_it[2],&ip_it[3]);

ip = ((ip_it[0]<<24)+(ip_it[1]<<16)+(ip_it[2]<< 8)+ip_it[3]);
for (index = 0;net_addr_array[index][0] != '\0';index++) {
/*獲取網路號和掩碼*/
p = net_addr_array[index];

sscanf(p,"%d.%d.%d.%d/%d.%d.%d.%d",
&net_it[0],&net_it[1],&net_it[2],&net_it[3],
&mask_it[0],&mask_it[1],&mask_it[2],&mask_it[3]);

tar_mask = ((mask_it[0]<<24)+(mask_it[1]<<16)+(mask_it[2]<< 8)+mask_it[3]);
tar_net = ((net_it[0]<<24)+(net_it[1]<<16)+(net_it[2]<< 8)+net_it[3]);

if (((tar_mask) & (ip)) == (tar_net)) {
cur_bits = 0;
/*計算1的個數*/
for (bit = 0;bit < sizeof(tar_mask) * 8;bit++) {
cur_bits += tar_mask&1;
tar_mask >>= 1;
}

if (cur_bits > max_bits) {
max_bits = cur_bits;
max_index = index;
}
}
}
if (max_bits != 0) {
*n = max_index;
}
}

int main()
{
int i, n,arrayOut[100] = {0};
char *strIn = "ab00cd+123fght456-25 3.005fgh";
char *ip_addr = "192.168.1.100 ";
char *net_addr_array[1024] = {
"192.168.1.128/255.255.255.192",
"192.168.1.0/255.255.255.0",
"192.168.1.64/255.255.255.192",
"0.0.0.0/0.0.0.0",
""
};

take_num(strIn,&n,arrayOut);
printf("<1>:input:%s\noutput: [%d]\n",strIn,n);
for (i = 0;i < n;i++) {
printf("%d\n",arrayOut[i]);
}

max_prefix_match(ip_addr,net_addr_array,&n);

if (n != -1) {
printf("<2>max:[%d] %s",n,net_addr_array[n]);
}

return 0;
}

㈡ 華為面試c語言一般都是哪些方面

具體看來你的職位了
不同職位 面試源C語言上 肯定不一樣。
如果是做上層的 那麼 QT MFC 或者C++相關的 問的會多一些
如果是做底層的 那麼與硬體相關的 會問的多

不管什麼職位,數據結構 基本演算法什麼的 必須有
難易程度 一樣是根據職位來的。

㈢ 華為C語言字元串試題

1、在c語言中存儲一個字元串,一般有兩種方法,一種是字元指針,一種是使用字元數組。2、例如:
const char *str = "hello"; //使用字元串指針
const char str[] = "hello"; //使用字元數組
3、如果保存的字元串,需要修改。一般使用字元數組。
例如:
char path[256] = "c:\\windows\\";
strcat(path, "system32");

㈣ 高分跪求 華為 C語言面試題

華為面試流程、題目及工資水平- -
Tag: 華為
華為面試流程一共5輪
首先資格考試和面試(相應職位的資深工程師主持);
其次應聘職位的部門付經理面試
再次應聘職位的部門付經理面試
再次人事面試
最後是付總級的面試。

常問問題:

Q1:請你分別劃劃OSI的七層網路結構圖,和TCP/IP的五層結構圖?

Q2:請你詳細的解釋一下IP協議的定義,在哪個層上面,主要有什麼作用? TCP與UDP呢?

Q3:請問交換機和路由器分別的實現原理是什麼?分別在哪個層次上面實現的?

Q4:請問C++的類和C裡面的struct有什麼區別?

Q5:請講一講析構函數和虛函數的用法和作用?

Q6:全局變數和局部變數有什麼區別?實怎麼實現的?操作系統和編譯器是怎麼知道的?

Q7:一些寄存器的題目,主要是定址和內存管理等一些知識。

Q8:8086是多少位的系統?在數據匯流排上是怎麼實現的?

測試題:

1、由於你是新員工,沒有公配手機時,當你在現場遇到緊急事故時,你會()向公司求助
A、打用戶機房內的電話
B、借用戶手機
C、拔110
D、拔200或300
E、立即打車回辦事處

(答案:D,答CE者立即辭退,按照公司規定,不能隨便使用用戶的電話,以提高公司形象)

2、工程師A某周日晚正在家裡看電視,突然手機響了,電信局運維員工突然
打電話過來,小A接起電話,用戶聲音很急迫,說:「不好了,癱了,你快來處理」。
請問這里「癱了」最有可能是什麼意思()
A、設備漏電將維護人員電癱了
B、設備支架不夠結實,被壓癱了
C、設備壞了,將維護人員嚇癱了
D、設備壞了,大面積業務中斷了

(答案:D,答錯者,按不合格處理)

工資水平:
本科3500+500+1000 有經驗再加500
碩士4000+500+1000 有經驗再加500

㈤ 華為面試c語言一般都是哪些方面

華為工作壓力大了。。。

㈥ 華為C語言面試題求解

第一行,定來義數組arr,元素共八個
第二行源,定義指針p指向arr數組
此時的*p還是等於arr數組的第0個元素,也就是1
第三行,p++里的++是最後才運算,所以先執行*p+=123,也就是arr的第0個元素被賦值為123
此時arr變成{123,2,3,4,5,6,7,8} ,然後是p++,此時*p已經是等於arr的第1個元素了,也就是2
第四行,在執行printf時,括弧里的參數是從右往左的順序進行讀取的,也就是說先執行 *(++p),也就是p先加一再指針,指向的是arr第2個元素3,然後在執行*p,還是3
最後顯示的內容就是
3,3
press any key to continue

㈦ 求華為筆試題答案:寫一個c語言程序使系統崩潰。

辦得到 但是要在visual C++6.0下
目前很多地方都轉載著利用9行代碼史windows崩潰的文章,不過我發現沒有關於為什麼會使windows崩潰的分析。我先把原文給大家看看。然後把具體的細節說一下。
微軟一直聲稱Windows XP多麼多麼穩定可靠,但日前一位名為Masaru Tsuchiyama的外國編程愛好者刊出了一小段C語言代碼。這一隻有9行的小程序如果在Windows XP/2000下運行,則可導致系統完全崩潰,並重新啟動。但此程序對其他版本的Windows沒有任何影響。這一產生無限循環輸出的小程序的代碼如下:
#include
int main( void )
{
for(;{
printf( "hung up\t\t\b\b\b\b\b\b" );
print("hung up\t\t\b\b\b\b\b\b";
}
return 0;
}
如果去掉Print語句,此程序還會導致NT 4.0系統出現藍屏錯誤。
但願微軟趕快修補這一漏洞。同時提醒大家,此代碼只可用於研究,不得用於任何非法勾當。
如果去掉Print語句,此程序還會導致NT 4.0系統出現藍屏錯誤。以上遍上網上紛紛轉載的原文。

關於為什麼會導致錯誤,就在看下面的分析吧。
\b是退格
代碼是用退格符把console里的游標退成null,
然後顯示任一字元(除\t),即崩潰.
但是一般情況\b是不能退出規定的區域的,
而如\b的前一個字元是\t則可以退出規定的區域(bug?).
雙擊運行時,系統將新建一個console,所以我們的顯示在console
的左上角,我們只需兩個\b就可退出屏幕(第一個吃掉\t).
原因是win32子系統意外中止導致系統崩潰.smss是windows系統建立的第一個用戶進程,他的工作之一是建立csrss和winlogon進程,然後一直等待這兩個進程的句柄,如果這兩個進程意外中止,
smss 將導致系統崩潰.csrss進程就是專門負責所有win32進程和系統進行通信的進程.所有win32進程的系統調用都會由csrss幫你完成,但是這樣做因為需要進程切換所以效率太低.所以在windowsNT從3.51升級到4.0時將許多部分從用戶態移入內核態,win32進程的系統調用將直接進行以減少進程切換時間.但是仍有少量系統調用需要csrss進程完成,據我所知createprocess
是這樣的函數,所有console上的顯示是這樣的函數(還有其他的).
當我們調用printf("\t\b\ba")最終將調用WriteFile API.
WriteFile((HANDLE)7,"\t\b\ba",NULL,NULL)等同於
printf("\t\b\ba"),7是console標准輸入的句柄.
WriteFile判斷句柄類型,如是文件句柄將調用ntdll.dll中的
NtWriteFile函數.如是console句柄將調用WriteConsoleA函數.
WriteConsoleA函數將調用ntdll.dll中的csrClientCallServer
函數通知csrss進程,然後調用NtRequestWaitReplyPort等待結果.
估計是csrss進程在處理這個請求過程中出錯了.

㈧ 用c語言實現排列組合問題(華為軟體面試試題之一)

/* 演算法 */
// 從剩餘的nM個籃子里空出nX = m*n - x;個球
int GetBall(int nX, int nM, int n) {
  int nA;
  int nS = 0;
/* 如果這次情況里確定從一個籃子里空出球 */
  // 如果nM等於1 返回 1;
  if (nX <= n) {
/* 最少從一個籃子里拿走,最多必須從 nM 與 n 中 較少個數的籃子里拿走 */
    // 當nA從 1 增加到 nX,循環執行下行語句
      nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);
    // 返回 nS;
  } else if (nX > n) {
/* 1. 知道剩下的籃子數目nM,2. 可以保證nX-nA <= nM*n */
    // 當nA從 n 減少到 nX-n*nM,循環執行下行語句
      nS += GetBall(nA,1,n) + GetBall(nX-nA,nM-1,n);
    // 返回 nS;
  }
}

int main() {
  int m,n,x;
  m = 5; n = 6; x = 22;
  printf("%d\n",GetBall(m*n-x, m, n));
  return 0;
}

㈨ C語言面試題

關注一下

㈩ 請教華為的C語言筆試題:int (*ptr) (),則一維數組的名字是ptr

不存在一般的問題。ptr就是一個函數指針。
它可以指向任意類似如下的函數;
int fname(//任意參數)//fname任意。