當前位置:編程學習大全網 - 源碼下載 - 求C語言編程題

求C語言編程題

邏輯運算和判斷選取控制

1、編制程序要求輸入整數a和b,若a2+b2大於100,則輸出a2+b2百位以上的數字,否則輸出兩數字之和。

#include<stdio.h>

int main()

{

int a,b;

printf("input two number:");

scanf("%d %d",&a,&b);

if((a*a+b*b)>=100)

printf("\n %d",(a*a+b*b)/100);

else

printf("\n %d",a+b);

getch();

}

2、試編程判斷輸入的正整數是否既是5又是7的整數倍數。若是,則輸出yes;否則輸出no。

#include<stdio.h>

int main()

{

int a;

printf("input a number:");

scanf("%d",&a);

if(a%5==0 && a%7==0)

printf("yes");

else

printf("no");

getch();

}

指針

1、編壹程序,將字符串computer賦給壹個字符數組,然後從第壹個字母開始間隔的輸出該串,請用指針完成。

#include<stdio.h>

int main()

{

char string[]="computer";

char *p=string;

while(*p)

{

printf("%c",*p);

p++;

p++;

}

getch();

}

2、輸入壹個字符串string,然後在string裏面每個字母間加壹個空格,請用指針完成。

#include<stdio.h>

#include<CONIO.H>

#include<STDLIB.H>

#define max 100

char * copyString;

void copy(char *,char*);

void insert(char *);

int main()

{

char * string;

string = (char *)malloc(max*sizeof(char));

scanf("%s",string);

insert(string);

printf("%s",string);

getch();

return 0;

}

void copy(char * c,char * s)

{

while(*s!='\0')

{

*c=*s;

s++;

c++;

}

*c='\0';

}

void insert(char * s)

{

copyString = (char*)malloc(2*max*sizeof(char));

copy(copyString,s);

while(*copyString!='\0')

{

*s=*copyString;

s++;

copyString++;

*s=' ';

s++;

}

*s='\0';

}

壹.選擇:

1.給出以下定義:

char acX[ ]= "abcdefg";

char acY[ ]= {'a','b','c','d','e','f','g'};

則正確的敘述為( )

A) 數組acX和數組acY等價 B) 數組acX和數組acY的長度相同

C) 數組acX的長度大於數組acY的長度 D) 數組acX的長度小於數組acY的長度

答案:C

2.

void example(char acHello[])

{

printf("%d", sizeof(acHello));

return;

}

void main()

{

char acHello[] = "hello";

example(acHello);//數組名稱作參數,傳的是地址,壹個地址占四個字節

return;

}

的輸出是

A 4 B 5 C 6 D不確定

答案:A

3. 有以下程序段

char acArr[]= "ABCDE";

char *pcPtr;

for(pcPtr = acArr; pcPtr < acArr + 5; pcPtr++)

{

printf("%s\n", pcPtr);

}

return;

輸出結果是( )

A) ABCD B) A C) E D) ABCDE

B D BCDE

C C CDE

D B DE

E A E

答案:D

4.在中斷中,不能同步獲取信號量,但是可以釋放信號量。

A.正確 B.錯誤

答案:A

5.以下敘述中不正確的是( )

A) 在不同的函數中可以使用相同名字的變量

B) 函數中的形式參數是局部變量

C) 在壹個函數內定義的變量只在本函數範圍內有效

D) 在壹個函數內的復合語句中定義的變量在本函數範圍內有效(復合語句指函數中的成對括號構成的代碼)

答案:D

6.設有如下定義:

unsigned long pulArray[] = {6, 7, 8, 9, 10};

unsigned long *pulPtr;

則下列程序段的輸出結果為( )

pulPtr = pulArray;

*(pulPtr + 2) += 2;

printf ("%d,%d\n", *pulPtr, *(pulPtr + 2));

A)8,10 B)6,8 C)7,9 D)6,10

答案:D

7. 定義結構體時有下面幾種說法,請指出正確的(多選):______

A、結構體中的每個部分,最好進行四字節對齊;

B、結構體的總長度最好是四字節對齊;

C、結構中成員的存放不用考慮字節對齊情況;

