解决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);
}
返回;
}
回答:无法返回字符串,参数使用不正确。