c語言面試題

c語言面試題

平臺用戶的互動中精選與c語言面試題相關的:1、c語言面試題關于字符串,還有字符指針 2、一道c語言面試題 3、一些C語言求職筆試題2 4、面試題 c語言與c++語言有什么區別 6、有關C語言的面試題,沒參函數不能返回一個地址嗎 7、解答一個c語言筆試題 8、c語言的一個面試題 9、求助大神c語言面試題 10、C語言筆試題!求答案!另送100積分!
c語言面試題
平臺用戶 2018-06-06 16:46:20

下面是精選平臺用戶互動時的最佳討論

pi408637535
pi408637535


pi408637535:c語言面試題關于字符串,還有字符指針

void main(void)
{
char a ;
char *str = &a;
strcpy(str, “hello”);
printf(str);
} //這個是錯的,但是我說不明白為什么是錯的
下面的解答已被9648人點贊

str是個字符指針,也可以表示為字符數組或者字符串,str = &a;表示str指向的地方只能存下一個字符。

strcpy(str, “hello”);

肯定放不下hello啊,所以會有內存錯誤


如果你不相信,你把hello換成空串""試試,因為空串占用1字節,str指向的地方能放下。


如果你想知道更多,那么試試下面的這段程序:

#include <stdio.h>
#include <string.h>
void main(void) {
    int a;
    char *str = (char *) &a;
    strcpy(str, "abc");
    printf(str);
}

這段之所可以是因為int類型占4個字節,"abc"也占4個,能放下,"abcd"就不行。


懂了嗎?

最后一次編輯時間 推薦于2016-01-20 23:35:11
optimus265
optimus265


optimus265:一道c語言面試題

  void foo(void)
  {
   unsigned int a = 6;
   int b = -20;
   (a+b > 6)? puts("> 6") : puts("<= 6");
  }

請問答案為什么是 >6?

可以說詳細地點嗎?
謝謝
下面的解答已被4112人點贊
強制類型轉換,a+b  變是一個unsigned int 類型,usigned int  的范圍 0~4294967295,不存在負數,這樣便產生了數據溢出,數據補一位再減去14,即2^32-14,所以會比6要大
最后一次編輯時間 2014-06-27
tmpiero
tmpiero


tmpiero:一些C語言求職筆試題2