答案:A、B

8.void example()

{

int i;

char acNew[20];

for(i = 0; i < 10; i++)

{

acNew[i] = '0';

}

printf("%d\n", strlen(acNew));

return;

}

的輸出為( )

A 0 B 10 C 11 D不確定

答案:D

9.switch(c)中的c的數據類型可以是char、long、float、unsigned、bool. ( )

A. 正確 B. 錯誤

答案:B

10. 網絡上傳輸的字節序默認是大字節的,如果主機是小字節序,在網絡通信時則須進行字節序轉換;如果主機是

大字節序,為了程序的壹致性及可移植性,最好也在程序中加上字節序轉換的操作(空操作)。

A. 正確 B.錯誤

答案:A

11. struct stu

{

int num;

char name[10];

int age;

};

void fun(struct stu *p)

{

printf("%s\n", (*p).name);

return;

}

void main()

{

struct stu students[3]={ {9801,"Zhang",20},

{9802,"Wang",19},

{9803,"Zhao",18} };

fun(students + 2);

return;

}

輸出結果是( )

A) Zhang B)Zhao C) Wang D) 18

答案:B

12.以下程序運行後,輸出結果是( )

void main( )

{

char *szStr = "abcde";

szStr += 2;

printf("%lu \n",szStr);

return;

}

A cde B 字符c的ASCLL碼值

C "abcde"這個常串中字符c所在的地址 D 出錯

答案:C

13. 在X86下,有下列程序

#include <stdio.h>

void main()

{

union

{

int k;

char i[2];

}*s,a;

s = &a;

s->i[0] = 0x39;

s->i[1] = 0x38;

printf("%x\n", a.k);

}

輸出結果是( )

A) 3839 B) 3938 C) 380039 D) 不可預知

答案:D

14. 全局變量可以定義在被多個.C文件包含著的頭文件中。

A. 正確 B. 錯誤

答案:B

15.void example()

{

int i;

char acNew[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};

for(i = 0; i < 10; i++)

{

acNew[i] = '0';

}

printf("%d\n", strlen(acNew));

return;

}

的輸出為:

A 0 B 10 C 11 D不確定

答案:B

16.下列定義正確的有(多選):( )

A: char *pcPtr = "abcd";

B: char pc[4]= "abcd";

C: char pc[] = "abcd";

D: char pc[] = 'abcd';

E: char pc[] = {'a','b','c','d','\0'};

F: char pc[] = 'a' 'b' 'c' 'd';

答案:ACE

17.在函數內部定義的變量(靜態變量、寄存器變量等特殊變量除外)的內存是在棧內存中,所以在定義函數內部的變量的時候,壹定要保證棧不能夠溢出。如果臨時變量

占用空間較大,應該使用內存申請的方式,這樣該變量指向的內存就是在堆內存中了。

A. 正確 B. 錯誤

答案:A

18.局部變量可以和全局變量重名,編譯的時候不會出現錯誤,但壹旦不小心,就可能導致使用錯誤變量,所以在定時局部變量的時候,不要和全局變量重名。

A. 正確 B. 錯誤

答案:A

19.設有以下宏定義:

#define N 3

#define Y(n) ((N+1)*n) /*這種定義在編程規範中是嚴格禁止的*/

則執行語句:z = 2 * (N + Y(5 + 1));後,z的值為( )

A) 出錯 B) 42 C) 48 D)54

答案:C

20. int *(*ptr)();

則以下敘述中正確的是( )

A) ptr是指向壹維組數的指針變量

B) ptr是指向int型數據的指針變量

C) ptr是指向函數的指針,該函數返回壹個int型數據

D) ptr是指向函數的指針,該函數的返回值是指向int型數據的指針

答案:D

21. 0x12345678 在采用BigEndian中內存的排列順序是______,在采用LittleEndian內存中的排列順序是_______.

(答案從左到右內存地址依次增加)

A.12 34 56 78 B.34 12 78 56

C.78 56 34 12 D.56 78 12 34

答案:A C

二、填空:

1. .struct tagAAA

