解决c语言编程问题

逻辑运算和判断选择控制

1.编程需要输入整数A和b,如果a2+b2大于100,则输出a2+b2大于100位的数;否则,将输出两个数的和。

# include & ltstdio.h & gt

int main()

{

int a,b;

printf("输入两个数:");

scanf("%d %d ",& amp一,& ampb);

if((a * a+b * b)& gt;=100)

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

其他

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

getch();

}

2.尝试编程判断输入的正整数是否都是5和7的整数倍。如果是,则输出是;否则,输出编号

# include & ltstdio.h & gt

int main()

{

int a;

printf("输入一个数字:");

scanf("%d ",& ampa);

if(a % 5 = = 0 & amp;& ampa%7==0)

printf(" yes ");

其他

printf(" no ");

getch();

}

1.写一个程序把字符串计算机分配到一个字符数组,然后从第一个字母开始每隔一段时间输出一次字符串。请用指针完成它。

# include & ltstdio.h & gt

int main()

{

char string[]= "计算机";

char * p = string

while(*p)

{

printf("%c ",* p);

p++;

p++;

}

getch();

}

2、输入一个字符串string,然后在字符串中的每个字母之间加一个空格,请用指针来完成。

# include & ltstdio.h & gt

# include & lt科尼奥。H & gt

# include & ltSTDLIB。H & gt

#定义最大100

char * copyString

void copy(char *,char *);

void插入(char *);

int main()

{

char * string

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

scanf("%s ",字符串);

插入(字符串);

printf("%s ",字符串);

getch();

返回0;

}

无效副本(char * c,char * s)

{

while(*s!='\0')

{

* c = * s;

s++;

c++;

}

* c = ' \ 0

}

空插入(字符)

{

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

copy(copyString,s);

while(*copyString!='\0')

{

* s = * copyString

s++;

copy string++;

* 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示例(char acHello[])

{

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

返回;

}

void main()

{

char acHello[] = "你好";

例子(阿切洛);//数组名作为参数,传递地址,一个地址占四个字节。

返回;

}

的输出是

不确定

答:答

3.有以下程序段

char Acar[]= " ABCDE ";

char * pcPtr

for(pcPtr = acArr;pcPtr & ltacArr+5;pcPtr++)

{

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

}

返回;

输出结果是()

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

BCDE

CDE

D B DE

鄂阿鄂

答案:d

4.在中断中,信号量不能同步获取,但可以释放。

A.对的b .错的

答:答

5.下列说法不正确的是()

a)具有相同名称的变量可用于不同的函数

b)函数中的形参是局部变量。

c)函数中定义的变量只在该函数范围内有效。

d)函数内复合语句定义的变量在该函数范围内有效(复合语句指函数内成对括号形成的代码)。

答案:d

6.提供了以下定义:

无符号长整型pulArray[] = {6,7,8,9,10 };

无符号long * pulPtr

以下程序段的输出结果是()

pulPtr = pulArray

*(pulPtr+2)+= 2;

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

a)810 B)6.8 C)7.9D)610

答案:d

7.定义一个结构时有几个语句。请指出正确的一项(多选):_ _ _ _ _ _ _ _

a、结构的每个部分,最好对齐四个字节;

b,该结构的总长度优选地在四个字节中对齐;

c、结构中成员的存储不考虑字节对齐;

答案:a,b

8.void示例()

{

int I;

char AC new[20];

for(I = 0;我& lt10;i++)

{

AC new[I]= ' 0 ';

}

printf("%d\n ",strlen(AC new));

返回;

}

的输出是()

A 0 B 10 C 11 D不确定。

答案:d

9.switch (c)中c的数据类型可以是char、long、float、unsigned、bool。()

A.对的b .错的

答案:b

10.默认情况下,网络上传输的字节顺序很大。如果主机较小,在网络上通信时必须转换字节顺序;如果主机是

大字节序,为了程序的一致性和可移植性,最好在程序中加入字节序转换操作(空操作)。

A.对的b .错的

答:答

11.结构研究

{

int num

字符名称[10];

int age

};

无效资金(结构stu *p)

{

printf("%s\n ",(*p)。姓名);

返回;

}

void main()

{

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

{9802,"王",19},

{9803,"赵",18 } };

