C语言 ,嵌入式 ,数据结构 面试题目(2)
生活随笔
收集整理的這篇文章主要介紹了
C语言 ,嵌入式 ,数据结构 面试题目(2)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
100
struct name1{
? char str;? short x;
? int ?num;
}
struct name2{
? char str;
? int num;
? short x;
}
sizeof(struct name1)=8,sizeof(struct name2)=12
101讀文件file1.txt的內容(例如):
12
34
56
輸出到file2.txt:
56
34
12
(逆序)
2)輸出和為一個給定整數的所有組合
例如n=5
5=1+4;5=2+3(相加的數不能重復)
則輸出
1,4;2,3。
注意可增長數組的應用.
#i nclude <stdio.h>
#i nclude <stdlib.h>
int main(void)
{
? ? ? ? int MAX = 10;
int *a = (int *)malloc(MAX * sizeof(int));
int *b;
? ?
FILE *fp1;
FILE *fp2;
fp1 = fopen("a.txt","r");
if(fp1 == NULL)
{printf("error1");
? ?exit(-1);
}
? ? fp2 = fopen("b.txt","w");
if(fp2 == NULL)
{printf("error2");
? ?exit(-1);
}
int i = 0;
? ?int j = 0;
while(fscanf(fp1,"%d",&a[i]) != EOF)
{
i++;
j++;
if(i >= MAX)
{
MAX = 2 * MAX;
b = (int*)realloc(a,MAX * sizeof(int));
if(b == NULL)
{
printf("error3");
exit(-1);
}
a = b;
}
}
for(;--j >= 0;)
? fprintf(fp2,"%d\n",a[j]);
fclose(fp1);
fclose(fp2);
return 0;
}
102 一個遞規反向輸出字符串的例子,經典例程.
void inverse(char *p)
{
? ?if( *p = = '\0' )?
return;
? ?inverse( p+1 );
? ?printf( "%c", *p );
}
int main(int argc, char *argv[])
{
? ?inverse("abc\0");
? ? return 0;
}
103、用遞歸算法判斷數組a[N]是否為一個遞增數組。
遞歸的方法,記錄當前最大的,并且判斷當前的是否比這個還大,大則繼續,否則返回false結束:
bool fun( int a[], int n )
{
if( n= =1 )
return true;
if( n= =2 )
return a[n-1] >= a[n-2];
return fun( a,n-1) && ( a[n-1] >= a[n-2] );
}
104 什么是可重入性?
可重入(reentrant)函數可以由多于一個任務并發使用,而不必擔心數據錯誤。相反,不可重入(non-reentrant)函數不能由超過一個任務所共享,除非能確保函數的互斥(或者使用信號量,或者在代碼的關鍵部分禁用中斷)。可重入函數可以在任意時刻被中斷,稍后再繼續運行,不會丟失數據。可重入函數要么使用本地變量,要么在使用全局變量時保護自己的數據。
105 可重入函數:
不為連續的調用持有靜態數據。
不返回指向靜態數據的指針;所有數據都由函數的調用者提供。
使用本地數據,或者通過制作全局數據的本地拷貝來保護全局數據。
如果必須訪問全局變量,記住利用互斥信號量來保護全局變量。
絕不調用任何不可重入函數。;
106.用最簡單的方法實現函數int strcmp(char *p1,char *p2)
int ret;
//while( *p1 && *p2 && !(ret=*p1-*p2) )
while(!(ret=*p1-*p2) && *p1 && *p2)
{
p1++;p2++;
}
return ret;
int strcmp(const char * cs,const char * ct)
{
register signed char __res;
while (1) {
if ((__res = *cs - *ct++) != 0 || !*cs++)
break;
}
return __res;
}
107什么是預編譯,何時需要預編譯:?
答案:?
1、總是使用不經常改動的大型代碼體。?
2、程序由多個模塊組成,所有模塊都使用一組標準的包含文件和相同的編譯選項。在這種情況下,可以將所有包含文件預編譯為一個預編譯頭。?
108 char * const p ? ? ?char const * p ? ? ?const char *p 上述三個有什么區別??
答案:?
char * const p; //常量指針,p的值不可以修改?
char const * p;//指向常量的指針,指向的常量值不可以改 const char *p; //和char const *p?
109 char str1[] = "abc"; char str2[] = "abc"; const char str3[] = "abc"; const char str4[] = "abc"; const char *str5 = "abc"; const char *str6 = "abc"; char *str7 = "abc"; char *str8 = "abc"; cout < < ( str1 == str2 ) < < endl; cout < < ( str3 == str4 ) < < endl; cout < < ( str5 == str6 ) < < endl; cout < < ( str7 == str8 ) < < endl;?
結果是:0 0 1 1 str1,str2,str3,str4是數組變量,它們有各自的內存空間;而str5,str6,str7,str8是指針,它們指向相同的常量區域。?
110以下代碼中的兩個sizeof用法有問題嗎??
void UpperCase( char str[] ) // 將 str 中的小寫字母轉換成大寫字母?
{ ? ?
for( size_t i=0; i <sizeof(str)/sizeof(str[0]); ++i ) ? ? ? ?
if( 'a' <=str[i] && str[i] <='z' ) ? ? ? ? ? ?
str[i] -= ('a'-'A' );
}?
char str[] = "aBcDe";
cout < < "str字符長度為: " < < sizeof(str)/sizeof(str[0]) < < endl;?
UpperCase( str );
cout < < str < < endl;?
答案:函數外的str是一個靜態定義的數組,因此其大小為6,因為還有'\0',
函數內的str返回4。?
111一個32位的機器,該機器的指針是多少位答案:?
指針是多少位只要看地址總線的位數就行了。80386以后的機子都是32的數據總線。所以指針的位數就是4個字節了。?
112。
main()?
{ ?
int a[5]={1,2,3,4,5}; ? ?
int *ptr=(int *)(&a+1); ? ?
printf("%d,%d",*(a+1),*(ptr-1));?
} 答案:2。5?
113。請問以下代碼有什么問題:
int ?main()
{
?char a;
?char *str=&a;
?strcpy(str,"hello");
?printf(str);?
return 0;?
} 答案:沒有為str分配內存空間,將會發生異常問題出在將一個字符串復制進一個字符變量指針所指地址。雖然可以正確輸出結果,但因為越界進行內在讀寫而導致程序崩潰。?
114。
char* s="AAA";
printf("%s",s);?
s[0]='B';?
printf("%s",s);?
有什么錯?
答案:"AAA"是字符串常量。s是指針,指向這個字符串常量,所以聲明s的時候就有問題。 cosnt char* s="AAA"; 然后又因為是常量,所以對是s[0]的賦值操作是不合法的。?
115。寫一個“標準”宏,這個宏輸入兩個參數并返回較小的一個。
答案:.#define Min(X, Y) ((X)>(Y)?(Y):(X)) ?//結尾沒有‘;’?
116。嵌入式系統中經常要用到無限循環,你怎么用C編寫死循環。答案:while(1){}或者for(;;)?
117。關鍵字static的作用是什么?答案:定義靜態變量?
118。關鍵字const有什么含意?答案:表示常量不可以修改的變量。?
119。關鍵字volatile有什么含意?并舉出三個不同的例子?
答案:一個定義為volatile的變量是說這變量可能會被意想不到地改變,這樣,編譯器就不會去假設這個變量的值了。精確地說就是,優化器在用到這個變量時必須每次都小心地重新讀取這個變量的值,而不是使用保存在寄存器里的備份。下面是volatile變量的幾個例子:?
1). 并行設備的硬件寄存器(如:狀態寄存器)?
2). 一個中斷服務子程序中會訪問到的非自動變量(Non-automatic variables)?
3). 多線程應用中被幾個任務共享的變量?
?
120。int (*s[10])(int) 表示的是什么啊?
答案:int (*s[10])(int) 函數指針數組,每個指針指向一個int func(int param)的函數。?
121。有以下表達式:?
int a=248; ?int b=4;?
int const c=21; ?const int *d=&a; ?
int *const e=&b; ?int const *f const =&a;?
請問下列表達式哪些會被編譯器禁止?為什么? *c=32;d=&b;*d=43;e=34;e=&a;f=0x321f;?
答案:
*c 這是個什么東東,禁止 *d 說了是const, 禁止 e = &a 說了是const ,?
禁止 const *f const =&a; 禁止?
122交換兩個變量的值,不使用第三個變量。即a=3,b=5,交換之后a=5,b=3; 答案:有兩種解法, 一種用算術算法, 一種用^(異或)
?a = a + b; b = a - b; a = a - b;?
or a = a^b; b = a^b; a = a^b; or a ^= b ^= a; ?// 只能對int,char.
123.c和c++中的struct有什么不同?
答案:c和c++中struct的主要區別是c中的struct不可以含有成員函數,而c++中的struct可以。c++中struct和class的主要區別在于默認的存取權限不同,struct默認為public,而class默認為private?
124.進程之間通信的途徑答案:共享存儲系統消息傳遞系統管道:以文件系統為基礎?
125.進程死鎖的原因答案:資源競爭及進程推進順序非法?
126.死鎖的4個必要條件答案:互斥、請求保持、不可剝奪、環路?
127.死鎖的處理答案:鴕鳥策略、預防策略、避免策略、檢測與解除死鎖?
128. ?操作系統中進程調度策略有哪幾種?答案:FCFS(先來先服務),優先級,時間片輪轉,多級反饋?
129.類的靜態成員和非靜態成員有何區別?答案:類的靜態成員每個類只有一個,非靜態成員每個對象一個?
130.純虛函數如何定義?使用時應注意什么?答案:virtual void f()=0; 是接口,子類必須要實現?
131.數組和鏈表的區別答案:數組:數據順序存儲,固定大小連表:數據可以隨機存儲,大小可動態改變?
132.ISO的七層模型是什么?tcp/udp是屬于哪一層?tcp/udp有何優缺點?
答案:
應用層,表示層,會話層,運輸層,網絡層,物理鏈路層,物理層?
tcp /udp屬于運輸層?
TCP 服務提供了數據流傳輸、可靠性、有效流控制、全雙工操作和多路復用技術等。與 TCP 不同, UDP 并不提供對 IP 協議的可靠機制、流控制以及錯誤恢復功能等。由于 UDP 比較簡單, UDP 頭包含很少的字節,比 TCP 負載消耗少。?
tcp: 提供穩定的傳輸服務,有流量控制,缺點是包頭大,冗余性不好?
udp: 不提供穩定的服務,包頭小,開銷小 ?
133:(void *)ptr 和 (*(void**))ptr的結果是否相同?其中ptr為同一個指針
答案:.(void *)ptr 和 (*(void**))ptr值是相同的?
134:
int main() ? ?
{ ? ?int x=3; ? ?printf("%d",x); ? ?return 1; ? ? ?} 問函數既然不會被其它函數調用,為什么要返回1?
答案:mian中,c標準認為0表示成功,非0表示錯誤。具體的值是某中具體出錯信息?
136,已知一個數組table,用一個宏定義,求出數據的元素個數’
答案:
?#define NTBL (sizeof(table)/sizeof(table[0]))?
137 . -1,2,7,28,,126請問28和126中間那個數是什么?為什么?
答案:答案應該是4^3-1=63 規律是n^3-1(當n為偶數0,2,4) ? ? ?n^3+1(當n為奇數1,3,5)?
138。對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C++中應用什么實現??
答案:c用宏定義,c++用inline?
139。直接鏈接兩個信令點的一組鏈路稱作什么? 答案:PPP點到點連接?
140。軟件測試都有那些種類? 答案:黑盒:針對系統功能的測試 ? ?白合:測試函數功能,各函數接口?
141。確定模塊的功能和模塊的接口是在軟件設計的那個隊段完成的? 答案:概要設計階段?
142。enum string ? ?{ ? ?x1, ? ?x2, ? ?x3=10, ? ?x4, ? ?x5, ? ?}x; ? ?問x;
答案:取值在0。1。10。11。12中的一個?
143。
unsigned char *p1; ? ?unsigned long *p2; ? ?
p1=(unsigned char *)0x801000; ? ?
p2=(unsigned long *)0x810000; ? ?
請問p1+5= ?; ? ? ? ?p2+5= ?;?
答案:801005;810014。不要忘記了這個是16進制的數字,p2要加20變為16進制就是14?
: ?
144.Ethternet鏈接到Internet用到以下那個協議? B ?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID ?
145.屬于網絡層協議的是: A ?
A.TCP;B.IP;C.ICMP;D.X.25 ?
146.Windows消息調度機制是: C ?
A.指令隊列;B.指令堆棧;C.消息隊列;D.消息堆棧;?
147.請問下面程序有什么錯誤? ? ?
int a[60][250][1000],i,j,k; ? ?
for(k=0;k <=1000;k++) ? ?
for(j=0;j <250;j++) ? ? ?
for(i=0;i <60;i++) ? ? ?
a[i][j][k]=0;?
答案:把循環語句內外換一下?
148。以下是求一個數的平方的程序,請找出錯誤: ? ?
#define SQUARE(a) ?((a)*(a)) ? ?
int a=5; ? ?int b; ? ?
b=SQUARE(a++);?
答案:這個沒有問題,s(a++),就是((a++)×(a++))唯一要注意的就是計算后a=7了?
149。
typedef unsigned char BYTE ? ? ?
int examply_fun(BYTE gt_len; BYTE *gt_code) ? ? ?
{ ? ? ? ?
BYTE *gt_buf; ? ? ?gt_buf=(BYTE *)MALLOC(Max_GT_Length); ? ? ?...... ? ? ?if(gt_len>Max_GT_Length) ? ? ? ?
{ ? ? ? ?
return GT_Length_ERROR; ? ? ? ? ?
} ? ? ??
?....... ? ? ?
} 答案:要釋放內存問答題:?
150.TCP/IP通信建立的過程怎樣,端口有什么作用?
答案:三次握手,確定是哪個應用程序使用該協議?
151、局部變量能否和全局變量重名?
答案:能,局部會屏蔽全局。要用全局變量,需要使用"::" ? 局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數內可以定義多個同名的局部變量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體內?
152、如何引用一個已經定義過的全局變量?
答案:extern 可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯?
153、全局變量可不可以定義在可被多個.C文件包含的頭文件中?為什么?答案:可以,在不同的C文件中以static形式來聲明同名全局變量。可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯?
154、static全局變量與普通的全局變量有什么區別?static局部變量和普通局部變量有什么區別?static函數與普通函數有什么區別?
答案:全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式,靜態全局變量當然也是靜態存儲方式。 這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序, 當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。而靜態全局變量則限制了其作用域, 即只在定義該變量的源文件內有效, 在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域,限制了它的使用范圍。 static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件 static全局變量與普通的全局變量有什么區別:static全局變量只初使化一次,防止在其他文件單元中被引用; static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值; static函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝?
155、判斷題(對的寫T,錯的寫F并說明原因,每小題4分,共20分)?
1、有數組定義int a[2][2]={{1},{2,3}};則a[0][1]的值為0。( ? ?正確 )?
2、int (*ptr) (),則ptr是一維數組的名字。(錯誤 ?int (*ptr) ();定義一個指向函數的指針變量 ? ?)?
3、指針在任何情況下都可進行>, <,>=, <=,==運算。( ?錯誤 ?)?
4、switch(c) 語句中c可以是int ,long,char ,float ,unsigned int 類型。( ?錯,不能用實形 )?
156、填空題(共30分)?
1、在windows下,寫出運行結果,每空2分,共10分。?
char str[ ]= "Hello"; char *p=str; int n=10; sizeof(str)=( ? ? ?) sizeof(p)=( ? ? ?) sizeof(n)=( ? ? ?) void func(char str[100]){ ? ?} sizeof(str)=( ? ?) ?
答案:6,4,4,4,?
156、 ?不使用庫函數,編寫函數int strcmp(char ?*source, char *dest) 相等返回0,不等返回-1;?
答案:一、
int strcmp(char ?*source, char *dest)?
{ ?
assert((source!=NULL)&&(dest!=NULL)); ?
int i,j; ?
for(i=0; source[i]==dest[i]; i++) ?
{ ?
if(source[i]=='\0' && dest[i]=='\0') ? ?
return 0;?
else ? ?
return -1; ?
}?
}?
答案:二、?
int strcmp(char *source, char *dest)
{ ? ?while ( (*source != '\0') && (*source == *dest)) ??
?{
?source++; dest++; ? ?
} ? ?
return ( (*source) - (*dest) ) ? -1 : 0;
?}?
157寫一函數int fun(char *p)判斷一字符串是否為回文,是返回1,不是返回0,出錯返回-1?
答案:一、?
int fun(char *p)
{ ?if(p==NULL) ?
return -1; ?
else ?
{ ?int length = 0; ?int i = 0; ?int judge = 1; ?length = strlen(p); ?
for(i=0; i <length/2; i++) ?
{ ? ?if(p[i]!=p[length-1-i]) ??
?judge = 0; ? ?
break; ?
} ?
if(judge == 0) ? ?
return 0; ?
else ? ?
return 1; ?
}?
}?
答案:二、?
int fun(char *p)
{?
int len = strlen(p) - 1;
char *q = p + len;?
if (!p) return -1;
while (p < q)?
{?
if ((*p++) != (*q--))?
return 0;?
}?
return 1;
} ?
158
1.在OSI 7 層模型中,網絡層的功能有( B)?
A.確保數據的傳送正確無誤 ?B.確定數據包如何轉發與路由 C.在信道上傳送比特流 ? ?D.糾錯與流控?
2.FDDI 使用的是___局域網技術。(C )?
A.以太網; ? ?B.快速以太網; ? ?C.令牌環; ? ?D.令牌總線。
注: (光纖分布數據接口(FDDI)是目前成熟的LAN技術中傳輸速率最高的一種)
3.下面那種LAN 是應用CSMA/CD協議的(C)?
A.令牌環 ? ?B.FDDI ? ?C.ETHERNET ? ?D.NOVELL?
4.TCP 和UDP 協議的相似之處是 (C )?
A.面向連接的協議 ? ?B.面向非連接的協議 ? ?C.傳輸層協議 ? ?D.以上均不對?
5.應用程序PING 發出的是___報文.(C )
?A.TCP 請求報文。 ? ?B.TCP 應答報文。 ? ?C.ICMP 請求報文。 ?D.ICMP 應答報文。?
6.以下說法錯誤的是(多) (BD )?
A.中繼器是工作在物理層的設備 ? ?B.集線器和以太網交換機工作在數據連路層 C.路由器是工作在網絡層的設備 ? ?D.橋能隔離網絡層廣播?
7.當橋接收的分組的目的MAC地址在橋的映射表中沒有對應的表項時,采取的策略是( C)
?A.丟掉該分組 ?B.將該分組分片 ? ?C.向其他端口廣播該分組 ? ?D.以上答案均不對?
8.LAN Switch 在網絡層次模型中的地位( B)?
A.物理層 ? ?B.鏈路層 ? ?C.網絡層 ? ?D.以上都不是?
9.小于___的TCP/UDP端口號已保留與現有服務一一對應,此數字以上的端口號可自由分配。( C)?
A.199 ? ? ?B.100 ? ?C.1024 ? ? ?D.2048?
10.當一臺主機從一個網絡移到另一個網絡時,以下說法正確的是 (B )?
A.必須改變它的IP 地址和MAC 地址 ? ?B.必須改變它的IP 地址,但不需改動MAC 地址 C.必須改變它的MAC 地址,但不需改動IP 地址 ? ?D.MAC 地址.IP 地址都不需改動
159. 找錯?
#define MAX_SRM 256?
DSNget_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;?
}?
答: 1,SRM_no沒有賦初值?
2,由于static的聲明,使該函數成為不可重入(即不可預測結果)函數,因為SRM_no變量放在程序的全局存儲區中,每次調用的時候還可以保持原來的賦值。這里應該去掉static聲明。?
160. 寫出程序運行結果?
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 該題比較簡單。只要注意b聲明為static靜態全局變量,其值在下次調用時是可以保持住原來的賦值的就可以。?
161 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,因為沒有break語句,switch中會一直計算到b=0。這是提醒我們不要忘了break?
162: ?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;這題是要告訴我們指針的運算特點?
163. 定義 int **a[3][4], 則變量占有的內存空間為:_____?
答:此處定義的是指向指針的指針數組,對于32位系統,指針占內存空間4字節,因此總空間為3×4×4=48。
164.設有int a=3;則執行語句a+=a-=a*a;后
變量a的值是? ?
答案:-12
165. Struct RegX
{
long bzy:1;
long wrt:1;
? ?long rd:1;
long cnt:4;
long rsd:25;
};
Sizeof(RegX)=?
答案:4
166?
Char a[]=“hello\0”;
Char al[7]=“hello”;
Char *ps=“hello”;
Strlen(a)= ? Strlen(a1)= ? Strlen(ps)= ?
Sizeof(a)= ? Sizeof(a1)= ? Sizeof(ps)= ?
5 5 5 ,7 7 4?
167.對于下面的函數,要求打印出”hello”,子程序完全正確的是_(1)(3)_, 一定能打印出”hello”的是_(1)(3)(4)_,有錯誤的是__(2)(4)
char *GetHellostr(void);
int main(void)
{
char *ps;
ps= GetHellostr( );
if(ps != NULL)
{
printf(ps);
}
return 0;
}
(1)
char *GetHellostr(void)
{
char *ps=“hello”;
return ps;
}
(2)
char *GetHellostr(void)
{
? ? char a[]=“hello”;
return (char *)a;
}
(3)
char *GetHellostr(void)
{
static char a[]=“hello”;
return (char *)a;
}
(4)
char *GetHellostr(void)
{
char *ps;
ps = malloc(10);
if(NULL ==ps) return NULL;
strcpy(ps,”hello”);
return ps;
}
168.
void foo(void)
{
unsigned int a;
int ?b = -7;
a=6;
(a+b>6)? puts(“>6”):puts(“<=b”);
a=8;
(a+b>8)? puts(“>8”):puts(“<=8”);
}
些函數執行結果是? ?> 6 ?<=8
169.
下面程序分別只改到一處,就OK了,要求打印出”welcome to ?huawei”
(1)
void main(void)
{
char str1[]=“welcome”;
char str2[]=“to”;
char str3[]=“huawei”;
char str[50];
memcpy(str,str1,sizeof(str1));
memcpy(str+sizeof(str1),str2,sizeof(str2));
memcpy(str+strlen(str1)+strlen(str2), str3,sizeof(str3));
printf(str);
}
(2)
void main(void)
{
char str1[]=“welcome”;
char str2[]=“to”;
char str3[]=“huawei”;
char str[50];
memcpy(str,str1, strlen(str1));
memcpy(str+strlen(str1),str2, strlen(str2));
memcpy(str+strlen(str1)+strlen(str2), str3, strlen(str3));
printf(str);
}
170
Struct tag
{
short c;
long b;
char d;
long a;
}
Sizeof(tag)可能的值?
171.找出程序中的所有錯誤
//分配len的長度的內存,內存地址由ptr輸出
void test_malloc(char **prt, int len)
{
char *tmp=NULL;
tmp=(char*)malloc(len);
*prt=tmp;
}
void main(void)
{
char *str=“welcome to huawei”;
char *buf;
char c=0xff;
test_malloc(&buf, sizeof(str));//strlen(str)+1
if(buf ==NULL)//(NULL == buf)
{
return;
}
strcpy(buf , str);
if( c==(char)0xff)
{
printf(“OK,str=%s”,buf);
}
else
{
printf(“OH my God!”);
}
free(buf);
}
172.問題
union a {
?int a_int1;
?double a_double;
?int a_int2;
};
? typedef struct
{
?a a1;
?char y;
} b;
問題sizeof(b) ??
173:下面這個程序執行后會有什么錯誤或者效果:
?#define MAX 255
?int main()
{
? ?unsigned char A[MAX],i;
? ?for (i=0;i<=MAX;i++)
? ? ?A[i]=i;
}
174, 用遞歸法將整數轉化為符串?
Void convert( int n )
{ int i;
Char c;
if ((i=n/10)!=0)
? ?convert(i);
c=n%10 +’0’;
cout<<” “<<c;
}
175 用折半查找法求一個數? 數組a已按從小到大的順序排列
while((!sign) && (bott <= top))
{
mid=(bott + top)/2;
? ? ?if(number ==a[mid])
{
local=mid;
printf(“the local is %d\n”,local);
printf(“the number is%d\n”, number);
sign =true;
}
else if(number <a[min])
? ?top = mid -1;
else
? ?bott=mid+1;
}
176 有一個字符串,將字符串從第m個字符開始全部復制到另一個新字符串?
void copystr( char *p1, char *p2, int m)
{
int n=0;
while(m<m-1)
{
n++;
p1++;
}
while(*p1 !=’/0’)
{
*p2=*p1;
p1++;
p2++;
}
*p2=’/0’;
}
177 排序問題?
問題一:寫出冒泡排序
void pop_sort(int a[],int N)
{ int tmp, i , j;
for(j=0; j<N; j++)
for( i=0; i<9-j; i++)
if( a[i]>a[i+1])
{tmp=a[i];
a[i]=a[i+1];
a[i+1]=tmp;
}
}
問題一:寫出選擇法排序
void select_sort(int a[],int N)
{ int ?i , j, k, t;
for(i=0; i<N; i++)
{
k=i;
? ?for( j=i+1; j<N; j ++)
if( a[j]<ak])
? k=j;
tmp=a[k];
a[k]=a[i];
a[i]=tmp;
}
}
鏈表問題匯總
178寫一函數creat, 用來建立一個動態鏈表,各結點數據由鍵盤輸入。
struct student
?{
? long num;
? float score;
? stuent *next;
?};
?
?student *creat (void)
?{
? student *head;
? student *p1=null,*p2=null;
? int n=0;
? p1=p2=new student;
? cin>>p1->num>>p1->score;
? head=null;
? while(p1->num !=0)
? {
? n=n+1;
? if(1==n) head=p1;
? else ?
? p2->next=p1;
? p2=p1;
? p1= new student;
? cin>>p1->mum>>p1->score;
? }
? p2->next =NULL;
? return (head);
?}
?
179,寫一print函數,將鏈表中的各數據遍歷輸出
? void print(student *head )
? {
? student *p;
? cout<<"there"<<n<<"records"<<endl;
? p=head;
? if(head!=NULL)
? do
? {
? cout<<p->num<<" "<<p->score<<endl;
? p=p->next;
? }while(p!=NULL)
? }
?
?180.寫一del函數,用來刪除動態鏈表中,指定的結點數據
?void *del(student *head, long num)
?{
? student *p1,*p2;
? if(head==NULL)
? {return (head);}
? p1=head;
? while(num!=p1->num && p1->next !=NULL)
? {
? p2=p1;
? p1=p1->next;
? }
? if(num == p1->num)
? {
? if(p1==head)
? head=p1->next;
? else
? p2->next=p1->next;
? cout<<"delete:"<<num<<endl;
? n=n-1;
? }
? else
? cout<<"can not find"<<num;
? return(head);
?}
?181 寫一函數insert,用來向動態鏈表插入一結點
?Student *insert(student *head, student *stud)
?{
? student *p0 ,*p1, *p2;
? p1=head;
? p0=stud;
? if(head == NULL)
? {
? head=p0;
? p0->next=NULL;
? }
? else
? {
? while((p0->num >p1->num) && (p1->next!=NULL) )
? {
? p2=p1;
? p1=p1->next;
? }
? if(p0->num <= p1->num)
? {
? if(head ==p1)
? head=p0;
? else
? p2->next=p0;
? p0->next=p1;
? }
? else
? {
? p1->next=p0;
? p0->next=NULL;
? }
? }
? n=n+1;
? return(head);
??
?}
總結
以上是生活随笔為你收集整理的C语言 ,嵌入式 ,数据结构 面试题目(2)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JAVA的MySQL字符串拼接_MySQ
- 下一篇: 人人开源中invalid Code