永发信息网

c语言题求详解

答案:4  悬赏:10  手机版
解决时间 2021-04-08 10:00
  • 提问者网友:且恨且铭记
  • 2021-04-07 10:21
#include<stdio.h>
main()
{
char str[ ]=”cdalb”;
abc(str);
puts(str);
}
abc(char *p)
{
int i,j;
for(i=j=0; *(p+i)!=’\0’; i++)
if(*(p+i)>=’d’)
{
*(p+j)=*(p+i);
j++;
}
*(p+j)=’\0’;
}
A.dalb B.cd C.dl D.c
最佳答案
  • 五星知识达人网友:酒者煙囻
  • 2021-04-07 10:56
#include<stdio.h>
main()
{
char str[ ]=”cdalb”; //str中存入串”cdalb”
abc(str); //处理str串
puts(str); //输出处理后的串
}
abc(char *p)
{
int i,j;
for(i=j=0; *(p+i)!=’\0’; i++) //采用指针方式,遍历数组数据:”cdalb”,到串尾结束:*(p+i)!=’\0’
if(*(p+i)>=’d’) //如果当前位置的数据比'd'大,则将数据写入新的串,新串与原串的空间起始位置相同。
{
*(p+j)=*(p+i); //赋值
j++;
}
*(p+j)=’\0’;//新串尾赋值为0,字符串结束标志。
}
输出结果:dl
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-04-07 13:59
选择C 这其实是一个把该数组中元素为d或在d后面的提取出来, if(*(p+i)>=’d’) { *(p+j)=*(p+i);将大于d 的元素提取出来 j++; } *(p+j)=’\0’;将小于的删除
  • 2楼网友:青尢
  • 2021-04-07 12:50
建议程序改为: #include<stdio.h> void abc(char *p) { int i,j; for(i=j=0; *(p+i)!='\0'; i++) if(*(p+i)>='d') { *(p+j)=*(p+i); j++; } *(p+j)='\0'; } void main() { char str[ ]="cdalb"; abc(str); puts(str); } 答案:C 第一层for循环时i=j=0,p+i指向c,条件c!=\0成立,而且c比d小所以执行*(p+j)=’\0’,而这时j等于0所以字符串str的第0个位置被替换成\0,所以str变为\0dalb\0,然后i++,i变为1 。 第二层for循环时i=1,j=0,p+i指向,d,条件d!=\0成立,而且d等于d所以执行*(p+j)=*(p+i); j++;,而这时i等于1,j等于0,所以字符串str的第0个位置被替换成d,所以str变为ddalb\0,然后j++,i++,j变为1 ,i变为2。 第三层for循环时i=2,j=1,p+i指向a,条件a!=\0成立,而且a比d小所以执行*(p+j)=’\0’,而这时,j等于1,所以字符串str的第1个位置被替换成\0,所以str变为d\0alb\0,然后i++,i变为3 。 第四层for循环时i=3,j=1,p+i指向l,条件l!=\0成立,而且l大于d所以执行*(p+j)=*(p+i); j++;,而这时i等于3,j等于1,所以字符串str的第1个位置被替换成l,所以str变为dlalb\0,然后j++,i++,j变为2,i变为4。 第五层for循环时i=4,j=2,p+i指向b,条件b!=\0成立,而且b小于d,所以执行*(p+j)=’\0’,而这时j等于2所以字符串str的第2个位置被替换成\0,所以str变为dl\0lb\0,然后i++,i变为5 。 第六层for循环时i=5,j=2,p+i指向\0,条件\0!=\0不成立,所以for循环结束,函数返回到main函数执行puts(str);而puts函数输出是以\0或者\n(换行符)作为结束标志。所以当要就在屏幕输出str字符串时,就只输出第一个\0前面的字符。 所以在屏幕上输出dl。
  • 3楼网友:爱难随人意
  • 2021-04-07 12:25
1. main() { char s[]="abcd",*p; for (p=s;p
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