好玩(学生+2);

返回;

}

输出结果是()

a)张B)赵C)王D) 18

答案:b

12.以下程序运行后,输出结果是()。

void main()

{

char * szStr = " abcde

sztr+= 2;

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

返回;

}

一个cde B字符c的ASCLL码值

C“abcde”是字符C所在地址D的一个错误。

答案:c

13.在X86下,有以下过程。

# include & ltstdio.h & gt

void main()

{

联盟

{

int k;

char I[2];

}*s,a;

s = & ampa;

s-& gt;I[0]= 0x 39;

s-& gt;I[1]= 0x 38;

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

}

输出结果是()

A) 3839 B) 3938 C) 380039 D)不可预测。

答案:d

14.全局变量可以在多个。c文件。

A.对的b .错的

答案:b

15.void示例()

{

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,0 };

for(I = 0;我& lt10;i++)

{

AC new[I]= ' 0 ';

}

printf("%d\n ",strlen(AC new));

返回;

}

的输出是:

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 ';

答案:王牌

17.函数内部定义的变量(静态变量、寄存器变量等特殊变量除外)的内存在堆栈内存中,所以在函数内部定义变量时,堆栈一定不能溢出。如果临时变量

占用空间很大,要用内存申请的方法,让这个变量指向的内存在堆内存里。

A.对的b .错的

答:答

18.局部变量可以和全局变量同名,编译的时候不会有错误,但是不小心可能会用错变量,所以在给局部变量计时的时候,不要和全局变量同名。

A.对的b .错的

答:答

19.提供了以下宏定义:

#定义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数据的指针变量。

ptr是一个指针,指向一个返回int数据的函数。

D) ptr是指向函数的指针,函数的返回值是指向int数据的指针。

答案:d

21.0x12345678内存的顺序在BigEndian中是_ _ _ _ _,在LittleEndian中是_ _ _ _ _ _。

(答案从左到右递增。)

12 34 56 78

C.78 56 34 12

答案是:交流电

二、填空:

1.。结构标签a

{

无符号字符ucId:1;

无符号字符UCP ara 0:2;

无符号字符ucState:6;

无符号字符UC tail:4;

无符号字符ucAvail

无符号字符UC tail 2:4;

无符号长ulData

} AAA _ S;

问:字节对齐分别为1和4时,AAA_S占用的空间是多少?

答案:9 12

2.typedef结构标记测试

{

UCHAR ucFlag

ULONG ulLen

} TEST _ S;

TEST _ S TEST[10];

四字节对齐:sizeof (test _ s) = _ _ _ _,sizeof(test)_ _ _ _ _ _ _。

答案:8 80

char a chello[]= " hello \ 0 world ";

char AC new[15]= { 0 };

strcpy(acNew,a chello);

strlen(acNew) = ____

sizeof(acHello) = _____

答案:5 12

4.#pragma pack(4)/*编译选项,指示4字节对齐*/

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

{

结构标记测试1

{

短a;

char d;

龙b;

长c;

};

结构标记测试2

{

龙b;

短c;

char d;

长a;

};

结构标记测试3

{

短c;

龙b;

char d;

长a;

};

struct tagtest 1 STT 1;

struct tagTest2 stT2

struct tagTest3 stT3

printf("%d %d %d ",sizeof(stT1),sizeof(stT2),sizeof(STT 3));

返回0;

}

#pragma pack()(编译选项结束)

输出结果是什么?_ _ _ _ _ _ _

答案:12 12 16。

5.枚举ENUM_A

{

X1,

Y1,

Z1 = 5,

A1,

B1

};

ENUM ENUM _ A enumA = y 1;

ENUM ENUM _ A ENUM b = b 1;

请问,enumA = _ _ _ _enum b = _ _ _ _ _ _ _;

答案:1 7

6.下列程序的输出是_ _ _ _ _ _。

# include & ltstdio.h & gt

int fun(int x,int y)

{

静态int m = 0;八

静态int I = 2;三

I+= m+1;12

m = I+x+y;

返回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);

返回;

}

答案:8 17

7.下列程序的输出是_ _ _ _ _ _ _ _ _

#定义CIR(r) r*r /*请注意这个定义的缺陷,不允许定义*/

