?? c語言常見筆試題.txt
字號:
網友xue23(xue23) 的答案和分析:
有程序查一下各個變量的內存地址得知:
各個變量在內存中的位置為
c***aa**
bbbb****
dddddddd
測試代碼為:
s2 ss;
cout << "ss.c = " << &ss << endl ;
cout << "ss.d.a = " <<&ss.d.a << endl;
cout << "ss.d.b = " <<&(ss.d.b) < cout << "ss.d = " <<&ss.e << endl;
print out 各個變量的內存地址不就可以看出來了嗎。
所以答案是24,2.
但是我的想像中應該是這樣的分布情況:
c*******
aa**bbbb
dddddddd
不知為什么會c和a放在一起,組成8位長度。
coon @ 23:35:17 | 閱讀全文 | 評論 0 | 引用 0 | 編輯
c語言筆試題(七)
2006-09-06
Tag: C語言
找錯
Void test1()
{
char string[10];
char* str1="0123456789";
strcpy(string, str1);
}
Void test2()
{
char string[10], str1[10];
for(I=0; I<10;I++)
{
str1[i] ='a';
}
strcpy(string, str1);
}
Void test3(char* str1)
{
char string[10];
if(strlen(str1)<=10)
{
strcpy(string, str1);
}
}
2. 找錯
#define MAX_SRM 256
DSN get_SRM_no()
{
static int SRM_no;
int I;
for(I=0;I{
SRM_no %= MAX_SRM;
if(MY_SRM.state==IDLE)
{
break;
}
}
if(I>=MAX_SRM)
return (NULL_SRM);
else
return SRM_no;
}
3. 寫出程序運行結果
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));
}
}
4.
int func(int a)
{
int b;
switch(a)
{
case 1: 30;
case 2: 20;
case 3: 16;
default: 0
}
return b;
}
則func(1)=?
5:
int a[3];
a[0]=0; a[1]=1; a[2]=2;
int *p, *q;
p=a;
q=&a[2];
則a[q-p]=?
6.
定義 int **a[3][4], 則變量占有的內存空間為:_____
7.
編寫一個函數,要求輸入年月日時分秒,輸出該年月日時分秒的下一秒。如輸入2004年12月31日23時59分59秒,則輸出2005年1月1日0時0分0秒。
coon @ 23:34:38 | 閱讀全文 | 評論 0 | 引用 0 | 編輯
c語言筆試題(六)
2006-09-06
Tag: C語言
4. static有什么用途?(請至少說明兩種)
1.限制變量的作用域
2.設置變量的存儲域
7. 引用與指針有什么區別?
1) 引用必須被初始化,指針不必。
2) 引用初始化以后不能被改變,指針可以改變所指的對象。
2) 不存在指向空值的引用,但是存在指向空值的指針。
8. 描述實時系統的基本特性
在特定時間內完成特定的任務,實時性與可靠性
9. 全局變量和局部變量在內存中是否有區別?如果有,是什么區別?
全局變量儲存在靜態數據庫,局部變量在堆棧
10. 什么是平衡二叉樹?
左右子樹都是平衡二叉樹 且左右子樹的深度差值的絕對值不大于1
11. 堆棧溢出一般是由什么原因導致的?
沒有回收垃圾資源
12. 什么函數不能聲明為虛函數?
constructor
13. 冒泡排序算法的時間復雜度是什么?
O(n^2)
14. 寫出float x 與“零值”比較的if語句。
if(x>0.000001&&x<-0.000001)
16. Internet采用哪種網絡協議?該協議的主要層次結構?
tcp/ip 應用層/傳輸層/網絡層/數據鏈路層/物理層
17. Internet物理地址和IP地址轉換采用什么協議?
ARP (Address Resolution Protocol)(地址解析協議)
18.IP地址的編碼分為哪倆部分?
IP地址由兩部分組成,網絡號和主機號。不過是要和“子網掩碼”按位與上之后才能區分哪些是網絡位哪些是主機位。
2.用戶輸入M,N值,從1至N開始順序循環數數,每數到M輸出該數值,直至全部輸出。寫出C程序。
循環鏈表,用取余操作做
3.不能做switch()的參數類型是:
switch的參數不能為實型。
華為
1、局部變量能否和全局變量重名?
答:能,局部會屏蔽全局。要用全局變量,需要使用"::"
局部變量可以與全局變量同名,在函數內引用這個變量時,會用到同名的局部變量,而不會用到全局變量。對于有些編譯器而言,在同一個函數內可以定義多個同名的局部變量,比如在兩個循環體內都定義一個同名的局部變量,而那個局部變量的作用域就在那個循環體內
2、如何引用一個已經定義過的全局變量?
答:extern
可以用引用頭文件的方式,也可以用extern關鍵字,如果用引用頭文件方式來引用某個在頭文件中聲明的全局變理,假定你將那個變寫錯了,那么在編譯期間會報錯,如果你用extern方式引用時,假定你犯了同樣的錯誤,那么在編譯期間不會報錯,而在連接期間報錯
3、全局變量可不可以定義在可被多個.C文件包含的頭文件中?為什么?
答:可以,在不同的C文件中以static形式來聲明同名全局變量。
可以在不同的C文件中聲明同名的全局變量,前提是其中只能有一個C文件中對此變量賦初值,此時連接不會出錯
4、語句for( ;1 ;)有什么問題?它是什么意思?
答:和while(1)相同。
5、do……while和while……do有什么區別?
答:前一個循環一遍再判斷,后一個判斷以后再循環
6、請寫出下列代碼的輸出內容
#include
main()
{
int a,b,c,d;
a=10;
b=a++;
c=++a;
d=10*a++;
printf("b,c,d:%d,%d,%d",b,c,d);
return 0;
}
答:10,12,120
1、static全局變量與普通的全局變量有什么區別?static局部變量和普通局部變量有什么區別?static函數與普通函數有什么區別?
全局變量(外部變量)的說明之前再冠以static 就構成了靜態的全局變量。全局變量本身就是靜態存儲方式,靜態全局變量當然也是靜態存儲方式。這兩者在存儲方式上并無不同。這兩者的區別雖在于非靜態全局變量的作用域是整個源程序,當一個源程序由多個源文件組成時,非靜態的全局變量在各個源文件中都是有效的。 而靜態全局變量則限制了其作用域,即只在定義該變量的源文件內有效,在同一源程序的其它源文件中不能使用它。由于靜態全局變量的作用域局限于一個源文件內,只能為該源文件內的函數公用,因此可以避免在其它源文件中引起錯誤。
從以上分析可以看出, 把局部變量改變為靜態變量后是改變了它的存儲方式即改變了它的生存期。把全局變量改變為靜態變量后是改變了它的作用域, 限制了它的使用范圍。
static函數與普通函數作用域不同。僅在本文件。只在當前源文件中使用的函數應該說明為內部函數(static),內部函數應該在當前源文件中說明和定義。對于可在當前源文件以外使用的函數,應該在一個頭文件中說明,要使用這些函數的源文件要包含這個頭文件
static全局變量與普通的全局變量有什么區別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量有什么區別:static局部變量只被初始化一次,下一次依據上一次結果值;
static函數與普通函數有什么區別:static函數在內存中只有一份,普通函數在每個被調用中維持一份拷貝
2、程序的局部變量存在于(堆棧)中,全局變量存在于(靜態區 )中,動態申請數據存在于( 堆)中。
3、設有以下說明和定義:
typedef union {long i; int k[5]; char c;} DATE;
struct data { int cat; DATE cow; double dog;} too;
DATE max;
則語句 printf("%d",sizeof(struct date)+sizeof(max));的執行結果是:___52____
答:DATE是一個union, 變量公用空間. 里面最大的變量類型是int[5], 占用20個字節. 所以它的大小是20
data是一個struct, 每個變量分開占用空間. 依次為int4 + DATE20 + double8 = 32.
所以結果是 20 + 32 = 52.
當然...在某些16位編輯器下, int可能是2字節,那么結果是 int2 + DATE10 + double8 = 20
4、隊列和棧有什么區別?
隊列先進先出,棧后進先出
5、寫出下列代碼的輸出內容
#include
int inc(int a)
{
return(++a);
}
int multi(int*a,int*b,int*c)
{
return(*c=*a**b);
}
typedef int(FUNC1)(int in);
typedef int(FUNC2) (int*,int*,int*);
void show(FUNC2 fun,int arg1, int*arg2)
{
INCp=&inc;
int temp =p(arg1);
fun(&temp,&arg1, arg2);
printf("%d\n",*arg2);
}
main()
{
int a;
show(multi,10,&a);
return 0;
}
答:110
7、請找出下面代碼中的所以錯誤
說明:以下代碼是把一個字符串倒序,如“abcd”倒序后變為“dcba”
1、#include"string.h"
2、main()
3、{
4、 char*src="hello,world";
5、 char* dest=NULL;
6、 int len=strlen(src);
7、 dest=(char*)malloc(len);
8、 char* d=dest;
9、 char* s=src[len];
10、 while(len--!=0)
11、 d++=s--;
12、 printf("%s",dest);
13、 return 0;
14、}
答:
方法1:
int main(){
char* src = "hello,world";
int len = strlen(src);
char* dest = (char*)malloc(len+1);//要為分配一個空間
char* d = dest;
char* s = &src[len-1];//指向最后一個字符
while( len-- != 0 )
*d++=*s--;
*d = 0;//尾部要加
printf("%s\n",dest);
free(dest);// 使用完,應當釋放空間,以免造成內存匯泄露
return 0;
}
方法2:
#include
#include
main()
{
char str[]="hello,world";
int len=strlen(str);
char t;
for(int i=0; i
{
t=str[i];
str[i]=str[len-i-1]; str[len-i-1]=t;
}
printf("%s",str);
return 0;
}
1.-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)
答案:63
2.用兩個棧實現一個隊列的功能?要求給出算法和思路!
設2個棧為A,B, 一開始均為空.
入隊:
將新元素push入棧A;
出隊:
(1)判斷棧B是否為空;
(2)如果不為空,則將棧A中所有元素依次pop出并push到棧B;
(3)將棧B的棧頂元素pop出;
這樣實現的隊列入隊和出隊的平攤復雜度都還是O(1), 比上面的幾種方法要好。3.在c語言庫函數中將一個字符轉換成整型的函數是atool()嗎,這個函數的原型是什么?
函數名: atol
功 能: 把字符串轉換成長整型數
用 法: long atol(const char *nptr);
程序例:
#include
#include
int main(void)
{
long l;
char *str = "98765432";
l = atol(lstr);
printf("string = %s integer = %ld\n", str, l);
return(0);
}
2.對于一個頻繁使用的短小函數,在C語言中應用什么實現,在C++中應用什么實現?
c用宏定義,c++用inline
3.直接鏈接兩個信令點的一組鏈路稱作什么?
PPP點到點連接
4.接入網用的是什么接口?
5.voip都用了那些協議?
6.軟件測試都有那些種類?
黑盒:針對系統功能的測試 白合:測試函數功能,各函數接口
7.確定模塊的功能和模塊的接口是在軟件設計的那個隊段完成的?
概要設計階段
8.enum string
{
x1,
x2,
x3=10,
x4,
x5,
}x;
問x= 0x801005,0x8010f4 ;
9.unsigned char *p1;
unsigned long *p2;
p1=(unsigned char *)0x801000;
p2=(unsigned long *)0x810000;
請問p1+5= ;
p2+5= ;
三.選擇題:
1.Ethternet鏈接到Internet用到以下那個協議?
A.HDLC;B.ARP;C.UDP;D.TCP;E.ID
2.屬于網絡層協議的是:
A.TCP;B.IP;C.ICMP;D.X.25
3.Windows消息調度機制是:
A.指令隊列;B.指令堆棧;C.消息隊列;D.消息堆棧;
4.unsigned short hash(unsigned short key)
{
return (key>>)%256
}
請問hash(16),hash(256)的值分別是:
A.1.16;B.8.32;C.4.16;D.1.32
四.找錯題:
1.請問下面程序有什么錯誤?
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;
把循環語句內外換一下
2.#define Max_CB 500
void LmiQueryCSmd(Struct MSgCB * pmsg)
{
unsigned char ucCmdNum;
......
for(ucCmdNum=0;ucCmdNum
{
......;
}
死循環
3.以下是求一個數的平方的程序,請找出錯誤:
#define SQUARE(a)((a)*(a))
int a=5;
int b;
b=SQUARE(a++);
4.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;
}
.......
}
五.問答題:
1.IP Phone的原理是什么?
IPV6
2.TCP/IP通信建立的過程怎樣,端口有什么作用?
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -