这是C语言的题目,请具体说明解题步骤以及原因
1若有定义:char*x="abcdefghi";以下选项中正确运用了strcpy函数的是Achary[10];strcpy(y,x[4]);Bchary[10];str...
1 若有定义:char *x="abcdefghi";以下选项中正确运用了strcpy函数的是
A char y[10];strcpy(y,x[4]);
B char y[10];strcpy(++y,&x[1]);
C char y[10],*s;strcpy(s=y+5,x);
D char y[10],*s;strcpy(s=y+1,x+1);
这一题我不明白的地方是这里的y是不是代表y[10]的首地址,为什么可以表示成s=y+1,这样是不是不合法 能不能有++y这种表示
2 有以下程序
#include <stdio.h>
main()
{ char p[20]={'a','b','c','d'},q[]="abc" r[]="abcde"
strcat(p,r)
strcpy(p+strlen(q),q);
printf("%d\n"),sizeof(p)); }
程序运行后输出的结果是
A 9
B 6
C 11
D 7
这一题我不懂的地方是strcat(p,r)的作用是什么,strlen(q) 和sizeof(p)有什么区别 ,sizeof算长度时算不算‘\n’
3 有以下程序
#include <stdio.h>
main()
void f(char p[][10],int n) /*字符串从小到大排列*/
{ char t[10]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0) { strcpy(t,p[i]);
strcpy(p[i],p[j]); strcpy(p[i],t);
}}
main() {char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("%d\n",strlen(p[0]));}
程序运行后输出的结果是
A 2
B 4
C 6
D 8
这一题我不明白的是在函数定义时p[][10]是一个二维数组,为甚么有if(strcmp(p[i],p[j])>0这一步 展开
A char y[10];strcpy(y,x[4]);
B char y[10];strcpy(++y,&x[1]);
C char y[10],*s;strcpy(s=y+5,x);
D char y[10],*s;strcpy(s=y+1,x+1);
这一题我不明白的地方是这里的y是不是代表y[10]的首地址,为什么可以表示成s=y+1,这样是不是不合法 能不能有++y这种表示
2 有以下程序
#include <stdio.h>
main()
{ char p[20]={'a','b','c','d'},q[]="abc" r[]="abcde"
strcat(p,r)
strcpy(p+strlen(q),q);
printf("%d\n"),sizeof(p)); }
程序运行后输出的结果是
A 9
B 6
C 11
D 7
这一题我不懂的地方是strcat(p,r)的作用是什么,strlen(q) 和sizeof(p)有什么区别 ,sizeof算长度时算不算‘\n’
3 有以下程序
#include <stdio.h>
main()
void f(char p[][10],int n) /*字符串从小到大排列*/
{ char t[10]; int i,j; for(i=0;i<n-1;i++) for(j=i+1;j<n;j++)
if(strcmp(p[i],p[j])>0) { strcpy(t,p[i]);
strcpy(p[i],p[j]); strcpy(p[i],t);
}}
main() {char p[5][10]={"abc","aabdfg","abbd","dcdbe","cd"};
f(p,5);
printf("%d\n",strlen(p[0]));}
程序运行后输出的结果是
A 2
B 4
C 6
D 8
这一题我不明白的是在函数定义时p[][10]是一个二维数组,为甚么有if(strcmp(p[i],p[j])>0这一步 展开
3个回答
展开全部
1.选?
一个数组的数组名即该数组的首地址,或第一个元素的地址,但数组名是const型的,不能被改变,你可以理解成一个常量指针
所以 y代表y[10]的首地址,++y不可以
但 s=y+5 是合法的, s是指针,接受的地址是 y+5,即(&y[5]),y没有被改变
再看strcpy的定义:
char *strcpy( char *, const char *);参数要求的是字符指针
所以A不对,x[4]不是指针 B不对,++y不合法
C语法没错,但是strcpy(s=y+5, x),就是从数组y[10]的第6个字符地址开始复制x指针指向的字符串,会造成溢出
D语法没错,也不会造成溢出,但是y[0]没有赋值
综上,选D好点
--------------------------------------------------------------------
2.
strcat(p, q)-----将q所指向的字符串连接在p后面,前提是p有足够大的空间盛放相加后的字符串
例如:p[10]="1", q[10]="23", strcat(p, q)后,p指向的字符串变为“123”
stelen()是计算字符串的长度,不包括\0
sizeof()是计算一个数据类型所占字节,如果有\n或\0,也计算
char p[20]={'a','b','c','d'},q[]="abc" r[]="abcde";
strcat(p,r) -----p变成"abcdabcde"
strcpy(p+strlen(q),q);----p变成"abcabc\0de"
printf("%d\n"),sizeof(p));---p[20],总共占20个字节(20*1)
所以没有正确答案
如果是strlen(p), 则答案为6
-------------------------------------------------------------------
3.
二维字符数组,p[5][10]
若只显示p[i]时,代表第i+1行首地址,或者理解成指向第i+1行字符串的指针
那么strcmp(p[i],p[j])意思就是比较第i+1行和j+1行字符串大小,从而实现排序
此题经过排序后为
p[5][10]={"aabdfg","abbd","abc","cd","dcdbe"};
所以strlen(p[0])=6,选C
一个数组的数组名即该数组的首地址,或第一个元素的地址,但数组名是const型的,不能被改变,你可以理解成一个常量指针
所以 y代表y[10]的首地址,++y不可以
但 s=y+5 是合法的, s是指针,接受的地址是 y+5,即(&y[5]),y没有被改变
再看strcpy的定义:
char *strcpy( char *, const char *);参数要求的是字符指针
所以A不对,x[4]不是指针 B不对,++y不合法
C语法没错,但是strcpy(s=y+5, x),就是从数组y[10]的第6个字符地址开始复制x指针指向的字符串,会造成溢出
D语法没错,也不会造成溢出,但是y[0]没有赋值
综上,选D好点
--------------------------------------------------------------------
2.
strcat(p, q)-----将q所指向的字符串连接在p后面,前提是p有足够大的空间盛放相加后的字符串
例如:p[10]="1", q[10]="23", strcat(p, q)后,p指向的字符串变为“123”
stelen()是计算字符串的长度,不包括\0
sizeof()是计算一个数据类型所占字节,如果有\n或\0,也计算
char p[20]={'a','b','c','d'},q[]="abc" r[]="abcde";
strcat(p,r) -----p变成"abcdabcde"
strcpy(p+strlen(q),q);----p变成"abcabc\0de"
printf("%d\n"),sizeof(p));---p[20],总共占20个字节(20*1)
所以没有正确答案
如果是strlen(p), 则答案为6
-------------------------------------------------------------------
3.
二维字符数组,p[5][10]
若只显示p[i]时,代表第i+1行首地址,或者理解成指向第i+1行字符串的指针
那么strcmp(p[i],p[j])意思就是比较第i+1行和j+1行字符串大小,从而实现排序
此题经过排序后为
p[5][10]={"aabdfg","abbd","abc","cd","dcdbe"};
所以strlen(p[0])=6,选C
展开全部
第一题:你要明白strcpy的原型:strcpy(char*,const char*),首先这个题解题应该从第二个形参入手,y肯定是代表数组的首地址,没有任何争议,s是指针,s=y+1,这样做没有任何问题,++y也是可以的,语法上都正确,关键是看strcpy做了什么事情。
第二题,sizeof肯定要算\n,strlen是一个函数,sizeof是一个关键字,虽然他也带参数,但是其实他是一个关键字,strcat(p,r)这个是字符串连接函数,目的是将r连接到p的末尾,其返回值是一个连接好后的字符串。
第三题,p是个二维数组,但是我们可以这样理解他,p的第二维是一个独立的一位数组,那么p的第一维就可以理解为是指向第二维的一维数组的首地址的指针,所以p【i】实际上是指向p【j】这个一维数组的第一个元素的地址,即p【i】=p[i][0],那么这样看来strcmp实际上是排序的判断,因为a,d,c的大小是有区别的,那么首先从a,d,c就能大略排出前三个串和后两个串的位置
第二题,sizeof肯定要算\n,strlen是一个函数,sizeof是一个关键字,虽然他也带参数,但是其实他是一个关键字,strcat(p,r)这个是字符串连接函数,目的是将r连接到p的末尾,其返回值是一个连接好后的字符串。
第三题,p是个二维数组,但是我们可以这样理解他,p的第二维是一个独立的一位数组,那么p的第一维就可以理解为是指向第二维的一维数组的首地址的指针,所以p【i】实际上是指向p【j】这个一维数组的第一个元素的地址,即p【i】=p[i][0],那么这样看来strcmp实际上是排序的判断,因为a,d,c的大小是有区别的,那么首先从a,d,c就能大略排出前三个串和后两个串的位置
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1.(1)y是y[10]的首地址。(2)可以表示成s=y+1,这样是不合法的。因为s是一个变量(声明的一个字符指针,可以被赋值,是一个变量),y是一个地址,是一个常量。(3)不能那样表示,因为一个常量是不能自加的。
2.我认为是20,可能不对,因为没选项。
3.应该是C
2.我认为是20,可能不对,因为没选项。
3.应该是C
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询