
c语言 几道题
1.若有定义:char*st="howareyou";下列正确的是()A.char[11],*p;strcpy(p=a+1,&st[4]);B.chara〔11];str...
1.若有定义:char *st="how are you";下列正确的是()
A.char[11],*p;strcpy(p=a+1,&st[4]);
B.char a〔11];strcpy(++a,st);
C.char a[11];strcpy(a,st);
D.char a[],*p;strcpy(p=&a[1],st+2);
请解释一下其他三项为什么不对的?
2.这是将一个长整形的数13572468倒置,放到一个数组中。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define N 80
char str[N];
void fun(long int n)
{
int I=0;
while(n)
{
str[I]=n%10+'0';
n/=10;
I++;
}
}
void main()
{
long int n=13572468;
system("CLS");
printf("****** the origial data ********\n");
printf("n=%ld",n);
fun(n);
printf("\n%s",str);
}
其中的str[I]=n%10+'0';,为什么要加上'0',不加的话得到的结果是一堆奇怪的符号。帮忙解释一下????越详细越好。
第一题选A
D为什么不对? 展开
A.char[11],*p;strcpy(p=a+1,&st[4]);
B.char a〔11];strcpy(++a,st);
C.char a[11];strcpy(a,st);
D.char a[],*p;strcpy(p=&a[1],st+2);
请解释一下其他三项为什么不对的?
2.这是将一个长整形的数13572468倒置,放到一个数组中。
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#define N 80
char str[N];
void fun(long int n)
{
int I=0;
while(n)
{
str[I]=n%10+'0';
n/=10;
I++;
}
}
void main()
{
long int n=13572468;
system("CLS");
printf("****** the origial data ********\n");
printf("n=%ld",n);
fun(n);
printf("\n%s",str);
}
其中的str[I]=n%10+'0';,为什么要加上'0',不加的话得到的结果是一堆奇怪的符号。帮忙解释一下????越详细越好。
第一题选A
D为什么不对? 展开
5个回答
展开全部
strcpy的函数原型是char *strcpy(char *str1, char *str2);
A.char[11],*p;strcpy(p=a+1,&st[4]);
B.char a〔11];strcpy(++a,st);
C.char a[11];strcpy(a,st);
D.char a[],*p;strcpy(p=&a[1],st+2);
四个选项中主要是看函数参数类型是否符合,第一个虽然符合,都为char型但是,定义中char[11]的写法是错的。(按照你的补充说是选A,那么你肯定打错了,不会有char[11]这中写法的,如果是char a[11]那么就选A)
第二个++a虽然也是char型的指针,但是a只有11个char型的内存空间,在进行完++之后,还剩10个,而st有12个字符(最后一个是‘\0’),所以数组越界,不对!
第三个因为a表示数组a[11]的首地址,st也是char型的指针,所以类型相符,但是,st比a多一个\0结束符,空间不符。
第四个定义char a[]时必须指定数组长度,这样定义是不行的!
至于第二题,+ '0'是为了将整形的数字转换为字符型的存储,你可以去查一下ASCII码表,0-9这9个数字的ASCII码是48-57,也就是所是连续的,n%10之后就是0-9中的一个数,在+‘0’也就是+48得到的肯定是48-57中的一个数,也就是0-9这9个字符对应的ASCII码。
A.char[11],*p;strcpy(p=a+1,&st[4]);
B.char a〔11];strcpy(++a,st);
C.char a[11];strcpy(a,st);
D.char a[],*p;strcpy(p=&a[1],st+2);
四个选项中主要是看函数参数类型是否符合,第一个虽然符合,都为char型但是,定义中char[11]的写法是错的。(按照你的补充说是选A,那么你肯定打错了,不会有char[11]这中写法的,如果是char a[11]那么就选A)
第二个++a虽然也是char型的指针,但是a只有11个char型的内存空间,在进行完++之后,还剩10个,而st有12个字符(最后一个是‘\0’),所以数组越界,不对!
第三个因为a表示数组a[11]的首地址,st也是char型的指针,所以类型相符,但是,st比a多一个\0结束符,空间不符。
第四个定义char a[]时必须指定数组长度,这样定义是不行的!
至于第二题,+ '0'是为了将整形的数字转换为字符型的存储,你可以去查一下ASCII码表,0-9这9个数字的ASCII码是48-57,也就是所是连续的,n%10之后就是0-9中的一个数,在+‘0’也就是+48得到的肯定是48-57中的一个数,也就是0-9这9个字符对应的ASCII码。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一
如果有定义语句char
str1[10],str2[10]={"books"};则能将字符串
books赋给数组str1的正确语句是___B_____。
A)
str1="books";
B)
strcpy(str1,str2);
C)
str1=str2;
D)
strcpy(str2,str1);
请选择->
A
B
C
D
2、
下面程序的输出是______C__。
#include
<stdio.h>
#include
<string.h>
main()
{
char
p1[10]="abc",p2[]="ABC",str[50]="xyz";
strcpy(str,strcat(p1,p2));
printf("%s\n",str);
}
A)
xyzABCabc
B)
abcABC
C)
xyabcABC
D)
xyzabcABC
请选择->
A
B
C
D
3、
下面程序执行后,输出的结果是____C____。
#include<stdio.h>
#include<string.h>
main()
{
char
ss[10]="12345";
strcat(ss,"6789");
printf("%s\n",ss);
}
A)
ABC
B)
ABC9
C)
123456789
D)
ABC456789
请选择->
A
B
C
D
4、
假定int类型变量占用两个字节,若有定义:int
x[10]={0,2,4};
,
则数组x在内存中所占字节数是___C_____。
A)
3
B)
6
C)
10
D)
20
请选择->
A
B
C
D
5、
以下对一维数组a进行正确初始化的是_____A_____。
A
A)
int
a[10]=(0,0,0,0,0);
B)
int
a[10]={
};
C)
int
a[3]={0},
D)
int
a[10]={
10*2};
请选择->
A
B
C
D
6、
在执行语句:
int
a[
][3]={1,2,3,4,5,6};
后,
a[1][0]的值是___A_____。
A)
4
B)
1
C)
2
D)
5
请选择->
A
B
C
D
7、
合法的数组定义是____D____。
A)
int
a[6]={"string"};
B)
int
a[5]={0,1,2,3,4,5};
C)
char
a={"string"};
D)
char
a[]={0,1,2,3,4,5};
请选择->
A
B
C
D
8、
设有定义语句:static
char
str[
]="Are
you
ready?";,则执行
printf("%d\n",
strlen(strcpy(str,"OK!")));
后的输出结果为____A____。(注意各单词之间有一空格)
A)
16
B)
14
C)
3
D)
2
9、
设有定义语句:static
char
str[20]="Are
you
ready?";,则执行
printf("%d\n",
strlen(strcat(str,"OK")));
后的输出结果为____A____。(注意各单词之间有一空格)
A)
16
B)
10
C)
2
D)
20
10、
请读程序:
#include<stdio.h>
#include<string.h>
main()
{
char
s1[20]="Ab",
s2[20]="ABCDE";
printf("%d\n",strcmp(s1,s2));
}
上面程序的输出结果是___B_____。
A)
确定的正数
B)
不确定的正数
C)
零
D)
负数
请选择->
A
B
C
D
如果有定义语句char
str1[10],str2[10]={"books"};则能将字符串
books赋给数组str1的正确语句是___B_____。
A)
str1="books";
B)
strcpy(str1,str2);
C)
str1=str2;
D)
strcpy(str2,str1);
请选择->
A
B
C
D
2、
下面程序的输出是______C__。
#include
<stdio.h>
#include
<string.h>
main()
{
char
p1[10]="abc",p2[]="ABC",str[50]="xyz";
strcpy(str,strcat(p1,p2));
printf("%s\n",str);
}
A)
xyzABCabc
B)
abcABC
C)
xyabcABC
D)
xyzabcABC
请选择->
A
B
C
D
3、
下面程序执行后,输出的结果是____C____。
#include<stdio.h>
#include<string.h>
main()
{
char
ss[10]="12345";
strcat(ss,"6789");
printf("%s\n",ss);
}
A)
ABC
B)
ABC9
C)
123456789
D)
ABC456789
请选择->
A
B
C
D
4、
假定int类型变量占用两个字节,若有定义:int
x[10]={0,2,4};
,
则数组x在内存中所占字节数是___C_____。
A)
3
B)
6
C)
10
D)
20
请选择->
A
B
C
D
5、
以下对一维数组a进行正确初始化的是_____A_____。
A
A)
int
a[10]=(0,0,0,0,0);
B)
int
a[10]={
};
C)
int
a[3]={0},
D)
int
a[10]={
10*2};
请选择->
A
B
C
D
6、
在执行语句:
int
a[
][3]={1,2,3,4,5,6};
后,
a[1][0]的值是___A_____。
A)
4
B)
1
C)
2
D)
5
请选择->
A
B
C
D
7、
合法的数组定义是____D____。
A)
int
a[6]={"string"};
B)
int
a[5]={0,1,2,3,4,5};
C)
char
a={"string"};
D)
char
a[]={0,1,2,3,4,5};
请选择->
A
B
C
D
8、
设有定义语句:static
char
str[
]="Are
you
ready?";,则执行
printf("%d\n",
strlen(strcpy(str,"OK!")));
后的输出结果为____A____。(注意各单词之间有一空格)
A)
16
B)
14
C)
3
D)
2
9、
设有定义语句:static
char
str[20]="Are
you
ready?";,则执行
printf("%d\n",
strlen(strcat(str,"OK")));
后的输出结果为____A____。(注意各单词之间有一空格)
A)
16
B)
10
C)
2
D)
20
10、
请读程序:
#include<stdio.h>
#include<string.h>
main()
{
char
s1[20]="Ab",
s2[20]="ABCDE";
printf("%d\n",strcmp(s1,s2));
}
上面程序的输出结果是___B_____。
A)
确定的正数
B)
不确定的正数
C)
零
D)
负数
请选择->
A
B
C
D
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.若有定义:char *st="how are you";下列正确的是(A)
A.char a[11],*p;strcpy(p=a+1,&st[4]); //应该是可以的
B.char a[11];strcpy(++a,st); // ++a数组应该不可以.如果可以也会越界.
C.char a[11];strcpy(a,st); //因为st比a大,所以会多写一个'\0'
D.char a[],*p;strcpy(p=&a[1],st+2); 没有st + 2的说法.
2.加上'0'(33)就是为的得到数字。因为数字0在内存中是0,而符号0在内存中是33。如果不加上'0'或33,那么得到的字符和对应的数字并不配。
如果不要加上'0'那么修改一下
printf("\n%s",str);
变成
printf("\n%d",str);
%s表示把str当成字符串来对待。改成%d就可以了。
应对也是可以的。
A.char a[11],*p;strcpy(p=a+1,&st[4]); //应该是可以的
B.char a[11];strcpy(++a,st); // ++a数组应该不可以.如果可以也会越界.
C.char a[11];strcpy(a,st); //因为st比a大,所以会多写一个'\0'
D.char a[],*p;strcpy(p=&a[1],st+2); 没有st + 2的说法.
2.加上'0'(33)就是为的得到数字。因为数字0在内存中是0,而符号0在内存中是33。如果不加上'0'或33,那么得到的字符和对应的数字并不配。
如果不要加上'0'那么修改一下
printf("\n%s",str);
变成
printf("\n%d",str);
%s表示把str当成字符串来对待。改成%d就可以了。
应对也是可以的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
楼主好多都打错了,呵呵,不过还看得懂,我慢慢来帮你答下吧..
我也是菜鸟哦.也希望高手来回答..
1.选D吧.前三个应该都会发生越界吧
高手来说说看.我蒙的。
2.这里加'0'应该是个强制转换的作用..
str为char类型.一个字符..而N为long int.四个字符..
加0的时候..加上'0'的ASIC码..最后以一个字符显示.如果不加的话.则为四个字节的int ..所以就是乱码..这个答案应该就是的..
楼下的朋友.st+2中存储的不就是字符'o'吗?请指教.
我也是菜鸟哦.也希望高手来回答..
1.选D吧.前三个应该都会发生越界吧
高手来说说看.我蒙的。
2.这里加'0'应该是个强制转换的作用..
str为char类型.一个字符..而N为long int.四个字符..
加0的时候..加上'0'的ASIC码..最后以一个字符显示.如果不加的话.则为四个字节的int ..所以就是乱码..这个答案应该就是的..
楼下的朋友.st+2中存储的不就是字符'o'吗?请指教.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
str[I]=n%10+'0'应该是str[I]=n%10+'\0' 吧,\0 是字符串的结束标记,如果没有的话当然会很难看了,因为是字符串整体输出,会一直从第一个输出到第一个字符串结束标记的。这样肯定会输出一些无关的信息的,系统”垃圾“
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询