日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

c语言笔试题(带答案)

發布時間:2025/7/14 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c语言笔试题(带答案) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

填空:

1,short int a[10]={123, 456, 789}; sizeof(a)= ?20? ??;short int *p=&a, 則sizeof(p)=? 8

對于64位機來說,指針為8字節表示。其中

sizeof是一運算符返回編譯器為其分配的數組空間大小,不關心里面存了多少數據sizeof幾種情況:

數組——編譯時分配的數組空間大小;
? ? 指針——存儲該指針所用的空間大小(存儲該指針的地址的長度,? 是長整型);
? ? 類型——該類型所占的空間大小;
? ? 對象——對象的實際占用空間大小;
? ? 函數——函數的返回類型所占的空間大小。函數的返回類型不能? 是void。
strlen是一函數,只接受char*類型變量,返回字符串的實際長度。該字符串可能是自己定義的,也可能是內存中隨機的,該函數實際完成的功能是從代表該字符串的第一個地址開始遍歷,直到遇到結束符'\0',返回的長度大小不包括'\0'。

詳細參考:strlen和sizeof的區別

?

2,給一整形變量n(32bit),把n的bit5(bit0開始)置1,其他不變:n |= (1<<5)?? ? ? ? ? ??

位操作之中時常用到與(&),或異(^),或(|),其中:

(1)與1相異或(^)運算將取反

(2)與1相或(|)運算將被置1

(3)與1相與(&)運算將保持不變

(4)取反運算符~,將數0-->1,1-->0

(5)右移(>>) ?左移(<<)

?

?3,int fun(int* x, int *y){……} 則:怎么用函數指針p調用fun?

void main()

{??? int a=1, b=2;

???? int (*p)(int *, int *); ??? ?

???? p=fun;? p(&a, &b);

?}

函數指針,本質是指針,表示為 int (*p)(int *, int *)

指針函數,本質是函數,表示為 int *p(int *, int *)

?

4,定義一個宏,將內存的大小由MB轉換為bit:#define MB_TO_BIT(x) ((x)*1024*1024)ul? ? ? ? ? ??

?

5,如圖,p,q節點指向,插入q,則:?

viod add(node* head, int a){ …node *p = head->next;node *q = (node *)malloc(sizeof(node));q->data = a;q->next = p->next; p->next=q; }

?

技巧是不能夠把p和后一節點先斷開,否則將不能尋找到后一節點。

?

6,由char a=253; int b = a; int c = a&0xff; 則:b=-3??,? c=253?;

其中:a為有符號數,最高位是1,余下7位,范圍-128~127,253表示為-3?

?

7,用define實現,將整數x,y連接形成整數并除以y,如:F(12, 34, 56) = 1234/56,則:#define F(x,y,z) ((x)##(y)/(z));

注意:宏之中’#’? ‘##’區別,

(1)‘#’是把宏參數轉換為字符串,如:

#define PSQR(x) printf(“ ”#x”=%d\n ”, ((x)*(x)))

則 y=5,PSQR(y)將輸出 y=25;

? ?x=2+4, PSQR(x)將輸出 2+4=36

(2)’##’粘合劑,如:

#define XNAME(n)? x##(n) 則

?XNAME(4)將表示為 x4

?

?

選擇:

1,找不正確選擇(A)

A, char a[8]={‘a’,’b’,’c’,}?? B, char a[8]; a=”hello”;

C, char a[]=”abc”;????????? D, char a[8]={’a’,’b’,’c’,’\0’};

?

2,#define M(x, y, z)? x*y+z, 則a=1, b=2, c=3結果輸出

M(a+b, b+c, c+a)= ?(D)??????

A, 19?? B,17 ?C,15? D,12

宏只是簡單的替換,不會計算出a+b, b+c, c+a中的結果。所以M(a+b, b+c, c+a)=1+2*2+3+3+1。

需要改進為:#define M(x, y, z)? ((x)*(y)+(z))

?

3,由char aa=500; int bb=aa;則 printf(“%d\n”, bb+1)的結果(C)

A, 編譯報錯?? B,245? C,-11? D,-1

由于char類型表示范圍為-128~127,所以aa值為-12,所以bb+1=-11

?

4,char a[] = {’i’, ’n’, ’n’, ’\0’, ’s’}; char b[] = {’i’, ’n’, ’n’, ’s’ ,’\0’};

int x1=sizeof(a), int x2=strlen(a), int x3=sizeof(b), int x4=strlen(b)

問:X1= ??????? X2=??????? X3=??????? X4= ? ? ;(A) ? ?

A,5 3 5 4??? B,5 5 5 5? C,5 5 6 5?? D,3 3 5 5

sizeof計算出編譯器為數組分配內存大小,strlen接受char*類型變量,遇到’\0’結束,計算數據實際存儲的數據。

詳細參考:strlen和sizeof的區別

?

5,函數遞歸,求f(2, 3)=? D??????????

int f(int x, int y){if(x==0) return y+2;if(y==0) return f(x-1, 1);return f(x-1, f(x, y-1));}

?

A,4?? B,16? C, 31? D,61

?

5, 下列程序可能運行結果()(多選)

#include <stdio.h> #include <unistd.h> int main (int argc, char **argv) { int cnt=2;pid_t pid;if((pid=fork())==0)cnt++;elsecnt--;printf("\n%d\n", cnt);return 0; } /* ----- End of main() ----- */

?

A,3 ?   B,31 ? ? C,1 ? ? ?D,13

結果:A和C

?

?

簡答:

1,用c變函數,實現一個字符高低位互換,比如0x3A-->0xA3

char change (char num) {char temp=num;temp &= 0x0f;temp = temp<<4;num &= 0xf0;num = num>>4;temp = (num|temp);return temp;} /* ----- End of change() ----- */

?

?

2,字符逆序存儲,如abcdefgh->hgfedcba

char *reverse (char *s) {char *head = s;char *end = s;
/*end定位到字符串尾*/
#if 1
while (*(end + 1) != '\0')++end ; #else while( *end )++end;end--; #endif

while(end > head) {char temp=*head;*head++ = *end;*end-- = temp; }return s; } /* ----- End of reverse() ----- */

?

詳細參考:字符串面試題(一)字符串逆序

?

?

3,字符串s,t, 將t插入s,其中假設s有足夠空間容納t

#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX 100int insert_pos (char *src, char *dst, int pos) {char temp[MAX];int loc=stlren(src);if(pos < 0){printf("position needs to big than or equal to 0\n");return -1;}
/* 插入位置超過被插字節串長度 */
if(loc<=pos){strcat(src, dst);}
/*正常插入字符串中間*/
else {memset(temp, 0, 100);strcpy(temp, src+pos);strcpy(src+pos, dst);strcat(src, temp);}return 0;} /* ----- End of insert_pos() ----- */int main (int argc, char **argv) {char a[]="abghij";char b[]="cdef"; int pos; printf("position:\n"); scanf("%d", &pos); if( -1==insert_pos(a, b, -1) )return -1;printf("%s\n", a);return 0; } /* ----- End of main() ----- */

?

?

4,單鏈表L,頭指針為phead,判斷其是否有環?????????????

bool isExitsLoop(list *head) {list *slow = head, *fast = head;while ( fast && fast->next ) {slow = slow->next;fast = fast->next->next;if ( slow == fast ) break;}return !(fast == NULL || fast->next == NULL); }

?

詳細參考:判斷單鏈表是否存在環及求環入口點

?

轉載于:https://www.cnblogs.com/xiaoxing/p/4043317.html

總結

以上是生活随笔為你收集整理的c语言笔试题(带答案)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。