{

unsigned char ucId:1;

unsigned char ucPara0:2;

unsigned char ucState:6;

unsigned char ucTail:4;

unsigned char ucAvail;

unsigned char ucTail2:4;

unsigned long ulData;

}AAA_S;

問:AAA_S在字節對齊分別為1、4的情況下,占用的空間大小是多少?

答案:9 12

2.typedef struct tagTest

{

UCHAR ucFlag;

ULONG ulLen;

}TEST_S;

TEST_S test[10];

四字節對齊方式時: sizeof(TEST_S) = ______, sizeof(test)________.

答案:8 80

3

char acHello[] = "hello\0world";

char acNew[15] = {0};

strcpy(acNew,acHello);

strlen(acNew) = _____

sizeof(acHello) = ______

答案:5 12

4.#pragma pack(4)/*編譯選項,表示4字節對齊*/

int main(int argc, char* argv[])

{

struct tagTest1

{

short a;

char d;

long b;

long c;

};

struct tagTest2

{

long b;

short c;

char d;

long a;

};

struct tagTest3

{

short c;

long b;

char d;

long a;

};

struct tagTest1 stT1;

struct tagTest2 stT2;

struct tagTest3 stT3;

printf("%d %d %d", sizeof(stT1), sizeof(stT2), sizeof(stT3));

return 0;

}

#pragma pack()(編譯選項結束)

請問輸出結果是:_________

答案:12 12 16

5. enum ENUM_A

{

X1,

Y1,

Z1 = 5,

A1,

B1

};

enum ENUM_A enumA = Y1;

enum ENUM_A enumB = B1;

請問 enumA = ____; enumB = ______;

答案:1 7

6.以下程序的輸出結果是________.

#include <stdio.h>

int fun(int x,int y)

{

static int m = 0;8

static int i = 2;3

i += m + 1;12

m = i + x + y;

return m;

}

void main()

{

int j = 4;

int m = 1;

int k;

k = fun(j, m);

printf("%d,", k);

k=fun(j, m);

printf("%d\n", k);

return;

}

答案:8 17

7.以下程序的輸出結果為________

#define CIR(r) r*r /*請註意這種定義的缺陷,不允許這麽定義*/

void main()

{

int a = 1;

int b = 2;

int t;

t = CIR(a + b);

printf("%d\n", t);

return;

}

答案:5

8.在VRP中,實現了strncpy類似的函數,定義如下:

#define CHAR char

#define ULONG unsigned long

#define VOID void

#define MACRO_COPYWORLDLENGTH 4

CHAR *VOS_strncpy(CHAR *pcDest, const CHAR *szSrc, ULONG ulLength)

{

CHAR *pcPoint = pcDest;

if(( NULL == szSrc ) || ( NULL == pcDest ) ))

{

return NULL;

}

while(ulLength && (*pcPoint = *szSrc))/*這裏采用了在判斷語句中賦值的方式(*pcPoint = *szSrc),建議盡量不使用*/

{

pcPoint++;

szSrc++;

ulLength--;

}

if(!ulLength)

{

*pcPoint = '\0';

}

return pcDest;

}

VOID main(VOID)

{

CHAR szStrBuf[ ] = "1234567890";

CHAR szStrBuf1[ ] = "1234567890";

CHAR *szHelloWorld = "Hello World!";

strncpy(szStrBuf, szHelloWorld, MACRO_COPYWORLDLENGTH);

VOS_strncpy(szStrBuf1, szHelloWorld, MACRO_COPYWORLDLENGTH);

printf("%s %s", szStrBuf, szStrBuf1);

}

程序的輸出結果為________

答案:Hell567890 Hell

9.

char acHello[] = "hello\0world";

char acNew[15] = {0};

memcpy(acNew,acHello,12);

strlen(acNew) = _____

sizeof(acHello) = _____

答案:5 12

10. typedef struct Head

{

UCHAR aucSrc[6];

ULONG ulType;

} HEAD_S;

在強制壹字節對齊情況下,請指出sizeof(HEAD_S) = ________;

在強制二字節對齊情況下,請指出sizeof(HEAD_S) = ________;

在強制四字節對齊情況下,請指出sizeof(HEAD_S) = ________;

答案:10 10 12