void main()

{

int a = 1;

int b = 2;

int t;

t = CIR(a+b);

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

返回;

}

答案:5

8.在VRP,实现了strncpy的类似功能,其定义如下:

#定义字符字符

#定义ULONG无符号长整型

#定义空空

#define MACRO_COPYWORLDLENGTH 4

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

{

CHAR * pcPoint = pcDest

if((NULL = = SZ src)| |(NULL = = PC dest)))

{

返回NULL

}

而(ulLength & amp& amp(*pcPoint = *szSrc))/*这里采用判断语句赋值的方法(*pcPoint = *szSrc),建议不要用*/

{

PC point++;

SZ src++;

ulLength-;

}

如果(!ulLength)

{

* pcPoint = ' \ 0

}

返回pcDest

}

无效总管(无效)

{

CHAR sztrbuf[]= " 1234567890 ";

CHAR szstrbuf 1[]= " 1234567890 ";

CHAR *szHelloWorld = "Hello World!";

strncpy(szStrBuf,szHelloWorld,MACRO _ COPYWORLDLENGTH);

VOS_strncpy(szStrBuf1,szHelloWorld,MACRO _ COPYWORLDLENGTH);

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

}

程序的输出是_ _ _ _ _ _ _ _ _

答案:Hell567890地狱

9.

char a chello[]= " hello \ 0 world ";

char AC new[15]= { 0 };

memcpy(acNew,acHello,12);

strlen(acNew) = ____

sizeof(acHello) = ____

答案:5 12

10.typedef结构头

{

UCHAR AUC src[6];

ULONG ulType

} HEAD _ S;

在强制单字节对齐的情况下,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

在强制二进制对齐的情况下,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

如果是强制四字节对齐,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

答案:10 10 12

联合tagAAAA

{

结构体

{

char ucFirst

短usSecond

char ucThird

}一半;

龙立;

}数字;

结构标签BBBBB

{

char ucFirst

短usSecond

char ucThird

短usForth

}一半;

结构标记CCCC

{

结构体

{

char ucFirst

短usSecond

char ucThird

}一半;

龙立;

};

在字节对齐为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 .结构标签

{

char cB

短sC;

char cD

龙拉;

} * pAbc

pAbc = 0x 100000;

那么PABC+0x 100 = 0x _ _ _ _ _ _ _ _ _;(ULONG)pAbc+0x 100 = 0x _ _ _ _ _ _ _ _ _;(ULONG *)pAbc+0x 100 = 0x _ _ _ _ _ _ _ _ _;(char *)pAbc+0x 100 = 0x _ _ _ _ _ _ _ _ _;

答案:100 c 00100100100400100100。

13 .无符号长整型FUNC_C(无符号长整型操作)

{

无符号长整型ul result = 0;

开关(u动作)

{

案例操作_A:

{

ul result+= 1;

打破;

}

案例操作_B:

{

ul result+= 1;

}

默认值:

{

ul result+= 1;

}

}

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

返回ulResult

}

当输入为ACTION_B时,输出结果为:UL结果= _ _ _ _ _ _ _ _;

答案:2(因为这个分支没有断点)

14.在下面的代码中,执行函数测试后,打印的结果是_ _ _ _。

无符号长整型g _ ul global = 0;

void GlobalInit(无符号长整型ulArg)

{

ulArg = 0x 01;

返回;

}

无效测试()

{

global init(g _ ul global);

printf("%lu ",g _ ul global);

返回;

}

答案:0

15.下列程序的输出结果是_ _ _ _ _ _ _ _ _

int x = 3;

void incr();

void main()

{ int I;

for(I = 1;我& ltx;i++)

{

incre();

}

返回;

}

无效增量()

{

静态int x = 1;

x * =(x+1);

printf("%d ",x);

返回;

}

答案:2 6

16.下列程序的输出结果是_ _ _ _ _ _ _ _ _

#pragma pack(4)/*四字节对齐*/

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

{

无符号字符puc[4];

结构标记

{

无符号字符ucpim 1;

无符号字符UC data 0:1;

无符号字符UC data 1:2;

无符号字符UC data 2:3;

} * pstPimData

pstPimData =(struct tag PIM *)puc;

memset(puc,0,4);

pstPimData-& gt;ucpim 1 = 1;

pstPimData-& gt;UC data 0 = 2;

pstPimData-& gt;UC data 1 = 3;

pstPimData-& gt;UC data 2 = 4;

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

返回0;

}

