#
面試必看(C/C++程序員應(yīng)聘常見(jiàn)面試題深入剖析(2))
3.內(nèi)功題
試題1:分別給出BOOL,int,float,指針變量 與“零值”比較的 if 語(yǔ)句(假設(shè)變量名為var)
解答:
BOOL型變量:if(!var)
int型變量:? ?if(var==0)
float型變量:
const float EPSINON = 0.00001;
if ((x >= - EPSINON) && (x <= EPSINON)
指針變量: if(var==NULL)
剖析:
考查對(duì)0值判斷的“內(nèi)功”,BOOL型變量的0判斷完全可以寫(xiě)成if(var==0),而int型變量也可以寫(xiě)成if(!var),指針變量的判斷也可以寫(xiě)成if(!var),上述寫(xiě)法雖然程序都能正確運(yùn)行,但是未能清晰地表達(dá)程序的意思。
一般的,如果想讓if判斷一個(gè)變量的“真”、“假”,應(yīng)直接使用if(var)、if(!var),表明其為“邏輯”判斷;如果用if判斷一個(gè)數(shù)值型變量(short、int、long等),應(yīng)該用if(var==0),表明是與0進(jìn)行“數(shù)值”上的比較;而判斷指針則適宜用if(var==NULL),這是一種很好的編程習(xí)慣。
浮點(diǎn)型變量并不精確,所以不可將float變量用“==”或“!=”與數(shù)字比較,應(yīng)該設(shè)法轉(zhuǎn)化成“>=”或“<=”形式。如果寫(xiě)成if (x == 0.0),則判為錯(cuò),得0分。
試題2:以下為Windows NT下的32位C++程序,請(qǐng)計(jì)算sizeof的值
void Func ( char str[100] )
{
? ???sizeof( str ) = ?
}
void *p = malloc( 100 );
sizeof ( p ) = ?
解答:
sizeof( str ) = 4
sizeof ( p ) = 4
剖析:
Func ( char str[100] )函數(shù)中數(shù)組名作為函數(shù)形參時(shí),在函數(shù)體內(nèi),數(shù)組名失去了本身的內(nèi)涵,僅僅只是一個(gè)指針;在失去其內(nèi)涵的同時(shí),它還失去了其常量特性,可以作自增、自減等操作,可以被修改。
數(shù)組名的本質(zhì)如下:
(1)數(shù)組名指代一種數(shù)據(jù)結(jié)構(gòu),這種數(shù)據(jù)結(jié)構(gòu)就是數(shù)組;
例如:
char str[10];
cout << sizeof(str) << endl;
? ?輸出結(jié)果為10,str指代數(shù)據(jù)結(jié)構(gòu)char[10]。
(2)數(shù)組名可以轉(zhuǎn)換為指向其指代實(shí)體的指針,而且是一個(gè)指針常量,不能作自增、自減等操作,不能被修改;
char str[10];
str++;? ?//編譯出錯(cuò),提示str不是左值
(3)數(shù)組名作為函數(shù)形參時(shí),淪為普通指針。
Windows NT 32位平臺(tái)下,指針的長(zhǎng)度(占用內(nèi)存的大小)為4字節(jié),故sizeof( str ) 、
sizeof ( p ) 都為4。
試題3:寫(xiě)一個(gè)“標(biāo)準(zhǔn)”宏MIN,這個(gè)宏輸入兩個(gè)參數(shù)并返回較小的一個(gè)。另外,當(dāng)你寫(xiě)下面的代碼時(shí)會(huì)發(fā)生什么事?
least = MIN(*p++, b);
解答:
#define MIN(A,B)? ? ((A) <=??(B) ? (A) : (B))
MIN(*p++, b)會(huì)產(chǎn)生宏的副作用
剖析:
這個(gè)面試題主要考查面試者對(duì)宏定義的使用,宏定義可以實(shí)現(xiàn)類(lèi)似于函數(shù)的功能,但是它終歸不是函數(shù),而宏定義中括弧中的“參數(shù)”也不是真的參數(shù),在宏展開(kāi)的時(shí)候?qū)Α皡?shù)”進(jìn)行的是一對(duì)一的替換。
程序員對(duì)宏定義的使用要非常小心,特別要注意兩個(gè)問(wèn)題:
(1)謹(jǐn)慎地將宏定義中的“參數(shù)”和整個(gè)宏用用括弧括起來(lái)。所以,嚴(yán)格地講,下述解答:
#define MIN(A,B)? ? (A) <=??(B) ? (A) : (B)
#define MIN(A,B)? ? (A <=??B ? A : B )
都應(yīng)判0分;
(2)防止宏的副作用。
宏定義#define MIN(A,B)? ?((A) <=??(B) ? (A) : (B))對(duì)MIN(*p++, b)的作用結(jié)果是:
((*p++) <=??(b) ? (*p++) : (*p++))
這個(gè)表達(dá)式會(huì)產(chǎn)生副作用,指針p會(huì)作三次++自增操作。
除此之外,另一個(gè)應(yīng)該判0分的解答是:
#define MIN(A,B)? ? ((A) <=??(B) ? (A) : (B));??
這個(gè)解答在宏定義的后面加“;”,顯示編寫(xiě)者對(duì)宏的概念模糊不清,只能被無(wú)情地判0分并被面試官淘汰。
試題4:為什么標(biāo)準(zhǔn)頭文件都有類(lèi)似以下的結(jié)構(gòu)?
? ?#ifndef __INCvxWorksh
? ?#define __INCvxWorksh
? ?#ifdef __cplusplus
? ?extern "C" {
? ?#endif
? ?/*...*/
? ?#ifdef __cplusplus
? ?}
? ?#endif
? ?#endif /* __INCvxWorksh */
? ?解答:
頭文件中的編譯宏
#ifndef __INCvxWorksh
#define __INCvxWorksh
#endif
的作用是防止被重復(fù)引用。
作為一種面向?qū)ο蟮恼Z(yǔ)言,C++支持函數(shù)重載,而過(guò)程式語(yǔ)言C則不支持。函數(shù)被C++編譯后在symbol庫(kù)中的名字與C語(yǔ)言的不同。例如,假設(shè)某個(gè)函數(shù)的原型為:
void foo(int x, int y);
該函數(shù)被C編譯器編譯后在symbol庫(kù)中的名字為_(kāi)foo,而C++編譯器則會(huì)產(chǎn)生像_foo_int_int之類(lèi)的名字。_foo_int_int這樣的名字包含了函數(shù)名和函數(shù)參數(shù)數(shù)量及類(lèi)型信息,C++就是考這種機(jī)制來(lái)實(shí)現(xiàn)函數(shù)重載的。
為了實(shí)現(xiàn)C和C++的混合編程,C++提供了C連接交換指定符號(hào)extern "C"來(lái)解決名字匹配問(wèn)題,函數(shù)聲明前加上extern "C"后,則編譯器就會(huì)按照C語(yǔ)言的方式將該函數(shù)編譯為_(kāi)foo,這樣C語(yǔ)言中就可以調(diào)用C++的函數(shù)了。
試題5:編寫(xiě)一個(gè)函數(shù),作用是把一個(gè)char組成的字符串循環(huán)右移n個(gè)。比如原來(lái)是“abcdefghi”如果n=2,移位后應(yīng)該是“hiabcdefgh”
函數(shù)頭是這樣的:
//pStr是指向以'\0'結(jié)尾的字符串的指針
//steps是要求移動(dòng)的n
void LoopMove ( char * pStr, int steps )
{
//請(qǐng)?zhí)畛?..
}
解答:
正確解答1:
void LoopMove ( char *pStr, int steps )
{
? ? int n = strlen( pStr ) - steps;
? ? char tmp[MAX_LEN];? ?
? ? strcpy ( tmp, pStr + n );
? ? strcpy ( tmp + steps, pStr);? ?
? ? *( tmp + strlen ( pStr ) ) = '\0';
? ? strcpy( pStr, tmp );
}
正確解答2:
void LoopMove ( char *pStr, int steps )
{
? ? int n = strlen( pStr ) - steps;
? ? char tmp[MAX_LEN];? ?
? ? memcpy( tmp, pStr + n, steps );? ?
? ? memcpy(pStr + steps, pStr, n );? ?
? ? memcpy(pStr, tmp, steps );? ?
}
剖析:
這個(gè)試題主要考查面試者對(duì)標(biāo)準(zhǔn)庫(kù)函數(shù)的熟練程度,在需要的時(shí)候引用庫(kù)函數(shù)可以很大程度上簡(jiǎn)化程序編寫(xiě)的工作量。
最頻繁被使用的庫(kù)函數(shù)包括:
(1)? ?? ? strcpy
(2)? ?? ? memcpy
(3)? ?? ? memset
試題7:編寫(xiě)類(lèi)String的構(gòu)造函數(shù)、析構(gòu)函數(shù)和賦值函數(shù),已知類(lèi)String的原型為:
class String
{? ?? ?
public:? ?? ?
??String(const char *str = NULL); // 普通構(gòu)造函數(shù)? ???
??String(const String &other); // 拷貝構(gòu)造函數(shù)? ?
??~ String(void); // 析構(gòu)函數(shù)??
??String & operate =(const String &other); // 賦值函數(shù)? ?? ?
private:? ?? ?
??char *m_data; // 用于保存字符串? ?? ?
};
解答:
//普通構(gòu)造函數(shù)
String::String(const char *str)
{
? ?? ? if(str==NULL)
? ?? ? {
? ?? ?? ?? ?? ?m_data = new char[1]; // 得分點(diǎn):對(duì)空字符串自動(dòng)申請(qǐng)存放結(jié)束標(biāo)志'\0'的空
? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? //加分點(diǎn):對(duì)m_data加NULL 判斷
? ?? ?? ?? ?? ?*m_data = '\0';
? ?? ? }? ???
? ?? ? else
? ?? ? {
? ?? ???int length = strlen(str);
? ?? ???m_data = new char[length+1]; // 若能加 NULL 判斷則更好
? ?? ???strcpy(m_data, str);
? ?? ? }
}
// String的析構(gòu)函數(shù)
String::~String(void)
{
? ?? ? delete [] m_data; // 或delete m_data;
}
//拷貝構(gòu)造函數(shù)
String::String(const String &other) // 得分點(diǎn):輸入?yún)?shù)為const型
{? ?? ?
? ?? ? int length = strlen(other.m_data);
? ?? ? m_data = new char[length+1]; //加分點(diǎn):對(duì)m_data加NULL 判斷
? ?? ? strcpy(m_data, other.m_data);? ???
}
//賦值函數(shù)
String & String::operate =(const String &other) // 得分點(diǎn):輸入?yún)?shù)為const型
{? ?? ?
? ?? ? if(this == &other)? ?? ?? ?? ?? ??? //得分點(diǎn):檢查自賦值
? ?? ?? ?? ?? ?return *this;? ?
? ?? ? delete [] m_data;? ?? ?? ??? //得分點(diǎn):釋放原有的內(nèi)存資源
? ?? ? int length = strlen( other.m_data );? ?? ?
? ?? ? m_data = new char[length+1]; //加分點(diǎn):對(duì)m_data加NULL 判斷
? ?? ? strcpy( m_data, other.m_data );? ?
? ?? ? return *this;? ? //得分點(diǎn):返回本對(duì)象的引用
}
剖析:
能夠準(zhǔn)確無(wú)誤地編寫(xiě)出String類(lèi)的構(gòu)造函數(shù)、拷貝構(gòu)造函數(shù)、賦值函數(shù)和析構(gòu)函數(shù)的面試者至少已經(jīng)具備了C++基本功的60%以上!
在這個(gè)類(lèi)中包括了指針類(lèi)成員變量m_data,當(dāng)類(lèi)中包括指針類(lèi)成員變量時(shí),一定要重載其拷貝構(gòu)造函數(shù)、賦值函數(shù)和析構(gòu)函數(shù),這既是對(duì)C++程序員的基本要求,也是《Effective C++》中特別強(qiáng)調(diào)的條款。
仔細(xì)學(xué)習(xí)這個(gè)類(lèi),特別注意加注釋的得分點(diǎn)和加分點(diǎn)的意義,這樣就具備了60%以上的C++基本功!
試題8:請(qǐng)說(shuō)出static和const關(guān)鍵字盡可能多的作用
解答:
static關(guān)鍵字至少有下列n個(gè)作用:
(1)函數(shù)體內(nèi)static變量的作用范圍為該函數(shù)體,不同于auto變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值;
(2)在模塊內(nèi)的static全局變量可以被模塊內(nèi)所用函數(shù)訪問(wèn),但不能被模塊外其它函數(shù)訪問(wèn);
(3)在模塊內(nèi)的static函數(shù)只可被這一模塊內(nèi)的其它函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明它的模塊內(nèi);
(4)在類(lèi)中的static成員變量屬于整個(gè)類(lèi)所擁有,對(duì)類(lèi)的所有對(duì)象只有一份拷貝;
(5)在類(lèi)中的static成員函數(shù)屬于整個(gè)類(lèi)所擁有,這個(gè)函數(shù)不接收this指針,因而只能訪問(wèn)類(lèi)的static成員變量。
const關(guān)鍵字至少有下列n個(gè)作用:
(1)欲阻止一個(gè)變量被改變,可以使用const關(guān)鍵字。在定義該const變量時(shí),通常需要對(duì)它進(jìn)行初始化,因?yàn)橐院缶蜎](méi)有機(jī)會(huì)再去改變它了;
(2)對(duì)指針來(lái)說(shuō),可以指定指針本身為const,也可以指定指針?biāo)傅臄?shù)據(jù)為const,或二者同時(shí)指定為const;
(3)在一個(gè)函數(shù)聲明中,const可以修飾形參,表明它是一個(gè)輸入?yún)?shù),在函數(shù)內(nèi)部不能改變其值;
(4)對(duì)于類(lèi)的成員函數(shù),若指定其為const類(lèi)型,則表明其是一個(gè)常函數(shù),不能修改類(lèi)的成員變量;
(5)對(duì)于類(lèi)的成員函數(shù),有時(shí)候必須指定其返回值為const類(lèi)型,以使得其返回值不為“左值”。例如:
const classA operator*(const classA& a1,const classA& a2);
operator*的返回結(jié)果必須是一個(gè)const對(duì)象。如果不是,這樣的變態(tài)代碼也不會(huì)編譯出錯(cuò):
classA a, b, c;
(a * b) = c; // 對(duì)a*b的結(jié)果賦值
操作(a * b) = c顯然不符合編程者的初衷,也沒(méi)有任何意義。
剖析:
驚訝嗎?小小的static和const居然有這么多功能,我們能回答幾個(gè)?如果只能回答1~2個(gè),那還真得閉關(guān)再好好修煉修煉。
這個(gè)題可以考查面試者對(duì)程序設(shè)計(jì)知識(shí)的掌握程度是初級(jí)、中級(jí)還是比較深入,沒(méi)有一定的知識(shí)廣度和深度,不可能對(duì)這個(gè)問(wèn)題給出全面的解答。大多數(shù)人只能回答出static和const關(guān)鍵字的部分功能。
試題:寫(xiě)一個(gè)函數(shù)返回1+2+3+…+n的值(假定結(jié)果不會(huì)超過(guò)長(zhǎng)整型變量的范圍)
解答:
int Sum( int n )
{
? ?? ? return??( (long)1 + n) * n / 2; //或return??(1l + n) * n / 2;
}
剖析:
對(duì)于這個(gè)題,只能說(shuō),也許最簡(jiǎn)單的答案就是最好的答案。下面的解答,或者基于下面的解答思路去優(yōu)化,不管怎么“折騰”,其效率也不可能與直接return ( 1 l + n ) * n / 2相比!
int Sum( int n )
{
??long sum = 0;
??for( int i=1; i<=n; i++ )
??{
? ?? ?? ?sum += i;
??}
??return sum;
}
所以程序員們需要敏感地將數(shù)學(xué)等知識(shí)用在程序設(shè)計(jì)中。
面試必看(C/C++程序員應(yīng)聘常見(jiàn)面試題深入剖析(1))
1.引言
本文的寫(xiě)作目的并不在于提供C/C++程序員求職面試指導(dǎo),而旨在從技術(shù)上分析面試題的內(nèi)涵。文中的大多數(shù)面試題來(lái)自各大論壇,部分試題解答也參考了網(wǎng)友的意見(jiàn)。
許多面試題看似簡(jiǎn)單,卻需要深厚的基本功才能給出完美的解答。企業(yè)要求面試者寫(xiě)一個(gè)最簡(jiǎn)單的strcpy函數(shù)都可看出面試者在技術(shù)上究竟達(dá)到了怎樣的程度,我們能真正寫(xiě)好一個(gè)strcpy函數(shù)嗎?我們都覺(jué)得自己能,可是我們寫(xiě)出的strcpy很可能只能拿到10分中的2分。讀者可從本文看到strcpy函數(shù)從2分到10分解答的例子,看看自己屬于什么樣的層次。此外,還有一些面試題考查面試者敏捷的思維能力。
分析這些面試題,本身包含很強(qiáng)的趣味性;而作為一名研發(fā)人員,通過(guò)對(duì)這些面試題的深入剖析則可進(jìn)一步增強(qiáng)自身的內(nèi)功。
2.找錯(cuò)題
試題1:
void test1()
{
? ?char string[10];
? ?char* str1 = "0123456789";
? ???strcpy( string, str1 );
}
試題2:
void test2()
{
? ?char string[10], str1[10];
? ???int i;
? ???for(i=0; i<10; i++)
? ???{
? ?? ???str1[i] = 'a';
? ???}
? ???strcpy( string, str1 );
}
試題3:
void test3(char* str1)
{
? ?char string[10];
? ?if( strlen( str1 ) <= 10 )
? ???{
? ?? ?? ?? ?strcpy( string, str1 );
? ???}
}
解答:
試題1字符串str1需要11個(gè)字節(jié)才能存放下(包括末尾的’\0’),而string只有10個(gè)字節(jié)的空間,strcpy會(huì)導(dǎo)致數(shù)組越界;
對(duì)試題2,如果面試者指出字符數(shù)組str1不能在數(shù)組內(nèi)結(jié)束可以給3分;如果面試者指出strcpy(string, str1)調(diào)用使得從str1內(nèi)存起復(fù)制到string內(nèi)存起所復(fù)制的字節(jié)數(shù)具有不確定性可以給7分,在此基礎(chǔ)上指出庫(kù)函數(shù)strcpy工作方式的給10分;
對(duì)試題3,if(strlen(str1) <= 10)應(yīng)改為if(strlen(str1) < 10),因?yàn)閟trlen的結(jié)果未統(tǒng)計(jì)’\0’所占用的1個(gè)字節(jié)。
剖析:
考查對(duì)基本功的掌握:
(1)字符串以’\0’結(jié)尾;
(2)對(duì)數(shù)組越界把握的敏感度;
(3)庫(kù)函數(shù)strcpy的工作方式,如果編寫(xiě)一個(gè)標(biāo)準(zhǔn)strcpy函數(shù)的總分值為10,下面給出幾個(gè)不同得分的答案:
2分
void strcpy( char *strDest, char *strSrc )
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
4分
void strcpy( char *strDest, const char *strSrc )
//將源字符串加const,表明其為輸入?yún)?shù),加2分
{
while( (*strDest++ = * strSrc++) != ‘\0’ );
}
7分
void strcpy(char *strDest, const char *strSrc)??
{
//對(duì)源地址和目的地址加非0斷言,加3分
assert( (strDest != NULL) && (strSrc != NULL) );
while( (*strDest++ = * strSrc++)??!=??‘\0’ );
}
10分
//為了實(shí)現(xiàn)鏈?zhǔn)讲僮鳎瑢⒛康牡刂贩祷兀?分!
char * strcpy( char *strDest, const char *strSrc )??
{
assert( (strDest != NULL) && (strSrc != NULL) );
char *address = strDest;??
while( (*strDest++ = * strSrc++) != ‘\0’ );
??return address;
}
從2分到10分的幾個(gè)答案我們可以清楚的看到,小小的strcpy竟然暗藏著這么多玄機(jī),真不是蓋的!需要多么扎實(shí)的基本功才能寫(xiě)一個(gè)完美的strcpy啊!
(4)對(duì)strlen的掌握,它沒(méi)有包括字符串末尾的'\0'。
讀者看了不同分值的strcpy版本,應(yīng)該也可以寫(xiě)出一個(gè)10分的strlen函數(shù)了,完美的版本為:
int strlen( const char *str )? ? //輸入?yún)?shù)const
{
? ???assert( strt != NULL );? ? //斷言字符串地址非0
? ???int len;
? ???while( (*str++) != '\0' )
? ???{??
? ?? ?? ?? ?len++;
? ???}
? ???return len;
}
試題4:
void GetMemory( char *p )
{
? ?p = (char *) malloc( 100 );
}
void Test( void )
{
? ?char *str = NULL;
? ?GetMemory( str );
? ?strcpy( str, "hello world" );
? ?printf( str );
}
試題5:
char *GetMemory( void )
{? ?
? ???char p[] = "hello world";? ?? ?
? ???return p;??
}
void Test( void )
{? ?
? ???char *str = NULL;??
? ???str = GetMemory();? ?
? ???printf( str );? ?
}
試題6:
void GetMemory( char **p, int num )
{
? ???*p = (char *) malloc( num );
}
void Test( void )
{
? ???char *str = NULL;
? ???GetMemory( &str, 100 );
? ???strcpy( str, "hello" );
? ???printf( str );
}
試題7:
void Test( void )
{
? ???char *str = (char *) malloc( 100 );
? ???strcpy( str, "hello" );
? ???free( str );
? ???...??//省略的其它語(yǔ)句
}
解答:
試題4傳入中GetMemory( char *p )函數(shù)的形參為字符串指針,在函數(shù)內(nèi)部修改形參并不能真正的改變傳入形參的值,執(zhí)行完
char *str = NULL;
GetMemory( str );
后的str仍然為NULL;
試題5中
? ???char p[] = "hello world";? ?
? ???return p;??
的p[]數(shù)組為函數(shù)內(nèi)的局部自動(dòng)變量,在函數(shù)返回后,內(nèi)存已經(jīng)被釋放。這是許多程序員常犯的錯(cuò)誤,其根源在于不理解變量的生存期。
試題6的GetMemory避免了試題4的問(wèn)題,傳入GetMemory的參數(shù)為字符串指針的指針,但是在GetMemory中執(zhí)行申請(qǐng)內(nèi)存及賦值語(yǔ)句
p = (char *) malloc( num );
后未判斷內(nèi)存是否申請(qǐng)成功,應(yīng)加上:
if ( p == NULL )
{
? ?...//進(jìn)行申請(qǐng)內(nèi)存失敗處理
}
試題7存在與試題6同樣的問(wèn)題,在執(zhí)行
char *str = (char *) malloc(100);
后未進(jìn)行內(nèi)存是否申請(qǐng)成功的判斷;另外,在free(str)后未置str為空,導(dǎo)致可能變成一個(gè)“野”指針,應(yīng)加上:
str = NULL;
試題6的Test函數(shù)中也未對(duì)malloc的內(nèi)存進(jìn)行釋放。
剖析:
試題4~7考查面試者對(duì)內(nèi)存操作的理解程度,基本功扎實(shí)的面試者一般都能正確的回答其中50~60的錯(cuò)誤。但是要完全解答正確,卻也絕非易事。
對(duì)內(nèi)存操作的考查主要集中在:
(1)指針的理解;
(2)變量的生存期及作用范圍;
(3)良好的動(dòng)態(tài)內(nèi)存申請(qǐng)和釋放習(xí)慣。
在看看下面的一段程序有什么錯(cuò)誤:
swap( int* p1,int* p2 )
{
? ???int *p;
? ???*p = *p1;
? ???*p1 = *p2;
? ???*p2 = *p;
}
在swap函數(shù)中,p是一個(gè)“野”指針,有可能指向系統(tǒng)區(qū),導(dǎo)致程序運(yùn)行的崩潰。在VC++中DEBUG運(yùn)行時(shí)提示錯(cuò)誤“Access Violation”。該程序應(yīng)該改為:
swap( int* p1,int* p2 )
{
? ???int p;
? ???p = *p1;
? ???*p1 = *p2;
? ???*p2 = p;
}
C++中const類(lèi)型(二)----常指針和常引用
2.常指針和常引用
(1)常指針
? ?? ?使用const指針時(shí),由于const的位置不同,而含意不同。下面舉兩個(gè)例子,說(shuō)明它們的區(qū)別。下面定義的一個(gè)指向字符串的常量指針:
char *const ptr1 = stirngprt1;
其中,ptrl是一個(gè)常量指針。因此,下面賦值是非法的。
ptr1 = stringprt2;
而下面的賦值是合法的:
*ptr1 = “ m ”;
因?yàn)橹羔榩tr1所指向的變量是可以更新的,不可更新的是常量指針ptr1所指的方向(別的字符串)。下面定義了一個(gè)指向字符串常量的指針:
const *ptr2 = stringprt;
其中,ptr2是一個(gè)指向字符串常量的指針。Ptr2所指向的字符串不能更新,而ptr2是可以更新的。因此:
*ptr1 = “ x ”;
是非法的,而:
ptr2 = stringptr2;
是合法的。
? ? 所以,在使用const修飾指針時(shí),應(yīng)該注意const的位置。定義一個(gè)指向字符串的指針常量和定義一個(gè)指向字符串常量的指針時(shí),const修飾符的位置不同,前者const放在*和指針名之間,后者const放在類(lèi)型說(shuō)明符前。
(2)常引用
? ?? ?使用const修飾符也可以說(shuō)明引用,被說(shuō)明的引用為常引用,該引用所引用的對(duì)象不能被更新。其定義格式如下:
const<類(lèi)型說(shuō)明符>&<引用名>
例如:
const double &v;
在實(shí)際應(yīng)用中,常指針和常引用往往用來(lái)作函數(shù)的形參,這樣的參數(shù)稱(chēng)為常參數(shù)。
? ?? ?在C++面向?qū)ο蟮某绦蛟O(shè)計(jì)中,指針和引用使用得較多,其中使用const修飾的常指針和常引用用得更多。使用常參數(shù)則表明該函數(shù)不會(huì)更新某個(gè)參數(shù)所指向或所引用的對(duì)象,這樣在參數(shù)傳遞過(guò)程中就不需要拷貝化構(gòu)造函數(shù),這將會(huì)提高程序的運(yùn)行效率。
下面舉一例子說(shuō)明常指針作函數(shù)參數(shù)的用法:
#include <iostream.h>
const int N = 6;
void print(const int *p, int n);
void main()
{
? ? ? ? int array[N];
? ? for(int i = 0; i < N; i++)
? ? ? ? {
? ? ? ? ? ? ? ? cin >> array[i];
? ? ? ? }
? ? ? ? print(array, N);
}
void print(const int *p, int n)
{
? ? ? ? cout << "{" << *p;
? ? ? ?
? ? for(int i = 1; i < N; i++)
? ? ? ? {
? ? ? ? ? ? ? ? cout <<"," << *(p+i);
? ? ? ? }
}
堆和棧的區(qū)別
[b][color=Red]堆:[/color][/b] 是大家共有的空間,分全局堆和局部堆。全局堆就是所有沒(méi)有分配的空間,局部堆就是用戶分配的空間。堆在操作系統(tǒng)對(duì)進(jìn)程 初始化的時(shí)候分配,運(yùn)行過(guò)程中也可以向系統(tǒng)要額外的堆,但是記得用完了要還給操作系統(tǒng),要不然就是內(nèi)存泄漏。
[b][color=Red]棧:[/color][/b] 是個(gè)線程獨(dú)有的,保存其運(yùn)行狀態(tài)和局部自動(dòng)變量的。棧在線程開(kāi)始的時(shí)候初始化,每個(gè)線程的棧互相獨(dú)立,因此 ,棧是 thread safe的。每個(gè)C ++對(duì)象的數(shù)據(jù)成員也存在在棧中,每個(gè)函數(shù)都有自己的棧,棧被用來(lái)在函數(shù) 之間傳遞參數(shù)。操作系統(tǒng)在切換線程的時(shí)候會(huì)自動(dòng)的切換棧,就是切換 SS/ESP寄存器。棧空間不需要在高級(jí)語(yǔ)言里面顯式的分配 和釋放。
[b][color=Black]堆和棧的區(qū)別[/color][/b]
[b]一、預(yù)備知識(shí)—程序的內(nèi)存分配[/b]
一個(gè)由c/C++編譯的程序占用的內(nèi)存分為以下幾個(gè)部分:
1、棧區(qū)(stack)—? ?由編譯器自動(dòng)分配釋放 ,存放函數(shù)的參數(shù)值,局部變量的值等。其操作方式類(lèi)似于數(shù)據(jù)結(jié)構(gòu)中的棧。
2、堆區(qū)(heap) —? ?一般由程序員分配釋放, 若程序員不釋放,程序結(jié)束時(shí)可能由OS回收 。注意它與數(shù)據(jù)結(jié)構(gòu)中的堆是兩回事,分配方式倒是類(lèi)似于鏈表。
3、全局區(qū)(靜態(tài)區(qū))(static)—,全局變量和靜態(tài)變量的存儲(chǔ)是放在一塊的,初始化的全局變量和靜態(tài)變量在一塊區(qū)域, 未初始化的全局變量和未初始化的靜態(tài)變量在相鄰的另一塊區(qū)域。 - 程序結(jié)束后由系統(tǒng)釋放。
4、文字常量區(qū)??—常量字符串就是放在這里的。 程序結(jié)束后由系統(tǒng)釋放。
5、程序代碼區(qū)—存放函數(shù)體的二進(jìn)制代碼。
二、例子程序
[code]
//main.cpp
int a = 0; 全局初始化區(qū)
char *p1; 全局未初始化區(qū)
main()
{
int b; 棧
char s[] = "abc"; 棧
char *p2; 棧
char *p3 = "123456"; 123456\0在常量區(qū),p3在棧上。
static int c =0; 全局(靜態(tài))初始化區(qū)
p1 = (char *)malloc(10);
p2 = (char *)malloc(20);
分配得來(lái)得10和20字節(jié)的區(qū)域就在堆區(qū)。
strcpy(p1, "123456"); 123456\0放在常量區(qū),編譯器可能會(huì)將它與p3所指向的"123456"優(yōu)化成一個(gè)地方。
}
[/code]
[b]二、堆和棧的理論知識(shí)[/b]
2.1申請(qǐng)方式
stack:
由系統(tǒng)自動(dòng)分配。 例如,聲明在函數(shù)中一個(gè)局部變量 int b; 系統(tǒng)自動(dòng)在棧中為b開(kāi)辟空間
heap:
需要程序員自己申請(qǐng),并指明大小,在c中malloc函數(shù)
如p1 = (char *)malloc(10);
在C++中用new運(yùn)算符
如p2 = (char *)malloc(10);
但是注意p1、p2本身是在棧中的。
2.2
申請(qǐng)后系統(tǒng)的響應(yīng)
棧:只要棧的剩余空間大于所申請(qǐng)空間,系統(tǒng)將為程序提供內(nèi)存,否則將報(bào)異常提示棧溢出。
堆:首先應(yīng)該知道操作系統(tǒng)有一個(gè)記錄空閑內(nèi)存地址的鏈表,當(dāng)系統(tǒng)收到程序的申請(qǐng)時(shí), 會(huì)遍歷該鏈表,尋找第一個(gè)空間大于所申請(qǐng)空間的堆結(jié)點(diǎn),然后將該結(jié)點(diǎn)從空閑結(jié)點(diǎn)鏈表中刪除,并將該結(jié)點(diǎn)的空間分配給程序,另外,對(duì)于大多數(shù)系統(tǒng),會(huì)在這塊內(nèi)存空間中的首地址處記錄本次分配的大小,這樣,代碼中的delete語(yǔ)句才能正確的釋放本內(nèi)存空間。另外,由于找到的堆結(jié)點(diǎn)的大小不一定正好等于申請(qǐng)的大小,系統(tǒng)會(huì)自動(dòng)的將多余的那部分重新放入空閑鏈表中。
2.3申請(qǐng)大小的限制
棧:在Windows下,棧是向低地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是一塊連續(xù)的內(nèi)存的區(qū)域。這句話的意思是棧頂?shù)牡刂泛蜅5淖畲笕萘渴窍到y(tǒng)預(yù)先規(guī)定好的,在WINDOWS下,棧的大小是2M(也可能是1M,它是一個(gè)編譯時(shí)就確定的常數(shù)),如果申請(qǐng)的空間超過(guò)棧的剩余空間時(shí),將提示overflow。因此,能從棧獲得的空間較小
。
堆:堆是向高地址擴(kuò)展的數(shù)據(jù)結(jié)構(gòu),是不連續(xù)的內(nèi)存區(qū)域。這是由于系統(tǒng)是用鏈表來(lái)存儲(chǔ)的空閑內(nèi)存地址的,自然是不連續(xù)的,而鏈表的遍歷方向是由低地址向高地址。堆的大小受限于計(jì)算機(jī)系統(tǒng)中有效的虛擬內(nèi)存。由此可見(jiàn),堆獲得的空間比較靈活,也比較大。
2.4申請(qǐng)效率的比較:
棧由系統(tǒng)自動(dòng)分配,速度較快。但程序員是無(wú)法控制的。
堆是由new分配的內(nèi)存,一般速度比較慢,而且容易產(chǎn)生內(nèi)存碎片,不過(guò)用起來(lái)最方便.
另外,在WINDOWS下,最好的方式是用VirtualAlloc分配內(nèi)存,他不是在堆,也不是在棧是直接在進(jìn)程的地址空間中保留一快內(nèi)存,雖然用起來(lái)最不方便。但是速度快,也最靈活。
2.5堆和棧中的存儲(chǔ)內(nèi)容
棧: 在函數(shù)調(diào)用時(shí),第一個(gè)進(jìn)棧的是主函數(shù)中后的下一條指令(函數(shù)調(diào)用語(yǔ)句的下一條可執(zhí)行語(yǔ)句)的地址,然后是函數(shù)的各個(gè)參數(shù),在大多數(shù)的C編譯器中,參數(shù)是由右往左入棧的,然后是函數(shù)中的局部變量。注意靜態(tài)變量是不入棧的。
當(dāng)本次函數(shù)調(diào)用結(jié)束后,局部變量先出棧,然后是參數(shù),最后棧頂指針指向最開(kāi)始存的地址,也就是主函數(shù)中的下一條指令,程序由該點(diǎn)繼續(xù)運(yùn)行。
堆:一般是在堆的頭部用一個(gè)字節(jié)存放堆的大小。堆中的具體內(nèi)容有程序員安排。
2.6存取效率的比較
char s1[] = "aaaaaaaaaaaaaaa";
char *s2 = "bbbbbbbbbbbbbbbbb";
aaaaaaaaaaa是在運(yùn)行時(shí)刻賦值的;
而bbbbbbbbbbb是在編譯時(shí)就確定的;
但是,在以后的存取中,在棧上的數(shù)組比指針?biāo)赶虻淖址?例如堆)快。
比如:
[code]
void main()
{
char a = 1;
char c[] = "1234567890";
char *p ="1234567890";
a = c[1];
a = p[1];
return;
}
[/code]
對(duì)應(yīng)的匯編代碼
[code]
10: a = c[1];
00401067 8A 4D F1 mov cl,byte ptr [ebp-0Fh]
0040106A 88 4D FC mov byte ptr [ebp-4],cl
11: a = p[1];
0040106D 8B 55 EC mov edx,dword ptr [ebp-14h]
00401070 8A 42 01 mov al,byte ptr [edx+1]
00401073 88 45 FC mov byte ptr [ebp-4],al
[/code]
第一種在讀取時(shí)直接就把字符串中的元素讀到寄存器cl中,而第二種則要先把指針值讀到edx中,在根據(jù)
edx讀取字符,顯然慢了。
2.7小結(jié):
堆和棧的區(qū)別可以用如下的比喻來(lái)看出:
使用棧就象我們?nèi)ワ堭^里吃飯,只管點(diǎn)菜(發(fā)出申請(qǐng))、付錢(qián)、和吃(使用),吃飽了就走,不必理會(huì)切菜、洗菜等準(zhǔn)備工作和洗碗、刷鍋等掃尾工作,他的好處是快捷,但是自由度小。
使用堆就象是自己動(dòng)手做喜歡吃的菜肴,比較麻煩,但是比較符合自己的口味,而且自由度大。
查看完整版本:
http://bbs.very91.com:8000/viewthread.php?tid=272
1. 找錯(cuò)
void test1()
{
??? char string[10];
??? char* str1="0123456789";
??? strcpy(string, str1);
}
答:表面上并且編譯都不會(huì)錯(cuò)誤。但如果string數(shù)組原意表示的是字符串的話,那這個(gè)賦值就沒(méi)有達(dá)到意圖。最好定義為char string[11],這樣最后一個(gè)元素可以存儲(chǔ)字符串結(jié)尾符'\0';
void test2()
{
??? char string[10], str1[10];
? for(int I=0; I<10;I++)
? {
??? str1[I] ='a';
? }
? strcpy(string, str1);
}
答:strcpy使用錯(cuò)誤,strcpy只有遇到字符串末尾的'\0'才會(huì)結(jié)束,而str1并沒(méi)有結(jié)尾標(biāo)志,導(dǎo)致strcpy函數(shù)越界訪問(wèn),不妨讓str1[9]='\0',這樣就正常了。
void test3(char* str1)
{
??? char string[10];
??? if(strlen(str1)<=10)
{
??? strcpy(string, str1);
}
}
答:這又會(huì)出現(xiàn)第一道改錯(cuò)題的錯(cuò)誤了。strlen(str1)算出來(lái)的值是不包含結(jié)尾符'\0'的,如果str1剛好為10個(gè)字符+1結(jié)尾符,string就得不到結(jié)尾符了。可將strlen(str1)<=10改為strlen(str1)<10。
2. 找錯(cuò)
#define MAX_SRM 256
DSN get_SRM_no()
{
??? static int SRM_no;
??? int I;
??? for(I=0;I<MAX_SRM;I++,SRM_no++)
? {
??? SRM_no %= MAX_SRM;
??? if(MY_SRM.state==IDLE)
??? {
????? break;
??? }
? }
? if(I>=MAX_SRM)
??? return (NULL_SRM);
? else
??? return SRM_no;
}
答:我不知道這段代碼的具體功能,但明顯有兩個(gè)錯(cuò)誤
1,SRM_no沒(méi)有賦初值
2,由于static的聲明,使該函數(shù)成為不可重入(即不可預(yù)測(cè)結(jié)果)函數(shù),因?yàn)镾RM_no變量放在程序的全局存儲(chǔ)區(qū)中,每次調(diào)用的時(shí)候還可以保持原來(lái)的賦值。這里應(yīng)該去掉static聲明。
3. 寫(xiě)出程序運(yùn)行結(jié)果
int sum(int a)
{
??? auto int c=0;
??? static int b=3;
? c+=1;
? b+=2;
? return(a+b+c);
}
?void main()
{
??? int I;
? int a=2;
? for(I=0;I<5;I++)
? {
??? printf("%d,", sum(a));
? }
}
答:8,10,12,14,16
該題比較簡(jiǎn)單。只要注意b聲明為static靜態(tài)全局變量,其值在下次調(diào)用時(shí)是可以保持住原來(lái)的賦值的就可以。
----------------------------------------------
插播廣告啦:版權(quán)所有:朱科 歡迎光臨我的網(wǎng)站:www.goodsoft.cn,各位轉(zhuǎn)貼別刪,勞動(dòng)成果啊
----------------------------------------------
4.
int func(int a)
{
??? int b;
??? switch(a)
??? {
??????? case 1: b=30;
??????? case 2: b=20;
??????? case 3: b=16;
??????? default: b=0;
?? }
?? return b;
}
則func(1)=?
答:func(1)=0,因?yàn)闆](méi)有break語(yǔ)句,switch中會(huì)一直計(jì)算到b=0。這是提醒我們不要忘了break。呵呵。
5:
? int a[3];
? a[0]=0; a[1]=1; a[2]=2;
? int *p, *q;
? p=a;
? q=&a[2];
則a[q-p]=?
答:a[q-p]=a[2]=2;這題是要告訴我們指針的運(yùn)算特點(diǎn)
6.
定義 int **a[3][4], 則變量占有的內(nèi)存空間為:_____
答:此處定義的是指向指針的指針數(shù)組,對(duì)于32位系統(tǒng),指針占內(nèi)存空間4字節(jié),因此總空間為3×4×4=48。
7.
編寫(xiě)一個(gè)函數(shù),要求輸入年月日時(shí)分秒,輸出該年月日時(shí)分秒的下一秒。如輸入2004年12月31日23時(shí)59分59秒,則輸出2005年1月1日0時(shí)0分0秒。
答:
/*輸入年月日時(shí)分秒,輸出年月日時(shí)分秒的下一秒,輸出仍然在原內(nèi)存空間*/
void NextMinute(int *nYear,int *nMonth,int *nDate,int *nHour,int *nMinute,int *nSecond)
{
? int nDays;
? (*nSecond)++;? // 秒加1
? if(*nSecond>=60)? // 秒滿60,做出特殊處理,下面時(shí),日,月等類(lèi)同
? {
??? *nSecond=0;
??? (*nMinute)++;
??? if(*nMinute>=60)
??? {
????? *nMinute=0;
????? (*nHour)++;
????? if(*nHour>=24)
????? {
??????? *nHour=0;
??????? (*nDate)++;
??????? switch(*nMonth)
??????? {
????????? case 1:
????????? case 3:
????????? case 5:
????????? case 7:
????????? case 8:
????????? case 10:
????????? case 12:
??????????? nDays=31;
????????? break;
????????? case 2:// 判斷閏年
??????????? if(*nYear%400==0||*nYear%100!=0&&*nYear%4==0)
??????????? {
??????????? nDays=29;
??????????? }
??????????? else
??????????? {
??????????? nDays=28;
??????????? }
????????? break;
????????? default:
??????????? nDays=30;
????????? break;
??????? }
??????? if(*nDate>nDays)
??????? {
????????? *nDate=1;
????????? (*nMonth)++;
????????? if(*nMonth>12)
????????? {
????????? *nMonth=1;
????????? (*nYear)++;
????????? }
??????? }
????? }
??? }
? }
}
/*示例可運(yùn)行代碼*/
void main()
{
? int nYear=2004,nMonth=12,nDate=31,nHour=59,nMinute=59,nSecond=59;
? NextMinute(&nYear,&nMonth,&nDate,&nHour,&nMinute,&nSecond);
? printf("The result:%d-%d-%d %d:%d:%d",nYear,nMonth,nDate,nHour,nMinute,nSecond);
}
intel比試題&面試題:
(熟悉大公司的題目,并不僅僅是為了進(jìn)這些公司,而是很多國(guó)內(nèi)公司考察內(nèi)容都很接近而已.)
2005筆試 :
1。高效的內(nèi)存管理
2。8皇后問(wèn)題
面試q:
(2) 編譯中的問(wèn)題:全局變量如int i=5; int*(pf)()=foo; 分別在何時(shí)被初始化?設(shè)計(jì)時(shí)候如何具體的實(shí)現(xiàn)。
(3) OS相關(guān)的問(wèn)題,內(nèi)存訪問(wèn),cache等(包括cache在整個(gè)系統(tǒng)中的位置,畫(huà)出來(lái),并解釋?zhuān)?br />
(4) 解釋例如mov ax,100H 這樣一條指令的cpu, os, memory等都完成了什么樣的工作。
(5) Strlen()的C語(yǔ)言實(shí)現(xiàn),不能使用任何變量。
(6) 編譯中display表的一些問(wèn)題
(7) 一個(gè)hash函數(shù),輸入隨機(jī),現(xiàn)發(fā)生沖突,如數(shù)據(jù)集中在某幾條中,問(wèn)怎樣處理hash函數(shù)保證高效的訪問(wèn),怎樣實(shí)現(xiàn)?
(8) 把Switch()case…語(yǔ)句翻譯成三元組。
(9) 一個(gè)byte(用C語(yǔ)言實(shí)現(xiàn)計(jì)數(shù)其中1的個(gè)數(shù)),給出最高效的實(shí)現(xiàn)方法。(位域)或者查表最快的;
(10) 上海有多少個(gè)加油站?你是怎樣解決這一問(wèn)題?
(11) C語(yǔ)言參數(shù)的入棧順序?為什么這么實(shí)現(xiàn)?
(12) 你的最大的優(yōu)點(diǎn)和缺點(diǎn)分別是什么?
(13) C語(yǔ)言中字符串的翻轉(zhuǎn),最高效率(時(shí)間和空間)的實(shí)現(xiàn)?
2004
1. 三個(gè)float:a,b,c 問(wèn)值
(a+b)+c==(b+a)+c
(a+b)+c==(a+c)+b
2. 把一個(gè)鏈表反向填空
3. 設(shè)計(jì)一個(gè)重采樣系統(tǒng),說(shuō)明如何anti-alias
4. y1(n)=x(2n), y2(n)=x(n/2),問(wèn):
如果y1為周期函數(shù),那么x是否為周期函數(shù)
如果x為周期函數(shù),那么y1是否為周期函數(shù)
如果y2為周期函數(shù),那么x是否為周期函數(shù)
如果x為周期函數(shù),那么y2是否為周期函數(shù)
5. 如果模擬信號(hào)的帶寬為5KHZ,要用8K的采樣率,怎么辦。
4. 某個(gè)程序在一個(gè)嵌入式系統(tǒng)(200M的CPU,50M的SDRAM)中已經(jīng)最化了,換到另一個(gè)系統(tǒng)
(300M的CPU,50M的SDRAM)中運(yùn)行,還需要優(yōu)化嗎?
5. x^4+a*x^3+x^2+c*x+d最少需要作幾次乘法
6. 什么情況下,sin(x+y)+y ~ ....
7. 下面哪種排序法對(duì)12354最快
a quick sort
b.buble sort
c.merge sort
8. 哪種結(jié)構(gòu),平均來(lái)講,獲取一個(gè)值最快
a. binary tree
b. hash table
c. stack
1。 pipeline
2。 程序流程圖題目
3。 哲學(xué)家進(jìn)餐
4。 32bit,64bit,兩個(gè)平臺(tái)上complier,linker,os kernel,library,debuger的性質(zhì)
5。 const char * vs char const * (?)
6。 GDT and LDT
7。 1+1<<1
8。 Stack性質(zhì)
9。 ???
10。正方體中壓力什么的。。。
大題
1。f[40,400],log10變換
2。ACPI
3。讀程序
4。頻譜,采樣分析
大題
1。寫(xiě)出下列信號(hào)的奈虧斯特頻率
(1)f(t)=1+cos(2000pait)+sin(4000pait)
(2)f(t)=sin(4000pait)/pait
(3)f(t)=(sin(4000pait)的平方)/pait
2.填程序
把一個(gè)計(jì)算m^n的程序填充完整
大概的意思是:
有一個(gè)全局?jǐn)?shù)組char s[BUFSIZE]
利用這個(gè)數(shù)組計(jì)算,就是每個(gè)單元存放計(jì)算結(jié)果的一位,index小的存放低位,index大
的存放高位
3。有兩個(gè)線程
void producer()
{
while(1)
{
GeneratePacket();
PutPacketIntoBuffer();
Signal(customer);
}
}
void customer()
{
while(1)
{
WaitForSignal();
if(PacketInBuffer>10)
{
ReadAllPackets();
ProcessPackets();
}
}
}
(1)有沒(méi)有其他方法可以提高程序的性能
(2)可不可以不使用信號(hào)之類(lèi)的機(jī)制來(lái)實(shí)現(xiàn)上述的功能
4。優(yōu)化下面的程序
(0)sum=0
(1)I=1
(2)T1=4*I
(3)T2=address(A)-4
(4)T3=T2[T1]
(5)T4=address(B)-4
(6)T5=4*I
(7)T6=T4[T5]
(8)T7=T3*T5
(9)sum=sum+T6
(10)I=I+1
(10)IF I<20 GOTO (2)
1。關(guān)于c的main函數(shù)
2。15個(gè)人循環(huán)報(bào)數(shù),報(bào)到N的出列,找出最后留下的那個(gè)人,算法填空題
2。找出一個(gè)給出的并行解決方案的錯(cuò)誤情況
3。關(guān)于GPIO,intel的四種體系結(jié)構(gòu)
選擇題10題
有關(guān)vc和c,指針,HyporThreading Dual-core等等
看也看不懂的
2003年的
1:概率題。x,y為隨機(jī)變量,聯(lián)合概率密度 f(x,y) = intig(0,1)*dx*intig(0,x)*k*d
y,k為常數(shù),求k=? E(xy)=?
注:intig(a,b)為a到b的定積分。
2:概率題。A,B為隨機(jī)事件,以下哪個(gè)正確
A. P(A U B)*p(AB) <= P(A)P(B)
B. P(A U B)*p(AB) >= P(A)P(B)
C. P(A U B)*p(AB) <= P(A) + P(B)
D. P(A U B)*p(AB) >= P(A) + P(B)
3: 信道帶寬200kHz,信噪比10dB,求信道波特率=?
4:以下代碼運(yùn)行結(jié)果是什么
int main()
{
int a,b,c,abc = 0;
a=b=c=40;
if(c)
{
int abc;
abc = a*b+c;
}
printf("%d,%d", abc, c);
return 0;
}
5:給出了從紐約出發(fā)和到達(dá)落山雞的各種航班信息,寫(xiě)出找到一條從紐約到落山雞的最
短距離的航班組合的代碼。
6:從計(jì)算機(jī)圖形上截取某個(gè)物體邊緣的若干個(gè)坐標(biāo),求這個(gè)物體面積,并跟判斷是方形
還是圓形,為啥。(坐標(biāo)不記得,大概是個(gè)圓
)。
7:離散卷機(jī)與DFT的區(qū)別與關(guān)系。快速求不滿足2^N長(zhǎng)度的離散傅立葉變換的方法有哪些
?如何用fft求N*M點(diǎn)的離散卷機(jī)?
8:給出fir和iir的優(yōu)缺點(diǎn)。
9:如何計(jì)算線性標(biāo)量量化器的量化噪聲?需要那些假設(shè)?
普天C++筆試題
1.實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),寫(xiě)出這兩個(gè)函數(shù)。
2.寫(xiě)一個(gè)函數(shù),將其中的 都轉(zhuǎn)換成4個(gè)空格。
3.Windows程序的入口是哪里?寫(xiě)出Windows消息機(jī)制的流程。
4.如何定義和實(shí)現(xiàn)一個(gè)類(lèi)的成員函數(shù)為回調(diào)函數(shù)?
5.C++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請(qǐng)舉例。
6.C++里面如何聲明const void f(void)函數(shù)為C程序中的庫(kù)函數(shù)?
7.下列哪兩個(gè)是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;
8.內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類(lèi)型檢查?
void g(base & b){
b.play;
}
void main(){
son s;
發(fā)信人: wildboy
標(biāo) 題:
上午潤(rùn)匯的筆試題發(fā)信站: BBS 水木清華站 (Sat Nov 30 13:18:53 2002), 站內(nèi)
c++最后幾個(gè)大題目是
1,實(shí)現(xiàn)雙向鏈表刪除一個(gè)節(jié)點(diǎn)P,在節(jié)點(diǎn)P后插入一個(gè)節(jié)點(diǎn),這兩個(gè)函數(shù)。
2,寫(xiě)一個(gè)函數(shù)將其中的\t都轉(zhuǎn)換成4個(gè)空格。
3,windows程序的入口是哪里?寫(xiě)出windows消息機(jī)制的流程。
4,如何定義和實(shí)現(xiàn)一個(gè)類(lèi)的成員函數(shù)為回調(diào)函數(shù)。
還有前面的幾個(gè):
1. class A{
int a;
int b;
}
問(wèn)的是編譯時(shí)的default constructor function的問(wèn)題。
還有一個(gè)說(shuō),A有其他自己定義的構(gòu)造函數(shù),問(wèn)是否還有default constructor function
還是什么來(lái)著,記不清樂(lè)。
2. c++里面是不是所有的動(dòng)作都是main()引起的?如果不是,請(qǐng)舉例。
3. c++里面如何聲明const void f(void)函數(shù)為C庫(kù)函數(shù)?(這個(gè)我前幾天還看來(lái)著,
居然就忘記樂(lè), )
對(duì)了,還考樂(lè)一些關(guān)于const的問(wèn)題
問(wèn)下列哪兩個(gè)是等同的
int b;
A const int* a = &b;
B const* int a = &b;
C const int* const a = &b;
D int const* const a = &b;
還有一個(gè)是考類(lèi)的成員函數(shù)是 void f() const;型的時(shí)候調(diào)用的問(wèn)題。
幸好昨天剛剛看樂(lè)這部分的內(nèi)容,呵呵
內(nèi)聯(lián)函數(shù)考了一題,問(wèn)內(nèi)聯(lián)函數(shù)在編譯時(shí)是否做參數(shù)類(lèi)型檢查。
虛函數(shù)也考了一題,不過(guò)不難。
class base{
public:
virtual void play(){
cout<<"base";
}
}
class son: public base{
public:
void play(){cout<<"son";}
}
void g(base & b){
b.play;
}
void main(){
son s;
g(s);
return;
}
第一部分 公司篇】
1、華為公司的全稱(chēng)為()
A、深圳市華為技術(shù)有限公司 B、華為技術(shù)有限公司
C、華為公司 D、我司
(答案:B,答A、C者酌情給分,答D者立即辭退,我司三令五申禁止使用該華
為內(nèi)
部
土語(yǔ),屢禁不止,老員工不可教也,只好從新員工抓起,格殺勿論)
2、華為公司的企業(yè)性質(zhì)是()
A、民營(yíng) B、私營(yíng) C、國(guó)營(yíng) D、上市公司
(答案:A,本題主要讓考生了解公司的性質(zhì))
3、華為公司的商標(biāo)象征()
A、紅太陽(yáng) B、菊花 C、扇貝
(答案:B,答A者酌情給分,答C者立即辭退,天天就想著吃)
4、從下列選項(xiàng)中選擇出公司的常務(wù)副總裁()
A、任正非 B、孫亞芳 C、李一男 D、鄭寶用 E、張燕燕
(答案:BD,答C者立即辭退,讓他到李一男的公司去報(bào)到吧)
5、華為公司的年終獎(jiǎng)一般是在每年的什么時(shí)候發(fā)()
A、元旦后 B、春節(jié)前 C、7月下旬或8月上旬 D、勞動(dòng)節(jié)前 E、國(guó)慶節(jié)前
(答案:C,切記,因?yàn)槭悄曛歇?jiǎng),而不是年終獎(jiǎng))
6、華為公司的配給你的股票是()
A、**發(fā)的 B、用自己的獎(jiǎng)金去買(mǎi)
(答案:B)
7、老板常說(shuō)的土八路,是指()
A、老板自己的革命年代的光輝歷史
B、本地化的用服兄弟
C、季度考核為D的兄弟
(答案:B)
【第二部分 部門(mén)篇】
1、你所在的一級(jí)部門(mén)為()
A、技術(shù)支援部
B、國(guó)際技術(shù)支援部
C、國(guó)際技術(shù)支援部國(guó)內(nèi)分部
D、用服
(答案:B,答A、C者酌情給分,答D者作不合格處理,為了提高技術(shù)支援部形
象,
公司
早就取消用服這個(gè)字眼,而且于2001年春節(jié)后悄悄地將技術(shù)支援部前加“國(guó)際
”二
字)
2、你所在的二級(jí)部門(mén)為()
A、傳輸產(chǎn)品技術(shù)支援管理部
B、傳輸工程部
C、傳輸用服工程中心
D、光網(wǎng)絡(luò)產(chǎn)品技術(shù)支援管理部
(答案:A,首先得把自己的部門(mén)搞清楚,答D者,有遠(yuǎn)見(jiàn),有潛力,可以酌情
給分
,很可能
在2001年未就改成這個(gè)名字,因?yàn)槭袌?chǎng)中研已經(jīng)改了,就差技術(shù)支援部了)
3、傳輸?shù)纳虡?biāo)為()
A、SBS
B、SDH
C、OptiX
D、Metro
(答案:C,答A者酌情給分,最起碼還知道老商標(biāo))
4、技術(shù)支援部與國(guó)際技術(shù)支援部的關(guān)系()
A、國(guó)際技術(shù)支援部是技術(shù)支援部下面的一個(gè)部門(mén),負(fù)責(zé)海外
B、技術(shù)支援部是國(guó)際技術(shù)支援部下面的一個(gè)部門(mén),負(fù)責(zé)國(guó)內(nèi)
C、技術(shù)支援部是國(guó)際技術(shù)支援部的前身
D、國(guó)際技術(shù)支援部是技術(shù)支援部的前身
(答案:C)
【第三部分 業(yè)務(wù)篇】
1、SBS是()
A、傳輸產(chǎn)品的老商標(biāo)
B、同步骨干系統(tǒng)
C、傻不傻的拼音縮寫(xiě)
D、帥不帥的拼音縮寫(xiě)
(答案:AB,答CD者立即辭退)
2、SDH是()
A、傳輸產(chǎn)品商標(biāo)
B、同步數(shù)字序列
C、傻得很的拼音縮寫(xiě)
D、傻得好的拼音縮寫(xiě)
(答案:B,答CD者立即辭退)
3、由于你是新員工,沒(méi)有公配手機(jī)時(shí),當(dāng)你在現(xiàn)場(chǎng)遇到緊急事故時(shí),你會(huì)(
)向公
司求助
A、打用戶機(jī)房?jī)?nèi)的電話
B、借用戶手機(jī)
C、拔110
D、拔200或300
E、立即打車(chē)回辦事處
(答案:D,答CE者立即辭退,按照公司規(guī)定,不能隨便使用用戶的電話,以
提高公
司形象)
4、在開(kāi)局時(shí),用戶問(wèn)你在華為干幾年了,你會(huì)回答()
A、我是新員工
B、1年多了
C、2年多了
D、3年多了
(答案:B,答A者按不合格處理,按照公司規(guī)定,不能說(shuō)自己是新員工,幾千
萬(wàn)的
設(shè)備,
怎能讓一個(gè)新員工用來(lái)練兵,用戶知道鼻子不氣歪才怪,答CD者,用戶會(huì)哼之
以鼻
,在華為
做了2、3年,還在下面撅個(gè)腚開(kāi)局,鬼才相信你的話呢!)
5、接上題,假如你回答說(shuō)在華為干1年多了,用戶會(huì)說(shuō)()
A、那你一定是新員工了
B、那你一定是老員工了
(答案:B,用戶對(duì)華為很了解,都知道你如果在華為做一年,就已經(jīng)是老員
工了)
6、接上題及上上題,用戶會(huì)繼續(xù)問(wèn),“那你咋連手機(jī)、便攜機(jī),一個(gè)都沒(méi)有
呢?”
,你會(huì)回答()
A、啊,我還沒(méi)有轉(zhuǎn)正咧,等俺轉(zhuǎn)正時(shí),誤碼儀、手機(jī)、便攜機(jī),一個(gè)都不能
少
B、啊,沒(méi)有關(guān)系,正是由于我是老員工,所以開(kāi)局用不著
C、啊,真倒霉,在來(lái)的路上,被土匪打劫了
D、啊,被我的兩個(gè)徒弟拿走了,因?yàn)樗麄兪切聠T工,沒(méi)有工具膽小,有了工
具好壯
膽
(答案:BCD,答A者,立即辭退,這么點(diǎn)事都搞不定)
7、當(dāng)你發(fā)現(xiàn)用戶的機(jī)房中沒(méi)有拖鞋時(shí),你會(huì)()
A、入鄉(xiāng)隨俗,直接進(jìn)機(jī)房
B、光腳丫
C、馬上出去自己花錢(qián)買(mǎi)幾雙拖鞋送給用戶
D、馬上出去買(mǎi)幾雙拖鞋送給用戶,之后開(kāi)票回來(lái)貼票報(bào)銷(xiāo)
E、馬上出去買(mǎi)幾雙拖鞋送給用戶,之后開(kāi)票找局長(zhǎng)報(bào)銷(xiāo)
(答案:C,答A者,立即辭退,答B(yǎng)者,酌情給分,答D者,不合格處理,答E
者,簡(jiǎn)
直是在找
死,立即辭退)
8、技術(shù)支援工程師工作的特點(diǎn)()
A、白天睡覺(jué),晚上干活
B、用戶隨叫隨到
C、用戶就是上帝,用戶怎么說(shuō),我們就怎么做
D、我是上帝,我想咋干就咋干
(答案:ABC,答D者,立即辭退)
9、在與客戶開(kāi)會(huì)及紙面件交流時(shí),你會(huì)使用()來(lái)稱(chēng)呼對(duì)方
A、局方 B、用戶 C、客戶 D、貴公司
(答案:BCD,答A者,立即辭退,我司三令五申禁止使用該華為內(nèi)部土語(yǔ),屢
禁不
止,
老員工不可教也,只好從新員工抓起,格殺勿論)
10、工程師甲對(duì)乙說(shuō):“晚上不去泡吧嗎”,乙說(shuō):“哦,真不巧,我晚上要
去市
局割接,下次吧”。
請(qǐng)問(wèn)乙指的“割接”是什么意思()
A、發(fā)貨電纜不夠長(zhǎng),從別的地方割一段,然后接上
B、一個(gè)工程師替換另一個(gè)工程師守局,交接的時(shí)候要寫(xiě)一個(gè)報(bào)告,然后從中
割開(kāi),
一人拿一半。
C、局里晚上有一個(gè)慶祝活動(dòng),請(qǐng)他剪彩。
D、業(yè)務(wù)從舊系統(tǒng)上倒到新系統(tǒng)上
(答案:D,答錯(cuò)者,按不合格處理)
11、工程師A某周日晚正在家里看電視,突然手機(jī)響了,電信局運(yùn)維員工突然
打電話過(guò)來(lái),小A接起電話,用戶聲音很急迫,說(shuō):“不好了,癱了,你快來(lái)
處理”
。
請(qǐng)問(wèn)這里“癱了”最有可能是什么意思()
A、設(shè)備漏電將維護(hù)人員電癱了
B、設(shè)備支架不夠結(jié)實(shí),被壓癱了
C、設(shè)備壞了,將維護(hù)人員嚇癱了
D、設(shè)備壞了,大面積業(yè)務(wù)中斷了
(答案:D,答錯(cuò)者,按不合格處理)
12、案例分析:某位局長(zhǎng)到傳輸機(jī)房視察工作時(shí),被某物砸傷了腦袋瓜,請(qǐng)問(wèn)
,它
最有可能是()
A、SS02PBS電源盒蓋板
B、SS03PBS電源盒蓋板
C、子架蓋板
D、防雷盒
(答案:A)
---doom2
回復(fù)[3]:13、下雨了,打雷了,你會(huì)()
A、收衣服
B、擔(dān)心網(wǎng)上運(yùn)行的設(shè)備遭到雷公襲擊
C、擔(dān)心強(qiáng)盜偷襲機(jī)房?jī)?nèi)的設(shè)備
D、擔(dān)心食堂開(kāi)飯會(huì)晚點(diǎn)
(答案:B)
14、夜深人靜,輾轉(zhuǎn)反側(cè)的你正在考慮小布什與科爾誰(shuí)當(dāng)選總統(tǒng)會(huì)對(duì)中國(guó)更有
利時(shí)
,
突然手機(jī)響了,最有可能發(fā)生的是()
A、主管也睡不覺(jué),想找你喝酒
B、狐朋狗友找你去蹦的
C、用戶找你,因?yàn)闃I(yè)務(wù)斷了
D、打錯(cuò)了,是騷擾電話
(答案:D)
15、請(qǐng)你選擇出最常用的排除故障的方法()
A、復(fù)位 B、拔插 C、掉電 D、禱告 C、燒香拜神
(答案:ABC)
16、了為有效降低成本,除了()的電話,其它的電話一律不接,然后用固定
電話
回拔過(guò)去
A、陌生的號(hào)碼
B、很熟悉的用戶
C、不很熟悉的用戶
D、主管與同事
E、狐朋狗友
F、老婆
(答案:C)
17、論文題目:驚心動(dòng)魄的一夜
本題的目的是考新員工的文筆,為技術(shù)案例及技術(shù)論文作準(zhǔn)備。
寫(xiě)作要求:
1)、故事情節(jié)必須包括:
①業(yè)務(wù)割接;
②重大事故;
③事故上報(bào);
④局長(zhǎng)親自督陣;
⑤業(yè)務(wù)中斷時(shí)間不小于5小時(shí);
⑥未造成特別惡劣的影響;
⑦描述電話內(nèi)容個(gè)數(shù)不少于30個(gè);
⑧事件發(fā)生有準(zhǔn)確的時(shí)間點(diǎn),精確到秒;
⑨復(fù)位,拔插,換板;
⑩涉及人物不少于20個(gè)。
2)、要體現(xiàn)一個(gè)工程師如何排除萬(wàn)難,在巨大的精神壓力下冷靜沉著,終于解
決問(wèn)
題,
表現(xiàn)了一個(gè)華為工程師優(yōu)良的單兵作戰(zhàn)能力。
3)、字?jǐn)?shù)不少于3000字,不超過(guò)3500字。
18、如果A站和B站之間出現(xiàn)B2誤碼,問(wèn)題可能在()板
A、A站T16
B、A站R16
C、A站ASP
D、A站X16
E、B站T16
F、B站R16
G、B站ASP
H、B站X16
I、以上答案均不正確
(答案:ABCDEFGH)
19、接上題,上述故障現(xiàn)象最有可發(fā)生的地點(diǎn)是()
A、江西九江
B、佳木斯本地網(wǎng)
C、河南信陽(yáng)
D、沈陽(yáng)城域
(答案:A)
20、接上上題,如果讓你去維護(hù)A站與B站之間的B2問(wèn)題,你會(huì)攜帶哪些必帶物
品(
)
A、便攜機(jī)
B、T16、R16、X16、ASP各一塊
C、工具箱
D、私人行李
E、2M誤碼表
F、光功率計(jì)
G、老婆
(答案:ABCDEF,有句名言,華為工程師出差,除了老婆,什么都得帶)
21、接上題,對(duì)于上述出差必備物品,你會(huì)最佳的攜帶方法是()
A、左肩便攜機(jī)、右肩工具箱、左手儀表、右手備板、身后行李
B、右肩便攜機(jī)、左肩工具箱、右手儀表、左手備板、身后行李
C、讓老子拿這么多東西出差,早知道這樣,老子就不來(lái)華為用服了
(答案:AB,重復(fù)那句名言,華為工程師出差,除了老婆,什么都得帶)
22、接上題,對(duì)于上述情況,你如何打車(chē)?()
A、向過(guò)路司機(jī)擠眉弄眼,眉來(lái)眼去,注意,盡量使用媚眼
B、將手中的物品放下,向司機(jī)打手勢(shì)
C、啥都不用,將一只腳抬起向司機(jī)示意即可
D、放開(kāi)嗓子喊,出租車(chē)!
(答案:C,經(jīng)實(shí)踐證明,這招很管用)
23、接18題,如果A與B點(diǎn)相距40KM,在A站已經(jīng)定位出B站有問(wèn)題,則從A站下
午
13點(diǎn)鐘開(kāi)車(chē)前去換板,車(chē)子時(shí)速80KM,需求多長(zhǎng)時(shí)間才能回到A站?()
A、2小時(shí)左右
B、8小時(shí)左右
C、12小時(shí)左右
D、24小時(shí)左右
E、48小時(shí)左右
(答案:D,答A者開(kāi)除。因?yàn)楝F(xiàn)場(chǎng)后,白天不能換板,然后等到午夜12點(diǎn)以后
才可
以換板,
次日繼續(xù)留守觀察一上午后,次日下午才能返回)
【第四部分 生活篇】
1、以下手段可以蒙混入關(guān)的是()
A、外地身份證 B、良民證 C、邊防證 D、深圳特區(qū)暫住證 E、華為工卡
F、婚育證明 G、結(jié)婚證 H、乘華為班車(chē)
(答案:CDH)
2、如下哪些證件可以應(yīng)付當(dāng)?shù)鼐游瘯?huì)的計(jì)劃生育檢查()
A、婚育證明 B、不育證明 C、結(jié)婚證 D、邊防證
(答案:A)
3、華為公司員工在業(yè)余時(shí)間不允許做的事情()
A、打麻將 B、玩撲克 C、出入不健康場(chǎng)所 D、將工卡帶在胸前炫耀 E、按摩
洗頭
(答案:ACD)
4、你可以通過(guò)以下途徑出租或求租住房及買(mǎi)賣(mài)二手商品()
A、生協(xié)Notes B、Notes Mail C、華為電子公告牌
D、一位辭職員工辦的個(gè)人主頁(yè)〖華為專(zhuān)用物業(yè)公告欄〗,地址
http://202.
105.55.
110/hw/
(答案:D)
5、華為工卡可以用來(lái)()
A、在深銀聯(lián)ATM機(jī)上取款
B、在華為小賣(mài)部買(mǎi)東西
C、在華為食堂**吃早餐
D、只要蹭到晚9點(diǎn),就可以到食堂領(lǐng)**的宵夜
(答案:BD)
6、在購(gòu)買(mǎi)機(jī)票時(shí),正常人可以打7折,如果你憑華為工卡,可以打()
A、5折
B、7折
C、8折
D、97折
(答案:D)
7、如下線路中,票價(jià)最便宜的是()
A、113
B、204
C、226
D、331
(答案:C)
8、如下線路中,小偷最多的是()
A、113
B、204
C、226
D、331
(答案:BC)
9、如下線路中,不能到新時(shí)代廣場(chǎng)的是()
A、113
B、204
C、226
D、331
E、437
F、22
(答案:E)
10、如下線路中,哪一個(gè)線路能到新時(shí)代廣場(chǎng)但不能坐的是()
A、113
B、204
C、226
D、217
E、437
F、22
(答案:F,因?yàn)樗@很遠(yuǎn),上班會(huì)遲到)
11、在新時(shí)代廣場(chǎng),如果你既想拿宵夜,又想坐班車(chē),你會(huì)()
A、晚8:50去一樓刷卡,再馬上跑到三樓,準(zhǔn)排第一,再叫大師傅將宵夜包好
,
卡機(jī)時(shí)間比快那么幾分鐘,到點(diǎn)刷卡后,馬上順樓梯飛奔到停車(chē)場(chǎng)即可,注
意千萬(wàn)不是坐電梯。
B、蹭到晚9點(diǎn)鐘以后,領(lǐng)完宵夜,再混一會(huì)兒,坐晚9點(diǎn)以后的班車(chē)
C、算了,本來(lái)魚(yú)和熊掌就不能兼得,老子不領(lǐng)了,下班就回家
(答案:AB)
12、到辦事處出差,當(dāng)?shù)匕才拍阕」镜募w宿舍,真倒霉,同屋的哥們雷聲
隆隆
,你會(huì)()
A、推醒他,給他一個(gè)紅牌警告
B、找辦事處主任理論
C、忍了,到客廳凳子上將就一下
D、不受那份氣,搬家,到賓館開(kāi)房間
E、武力解決,找本厚書(shū),如華為文摘、走出混飩、培訓(xùn)手冊(cè)等,很很的砸那
位哥們
一下
F、戴上耳機(jī),聽(tīng)走扁美國(guó)
G、頭上蒙上厚被,裝聽(tīng)不見(jiàn)
H、故意打出更響的呼嚕,嚇一嚇那位哥們
(答案:該無(wú)標(biāo)準(zhǔn)答案,只要不選BD,答D者,按不合格處理)
13、出差回來(lái),發(fā)現(xiàn)出差前還在宿舍中的自己的拖鞋不翼而飛,你會(huì)()
A、死活要將屬于自己的東西找回來(lái),毫不在乎地接著穿
B、死活要將屬于自己的東西找回來(lái),用開(kāi)水燙燙或用消毒水處理一下,然后
接著穿
C、死活要將屬于自己的東西找回來(lái),然后丟到垃圾桶里
D、不要了,再買(mǎi)一雙新的,以免得腳氣
E、隨便找一雙穿,管它是誰(shuí)的
F、發(fā)誓下次出差前一定要將自己的拖鞋藏起來(lái)
(答案:該無(wú)標(biāo)準(zhǔn)答案,因?yàn)槊總€(gè)人的個(gè)性不同)
14、請(qǐng)從如下四個(gè)句子中選擇一個(gè)正確的描述()
A、人最寶貴的是生命
B、人,最寶貴的是生命
C、生命對(duì)于人是最寶貴的
D、對(duì)于人,沒(méi)有比生命更寶貴的
(答案:D)
回復(fù)[5]:15、請(qǐng)問(wèn)馬路邊的“風(fēng)炮補(bǔ)胎”是()
A、是汽車(chē)修理店的一種招牌,“補(bǔ)胎”是一種維修業(yè)務(wù),“風(fēng)炮”是一位很
有名氣
的修車(chē)大師,收了很多徒弟,所以,徒第們往往打著師傅的名氣開(kāi)店,于是,
街
道就是了N多的風(fēng)炮補(bǔ)胎執(zhí)招牌。這與“狗不理包子”類(lèi)似。
B、是汽車(chē)修理店的一種招牌,“風(fēng)炮”是一種高效的補(bǔ)胎工具。
C、是汽車(chē)修理店的一種招牌,“風(fēng)炮”是一該店的修車(chē)師傅的名字,與“王
麻子”
剪刀類(lèi)似。
D、是自行車(chē)修理店的一種招牌,“風(fēng)炮”是一種快速粘膠,該膠補(bǔ)自行車(chē)胎
即快又
好。
(答案:B)
16、請(qǐng)問(wèn),距離新時(shí)代廣場(chǎng)最近的“風(fēng)炮補(bǔ)胎”招牌在()
A、從黃貝嶺至蛇口113大巴線的新時(shí)代廣場(chǎng)下車(chē)點(diǎn)的馬路對(duì)面
B、從蛇口至黃貝嶺113大巴線的新時(shí)代廣場(chǎng)上車(chē)點(diǎn)的馬路邊上
C、別騙人了,新時(shí)代廣場(chǎng)附近壓根就沒(méi)有
(答案:AB)
17、如下廣告詞正確的是()
A、用一天的電,花兩天的錢(qián)
B、用兩天的電,花一天的錢(qián)
C、新飛冰箱好,不如新飛廣告做的好
D、新飛廣告做的好,不如新飛冰箱好
(答案:BD)
18、請(qǐng)問(wèn),你最討厭如下哪些就餐行為()
A、早餐不刷卡,用10塊錢(qián)買(mǎi)
B、早餐買(mǎi)N樣
C、米飯打N下
D、餐紙扯N長(zhǎng)
E、夜宵領(lǐng)N樣
F、就餐完畢不做5S,雞蛋皮、筷子皮亂扔在餐桌上
G、走路時(shí)不照顧自己的餐盤(pán),將餐液濺灑在他人身上
H、吃飯咂咂響,喝湯吃面條呼嚕呼嚕叫
J、在一個(gè)擁擠的電梯里,某人手持一盒瘋牛牛奶,使出吃奶的勁狂吸
K、領(lǐng)9點(diǎn)鐘的夜宵,坐9點(diǎn)鐘的班車(chē)
1.設(shè)計(jì)函數(shù) int atoi(char *s)。
2.int i=(j=4,k=8,l=16,m=32); printf(“%d”, i); 輸出是多少?
3.解釋局部變量、全局變量和靜態(tài)變量的含義。
4.解釋堆和棧的區(qū)別。
5.論述含參數(shù)的宏與函數(shù)的優(yōu)缺點(diǎn)。