11.union tagAAAA

{

struct

{

char ucFirst;

short usSecond;

char ucThird;

}half;

long lI;

}number;

struct tagBBBBB

{

char ucFirst;

short usSecond;

char ucThird;

short usForth;

}half;

struct tagCCCC

{

struct

{

char ucFirst;

short usSecond;

char ucThird;

}half;

long lI;

};

在字節對齊為1下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____ ____ _____

在字節對齊為4下,sizeof(union tagAAAA)、sizeof(struct tagBBBBB)、sizeof(struct tagCCCC)是____ ____ _____

答案:4 6 8

8 8 12

12.struct tagABC

{

char cB;

short sC;

char cD;

long lA;

}*pAbc;

pAbc = 0x100000;

那麽pAbc+0x100 = 0x_________; (ULONG)pAbc + 0x100 = 0x_________;(ULONG *)pAbc + 0x100 = 0x_________;(char *)pAbc + 0x100 = 0x_______;

答案:100C00 100100 100400 100100

13.unsigned long FUNC_C ( unsigned long ulAction )

{

unsigned long ulResult = 0 ;

switch ( ulAction )

{

case ACTION_A:

{

ulResult += 1 ;

break ;

}

case ACTION_B:

{

ulResult += 1 ;

}

default:

{

ulResult += 1 ;

}

}

printf( "ulResult = %u", ulResult ) ;

return ulResult ;

}

當輸入為ACTION_B時,輸出結果為: ulResult = _________;

答案:2(因為此分支沒有break分支)

14.下面的代碼中,函數Test執行完畢後,打印的結果是 _____。

unsigned long g_ulGlobal = 0;

void GlobalInit(unsigned long ulArg)

{

ulArg = 0x01;

return;

}

void Test()

{

GlobalInit(g_ulGlobal);

printf("%lu", g_ulGlobal);

return;

}

答案:0

15.以下程序的輸出的結果是___________

int x = 3;

void incre();

void main()

{ int i;

for (i = 1; i < x; i++)

{

incre();

}

return;

}

void incre()

{

static int x = 1;

x *= (x + 1);

printf("%d ",x);

return;

}

答案:2 6

16.以下程序的輸出的結果是___________

#pragma pack(4)/*四字節對齊*/

int main(int argc, char* argv[])

{

unsigned char puc[4];

struct tagPIM

{

unsigned char ucPim1;

unsigned char ucData0:1;

unsigned char ucData1:2;

unsigned char ucData2:3;

}*pstPimData;

pstPimData = (struct tagPIM *)puc;

memset(puc, 0, 4);

pstPimData->ucPim1 = 1;

pstPimData->ucData0 = 2;

pstPimData->ucData1 = 3;

pstPimData->ucData2 = 4;

printf("%02X %02X %02X %02X\n", puc[0], puc[1], puc[2], puc[3]);

return 0;

}

#pragma pack()/*恢復缺省對齊方式*/

答案:01 26 00 00

17.

char *pcColor = "blue1" ;

char acColor[] = "blue1" ;

strlen(pcColor) = _____

strlen(acColor) = _____

sizeof(pcColor) = _____

sizeof(acColor) = _____

答案:5 5 4 6

18.

char str[] = "\\\0";

char *p = str;

int n = 1000;

請計算

sizeof (str ) = ____________

sizeof ( p ) = ______________

sizeof ( n ) = ______________

答案:3 4 4

19.UCHAR *pucCharArray[10][10];

typedef union unRec

{

ULONG ulIndex;

USHORT usLevel[6];

UCHAR ucPos;

}REC_S;

REC_S stMax,*pstMax;

四字節對齊方式時: sizeof(pucCharArray) = __指針的數組,每個指針的地址都是4字節____, sizeof(stMax)=_______, sizeof(pstMax)=__地址______,sizeof(*pstMax)=________.

答案:400 12 4 12

20.typedef union unHead

{

UCHAR aucSrc [6];

struct tagContent

{

UCHAR ucFlag[3];

ULONG ulNext;

}Content;

}HEAD_S;

32CPU,VC編譯環境下:

在強制壹字節對齊情況下,請指出sizeof(HEAD_S) = ________;