#pragma pack()/*恢复默认对齐*/

答案:01 26 00 00

17.

char * PC color = " blue 1 ";

char acColor[]= " blue 1 ";

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 us level[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 AUC src[6];

结构标记内容

{

UCHAR UC flag[3];

ULONG ulNext

}内容;

} HEAD _ S;

32CPU,VC编译环境:

在强制单字节对齐的情况下,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

在强制二进制对齐的情况下,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

如果是强制四字节对齐,请指明sizeof(head _ s)= _ _ _ _ _ _ _;

答案:7 8 8

21.

UCHAR * pszTest = " hello

UCHAR AUC test[]= " hello ";

请问sizeof (psztest) = _ _ _,sizeof (* psztest) = _ _ _ _,sizeof (auctionest) = _ _ _。

答案:4 1 6

22.结构BBB

{

long lNum

char * pcName

短sDate

char cHa[2];

短sBa[6];

} * p;

p = 0x 100000;

p + 0x1 = 0x___

(无符号长整型)p + 0x1 = 0x______

(无符号长整型*)p + 0x1 = 0x______

(char *)p + 0x1 = 0x______

答案:10001810001 100004 10001。

23.在4字节对齐的情况下:

typedef结构tagRec

{

龙la 1;

char cA2

char cA3

龙lA4

龙lA5

} REC _ S;

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

{

REC _ S stMax

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

返回;

}

输出结果是:

sizeof(stMax)=___

答案:16

24.void main()

{

无符号长整型ulA = 0x 11000000;

printf("\r\n%x",*(无符号字符*)& amp;ulA);

返回;

}

输出结果是:

答案:0

第三,指出以下过程中导致预期结果失败的唯一错误(不考虑编程规范错误)

1.下面的程序用于输出用户输入的字符串。请指出问题。

#定义确定0

#定义错误1

#定义错误(-1)

#定义缓冲区大小256

int GetMemory(char **ppszBuf,int num)

{

if( NULL == ppszBuf)

{

断言(0);

返回错误;

}

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

if(NULL == *ppszBuf)

{

返回错误;

}

退货OK;

}

无效测试(无效)

{

char * pcStr = NULL

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

{

scanf("%s ",pcStr);/*这里假设BUFFER_SIZE足够大,可以避免越界*/

printf(pcStr);

免费(pcStr);

}

返回;

}

答:以printf("%s ",str)形式打印,否则以%s,%d等形式输入。可能会导致未知。

2.该函数可以将32位IP地址(主机序列)打印为字符串。请找出代码中的错误:

char *IpAddr2Str(无符号长整型ulIpAddr)

{

char szIpAddr[32];

(void)VOS_sprintf(szIpAddr," %d.%d.%d.%d ",ulIpAddr & gt& gt24,

(ulIpAddr & gt& gt16);0xff,(ulIpAddr & gt& gt8)& amp;0xff,ulIpAddr & amp0x ff);

返回szIpAddr

}

答:函数的局部变量存储在堆栈中。这个函数返回堆栈中的地址,函数退出后堆栈中的内容不可用。

3.下面的程序用来输出“欢迎回家”。请指出错误:

无效测试(无效)

{

char PC array[12];

strcpy(pcArray,“欢迎回家”);

printf("%s!",PC array);

返回;

}

回答:数组越界了。

4.下面的程序用于返回“蓝色”字符串,请指出错误:

char *GetBLUE(void)

{

char * pcColor

char * pcNewColor

pcColor = " blue

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

if(NULL == pcNewColor)

{

返回NULL

}

strcpy(pcNewColor,pcColor);

返回pcNewColor

}

答:请求的内存空间不足,字符串末尾有' \0 '。

5.下面的程序期望输出str = hello world,请指出错误:

char * GetStr(char *p)

{

p = " hello world

返回p;

}

void main()

{

char * str = NULL

if(NULL!= GetStr(str))

{

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

}

返回;

}

回答:无法返回字符串,参数使用不正确。