19、一個隊列入列順序是1,2,3,4,則輸出順序是 a、4321 b、1234 c、1432 d、3241 20、若進棧順序為1,2,3,4,假定進棧和出?梢源┎暹M行,則可能的出棧順 序為: a、2413 b、3142 c、3412 d、1234 21、算法的空間復雜度指 a、算法程... 19、一個隊列入列順序是1,2,3,4,則輸出順序是
a、4321 b、1234 c、1432 d、3241
20、若進棧順序為1,2,3,4,假定進棧和出?梢源┎暹M行,則可能的出棧順
序為:
a、2413 b、3142 c、3412 d、1234
21、算法的空間復雜度指
a、算法程序的長度
b、算法程序的指令條數
c、算法程序占的存儲空間
d、算法執行過程中所需的存儲空間
22、某數列有1000個各不相同的單元,有低到高排列,要對該數進行二分法檢索
,最壞的情況下,需要檢查多少個單元
a、1000 b、10 c、100 d、500
23、已知數組A中,每個元素A[I][J]在存儲時要占3個字節,設I從0變到4,J從0
到9,分配內存從地址SA開始連續按行存儲分配的。問:A[4][7]的起始地址為:
a、SA+84 b、SA+99
c、SA+120 d、SA+141
24、使用雙向鏈表存放數據的優點是
a、提高檢索速度 b、方便的插入和刪除數據
c、節約存儲空間 d、很快回收存儲空間
25、若某鏈表最常用的操作是在最后一個結點之后插入一個結點并刪除最后一個
結點,則采用____存儲方式最省時間
a、單鏈表 b、雙鏈表
c、帶頭節點的雙循環鏈表
d、單循環鏈表
26、在理想情況下,散列表中查找元素所需比較次數為:
a、n b、0 c、n/2 d、1
27、Ethernet屬于數據鏈路層協議
28、普通交換機和路由器工作在
a、數據鏈路層和傳輸曾
b、鏈路層和網絡層
c、都是網絡層
d、網絡層和傳輸層
29、以太網的MTU值為
a、500 b、1492 c、1500 d、1982
30、在一個Windows SDK 的基本應用程序框架中,有如下消息循環:
while(GetMessage(&Msg,NULL,0,0) {
TranslateMessage(&Msg);
DispatchMessage(&Msg);
}
下面哪個消息使得該消息循環退出運行,從而終止整個應用程序的運行
a、WM_DESTROY b、WM_QUIT
c、WM_CLOSR d、WM_CREATE
31、進程和線程最主要的區別:
a、CPU調度方式不同 b、優先級不同
c、程序入口不同 d、進程有獨立的地址空間,線程共享地址空間
32、以下哪項不適合用于進程間通訊
a、socket b、Pipe
c、共享內存 d、全局變量
我只有5分。。。
下面的解答已被8775人點贊
19. b
20. d
21. d
22. b
23. d
24. b
25. c
26. b
27. 正確
28. b
29. c
30. b(蒙的)
31. d
32. d

PS.分多少不要緊,分享精神重要
最后一次編輯時間 推薦于2017-10-01 08:43:58
希2°0121
希2°0121


希2°0121:面試題 c語言與c++語言有什么區別

下面的解答已被4976人點贊
前者沒有類的概念,不是面向對象的,后者是
前者只支持/**/注釋,后者支持單行注釋//
前者以函數為單位,后者以類和全局為單位
前者函數傳參只能傳值(也就是值復制傳遞),后者有了引用的概念,可以傳引用
前者不支持異常處理,后者有try-catch-finally支持
其他的還有很多,就不一一列舉了
最后一次編輯時間 推薦于2016-03-16 03:03:22
神降2te
神降2te


神降2te:有關C語言的面試題,沒參函數不能返回一個地址嗎

下面的解答已被3950人點贊
看函數的返回值,如果函數的返回類型是指針,那就可以返回地址,跟是否有參數無關
最后一次編輯時間 2018-02-10
cn131nc
cn131nc


cn131nc:解答一個c語言筆試題

只需解答第9題即可 試題3(每小題3分,共12分) 程序說明 輸入一行以回車結束的字符串(少于80個字符),刪除其中的英文字母和數字字符以外的其它字符,再判斷字符串是否對稱(不區分大小寫)。 運行示例1: Enter a string:Madam I'm Adam Yes 運行... 只需解答第9題即可
試題3(每小題3分,共12分)
程序說明
輸入一行以回車結束的字符串(少于80個字符),刪除其中的英文字母和數字字符以外的其它字符,再判斷字符串是否對稱(不區分大小寫)。
運行示例1:
Enter a string:Madam I'm Adam
Yes
運行示例2:
Enter a string:elephant
No
程序
#include <stdio.h>
(9)
main()
{ int flag,i,k,length;
char str[80];
printf("Enter a string:");
gets(str);
i=k=0;
while(str[i])
{
if(isupper(str[i]))str[i]=tolower(str[i]);
if(isdigit(str[i])||isalpha(str[i]) )
{(10)
k++;
}
i++;
}
(11)
length=k;
flag=1;
for(k=0;k<=length/2;k++)
if(str[k]!=str[length-k-1])
{
(12)
break;
}
if(flag)printf("yes\n");
else printf("no\n");
}
【供選擇的答案】
(9)A、ctype.h B、string.h 答案:A
C、stdio.h D、math.h
(10)A、i++; B、str[k]=str[i];
C、str[i]=str[k]; D、; 答案:B
(11)A、str[i]=’\0’; B、str[i-1]=’\0’;
C、str[k]=’\0’; D、; 答案:C
(12)A、flag=1; B、flag=0;
C、; D、continue; 答案:B
下面的解答已被6963人點贊
這個題,你要知道A,B,C,D四個函數庫都包含那些函數。在頭文件<stdio.h>中定義了輸入輸出函數,類型和宏。c語言的話每一個程序都要用到這個頭文件。
在<math.h>中定義了一些數學函數和宏,用來實現不同種類的數學運算。這個題中顯然用不到。
在頭文件<string.h>中定義了一些字符串函數?梢詫⑺鼈兎譃閮山M。也可以排除第一組函數名以str開頭,主要進行字符串的操作;第二組函數名以mem開頭,按照字符數組的方式操作對象。
在頭文件<ctype.h>中定義了一些測試字符的函數。在這些函數中,每個函數的參數都是整型int,而每個參數的值或者為EOF,或者為char類型的字符。<ctype.h>中定義的標準函數列表如下:

int isalnum(int c) 檢查字符是否是字母或數字

int isalpha(int c) 檢查字符是否是字母

int isascii(int c) 檢查字符是否是ASCII碼

int iscntrl(int c) 檢查字符是否是控制字符

int isdigit(int c) 檢查字符是否是數字字符

int isgraph(int c) 檢查字符是否是可打印字符

int islower(int c) 檢查字符是否是小寫字母

int isprint(int c) 檢查字符是否是可打印字符

int ispunct(int c) 檢查字符是否是標點字符

int isspace(int c) 檢查字符是否是空格符

int isupper(int c) 檢查字符是否是大寫字母

int isxdigit(int c) 檢查字符是否是十六進制數字字符

int toupper(int c) 將小寫字母轉換為大寫字母

int tolower(int c) 將大寫字母轉換為小寫字母
最后一次編輯時間 推薦于2016-04-07 10:29:33
zhangrongxia21
zhangrongxia21


zhangrongxia21:c語言的一個面試題

int main() { int x=3; printf("%d",x); return 1; } 問函數既然不會被其它函數調用,為什么要返回1?
下面的解答已被4654人點贊
1、main函數的返回值定義為int型,則函數里應該要有相應類型的返回值。
2、雖然我們不會用程序里的其它函數來調用main函數,但是其實main函數的返回值是可以被系統捕獲的,在系統中可以根據main的返回值來判斷程序的執行情況。
最后一次編輯時間 2011-08-02
苦惱大了
苦惱大了


苦惱大了:求助大神c語言面試題

#include<stdio.h>
int my(const int a)
{
static int count=a;
return count+a;
}
int main()
{
printf("%d\n%d\n",my(4),my(5));
return 0;
}

結果為什么是
9
10
下面的解答已被5547人點贊
這道題其實出的不好。
函數printf里面my(4)和my(5)執行順序是不確定的,和編譯器有關。按照上面的意思應該是my(5)先執行,count初始化為a,即5,return的是count+a,等于10。執行my(4)的時候,count依然是5,return的是9。
最后一次編輯時間 2013-02-16
comet401
comet401


comet401:C語言筆試題!求答案!另送100積分!

1. 說說下列聲明的不同之處 char *a = "abc"; char b[] = "abc"; char c[3] = "abc"; a是一個字符型指針變量,起內容為字符串”abc”的首地址,字符串”abc”存放在常量區。 b[ ]占4個字節,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’ c[3]占3個... 1. 說說下列聲明的不同之處

char *a = "abc";
char b[] = "abc";
char c[3] = "abc";
a是一個字符型指針變量,起內容為字符串”abc”的首地址,字符串”abc”存放在常量區。
b[ ]占4個字節,b[0]=’a’ ,b[1]= ‘b’,b[2]=’ c’,[3]=’\0’
c[3]占3個字節,c[0]=’a’ ,c[1]= ‘b’,c[2]= ‘c’

2.以下為Windows NT下的32位C程序,請填空 。
例如:int i; long int j; char k; sizeof(i) = 4; sizeof(j) = 8; sizeof(k) = 1;
在32位系統下,整形所占的字節數是4。長整形所占的字節數是8,字符型所占的字節數是1。

(1)
typedef struct
{
int iPara1;
union
{
char iPara2[5];
int iPara3;
char iPara4;
} Params;
char cPara5;
char cPara6[12];
} TEST_INFO_T;

TEST_INFO_T stTestInfo;

請計算
sizeof (stTestInfo ) = 28

(2)
void Func ( char str[3])
請計算
sizeof( str ) =4

(3)
void *p = malloc( strlen(“hello world”) );
請計算
sizeof ( p ) =4
(4)
char str[] = “Hello” ;
char *p = str ;
int n = 10;

請計算
sizeof (str ) =6
sizeof ( p ) =4
sizeof ( n ) =4

3. 請問運行此程序后,在終端上輸出的結果是什么?

char acFileName_p[2][50]; /*全局變量,在整個程序運行期間有效*/

int FileExists(char* name)
{
int i;

for(i = 0; i < 2; i++)
{
if( strcmp (( char*) name, (char*)acFileName_p [i] ) = = 0)
{
return 1;
}
}
return 0;
}
void CheckFileName(char *name)
{
static char suffix[3] = "_1";
if( FileExists(name) )
{
if(suffix[1] != '1')
{
name[strlen(name) - 2] = '\0';
}
strcat(name, suffix);
suffix[1]++;
CheckFileName(name);
}
else
{
suffix[1] = '1';
}
}
main
{
char cString1[50];
char cString2[50];

strcpy(acFileName_p[0], "test1");
strcpy(cString1, "test1");
strcpy(cString2, "test2");

CheckFileName(cString1);
printf("Output1 = %s\n", cString1);

CheckFileName(cString2);
printf("Output1 = %s\n", cString2);

strcpy(acFileName_p[1], cString1);
CheckFileName(cString1);
printf("Output1 = %s\n", cString1);
}
答:

4、請找出下面代碼中的所有錯誤

說明:以下代碼是把一個字符串倒序,如“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)}
下面的解答已被6137人點贊
第一題
char *a="abc"; 是把字符串“abc”的首地址賦值給指針變量a;
char b[]="abc"; 定義一個字符串數組,因為是字符串 “abc”最后有一個‘\0’ 數組長度為4;
char c[3]="abc" 寫法有問題,由于數組大小給定為3,最后一個‘\0’寫不進數組,有的編譯器會報錯。
第二題
1) struct 結構體分配內存特點是:大小等于所有成員所點內存大小的和。
union 聯合體分配內存特點是:大小等于成員中占內存最大的內存的大小。所以一共是4個int 13個char 答案是:4*4+13*1=29(相信自己做的)
2) 答案是3 PS:誰給的答案,坑爹呢吧
3) 答案是8 PS:不要被迷惑,這題是陷阱,指針的大小都是無符號長整型 大小是8
4) 答案是6,8(同上題),4。
第三題
1) 答案是
Output1 = test1_1
Output1 = test2
Output1 = test1_1_1
2)(1)頭文件沒有標準輸入輸出 #include<stdio.h>
(9)錯,左值為指針,右值為數組元素,不能賦值,所以應改為char *s=&src[len]
(11)不應是指針之間的賦值,應該是內容賦值,所以改為 *d++=*s--;
(12)如果按%s即字符串輸出的話,dest所指的字符串結尾沒有‘\0'結尾可能出現溢出,解決的方法是在(12)前加一句 *d='\0';

有不清楚的扣729480205,一起學習
最后一次編輯時間 推薦于2016-12-01 22:18:07
金蟾捕鱼单机下载