在強制二字節對齊情況下,請指出sizeof(HEAD_S) = ________;

在強制四字節對齊情況下,請指出sizeof(HEAD_S) = ________;

答案:7 8 8

21.

UCHAR *pszTest = "hello";

UCHAR aucTest[] = "hello";

請問 sizeof(pszTest) = _____ , sizeof(*pszTest) = ______, sizeof(aucTest) = ______.

答案:4 1 6

22. struct BBB

{

long lNum;

char *pcName;

short sDate;

char cHa[2];

short sBa[6];

}*p;

p = 0x100000;

p + 0x1 = 0x____

(unsigned long)p + 0x1 = 0x______

(unsigned long *)p + 0x1 = 0x______

(char *)p + 0x1 = 0x______

答案:100018 100001 100004 100001

23.在4字節對齊的情況:

typedef struct tagRec

{

long lA1;

char cA2;

char cA3;

long lA4;

long lA5;

} REC_S;

void main(int argc, char *argv[])

{

REC_S stMax ;

printf("\r\n sizeof(stMax)= %d",sizeof(stMax));

return;

}

輸出結果為:

sizeof(stMax)=____

答案:16

24.void main ()

{

unsigned long ulA = 0x11000000;

printf("\r\n%x",*(unsigned char *)&ulA);

return;

}

輸出結果為:

答案:0

三、指出下列程序中導致不能出現預期結果的唯壹錯誤(不考慮編程規範錯誤)

1.下面程序用於輸出用戶輸入的字符串。請指出其中的問題

#define OK 0

#define ERR 1

#define ERROR (-1)

#define BUFFER_SIZE 256

int GetMemory(char **ppszBuf, int num)

{

if( NULL == ppszBuf )

{

ASSERT(0);

return ERROR;

}

*ppszBuf = (char *)malloc(num);

if(NULL == *ppszBuf)

{

return ERROR;

}

return OK;

}

void Test(void)

{

char *pcStr = NULL;

if(OK == GetMemory(&pcStr, BUFFER_SIZE))

{

scanf("%s",pcStr);/*這裏假定BUFFER_SIZE足夠大,不會導致越界*/

printf(pcStr);

free(pcStr);

}

return;

}

答案:要采用printf("%s", str)的形式打印,否則如果輸入為%s, %d等形式可能會導致不可知現象。

2.此函數實現把32位IP地址(主機序)以字符串的方式打印出來,請找出代碼中的錯誤:

char *IpAddr2Str(unsigned long ulIpAddr)

{

char szIpAddr[32];

(void)VOS_sprintf(szIpAddr, "%d.%d.%d.%d", ulIpAddr >> 24,

(ulIpAddr >> 16) & 0xff, (ulIpAddr >> 8) & 0xff, ulIpAddr & 0xff);

return szIpAddr;

}

答案:函數的局部變量是存放在堆棧中的,此函數返回了堆棧中的地址,函數退出後堆棧中的內容不可用。

3.如下程序用於輸出"Welcome Home"。請指出其中的錯誤:

void Test(void)

{

char pcArray[12];

strcpy(pcArray,"Welcome Home");

printf("%s!", pcArray);

return;

}

答案:數組越界。

4.如下程序用於把"blue"字符串返回,請指出其中的錯誤:

char *GetBLUE(void)

{

char* pcColor ;

char* pcNewColor;

pcColor = "blue";

pcNewColor = (char*)malloc(strlen(pColor));

if(NULL == pcNewColor)

{

return NULL;

}

strcpy(pcNewColor, pcColor);

return pcNewColor;

}

答案:申請內存空間不足,字符串結尾還有'\0'。

5.下面程序期望輸出str = hello world,請指出其中的錯誤:

char * GetStr(char *p)

{

p = "hello world";

return p;

}

void main()

{

char *str = NULL;

if(NULL != GetStr(str))

{

printf("\r\n str = %s",str);

}

return;

}

答案:無法返回字符串,參數使用錯誤。

  • 上一篇:Crpg源代碼
  • 下一篇:有哪些C++經典書籍?
  • copyright 2024編程學習大全網