问一个C语言的问题 答案为什么是you to china!

char *a="you";char b[ ]="welcome you to China!";main( ){ int i,j=0; char*p;for(i=0;b[i]!='\0';i++){ if(*a==b[i]) {p=a; for(j=I;*p!='\0';j++){ if(*p!=b[j] ) break;p++;}if (*p=='\0') break;}}printf("%s",&b[i];}
#include<studio.h>
char *a="you";
char b[ ]="welcome you to China!";
main( )
{ int i,j=0; char*p;
for(i=0;b[i]!='\0';i++)
{ if(*a==b[i])
{p=a;
for(j=I;*p!='\0';j++)
{ if(*p!=b[j] ) break;
p++;
}
if (*p=='\0') break;
}
}
printf("%s",&b[i];
}

#include<studio.h>
char *a="you";
char b[ ]="welcome you to China!";
void main( )
{
int i,j=0; char*p;
for(i=0;b[i]!='\0';i++) //遍历字符串b
{
if(*a==b[i]) //检查是不是a串,从a的第一位开始检查
{
p=a; //通过p来遍历a
for(j=i;*p!='\0';j++)
{
if(*p!=b[j] ) break;
p++;
}
if (*p=='\0') break; //完全匹配,说明找到了a串
}
}
printf("%s",&b[i]); //输出与a串相同的b中的后面的数据
}

追问

for(j=I;*p!='\0';j++)
if(*p!=b[j] ) break;
p++;
这三句是什么意思? 为什么 to china也要输出 不是遇到不一样的就退出吗?

追答

p=a;
for(j=i;*p!='\0';j++)//通过p来遍历a,将p指向的字符逐一与b串中的字符进行比较,
{
if(*p!=b[j] ) break; //如果比较到不同,则结束循环
p++; //若相同,则检查下一位
}

printf("%s",&b[i]); //找到a串在b中的位置后,i值会是其在b中的位置, &b[i]就是从这个位置开始输出结果直到串尾,所以会输出 you to china.

追问

#include《stdio,h》
void fun(int n, int *s)
{
int f;
if(n==1) *s=n+1;
else
{
fun(n-1,&f);
*s=f;
}
}
main()
{
int x=0;
fun (4,&x);
printf("%d\n",x)
}
答案为什么是2啊!!!

追答

void fun(int n, int *s) //这是个递归函数
{
int f;
if(n==1)
*s=n+1;
else //第一次传入的n为4,不等于1,走到这里
{
fun(n-1,&f); //调用fun(3,&f) ;
*s=f; //*s=fun(3,&f)带回的f值
fun(3,&f)带回的f值又会是fun(2,&f)带回的f值,
fun(2,&f)带回的f值又会是fun(1,&f)带回的f值 : 1+1=2,顺序返回所以,f(4,&x)中x得到的是2
}
}

追问

1+1=2 是怎么得到的?

追答

if(n==1)
*s=n+1; 这里

追问

可1+1=2不是fun(2,&f)的值吗 求fun (4,&x)的值 是不是应该再往上加吗

追答

程序中没有加法!
fun(n-1,&f); //调用fun(3,&f) ;
*s=f; //这里*s收到的是f,不是+f

来自:求助得到的回答
温馨提示:内容为网友见解,仅供参考
无其他回答

C语言 求每步详解求每步详解 #include<studio.h> char *a="you
char *a="you"; \/\/ 一个字符指针,但是指向的是一个常量,结果未知,牵扯到内存的问题 \/\/ 建议先设一个字符串或者字符数字 再用指针。char b[ ]="welcome you to China!"; \/\/一个动态长度的字符数组b ,main( ) \/\/主函数开始 { int i,j=0; char*p; \/\/编程风格很不好...

C语言。输入china?时,输出结果是多少?为什么?
正确答案应该是china?啊。getchar()为获得一个字符,在这里先表示为ch,putchar()就是把字母ch输出,ch不等于?时,继续获得字符并输出、判断,读到?时,输出语句不符合条件,不再执行while语句,但是,putchar()是已经执行了的,应该有?

C语言问题,请问这段代码为什么错了? char c[]; c[]={"china"};
因为C语言在编译的时候就要为变量(本题的c数组)分配连续的空间地址。而你的ch[]并没有确定数字,意思是系统并不知道你要分配的内存大小。正确的赋值方式只能是这样的。char c[]={"china"}; 这样系统就会给c数组分配连续6个字符的内存空间(最后加一个结束符\\0)或者可以这样char c[6]; 再用s...

c语言新手问题,在屏幕上输出china
在c语言里面第一字符串使用字符指针变量,我是不喜欢给别人直接从头开始编代码,考虑到代码很简单,就给你编写了。include int main(){ char *a="china";\/\/字符串常量使用 char b[6]="china";\/\/字符串变量使用 printf("%s\\n%s\\n",a,b);return 0;} ...

c语言新手问题,在屏幕上输出china
在c语言里面第一字符串使用字符指针变量,我是不喜欢给别人直接从头开始编代码,考虑到代码很简单,就给你编写了。include<stdio.h>int main(){char *a="china";\/\/字符串常量使用char b[6]="china";\/\/字符串变量使用printf("%s\\n%s\\n",a,b);return 0;} ...

c语言 strcpy函数的问题
你好,是这样的,strcpy(A,B)函数 是一个字符拷贝函数,它的机制是将B中的字符拷贝到A中,但在此之前会执行一个操作,就是把A中的字符流缓冲区全部清除,也有这个说法,把从src地址(B的地址)开始且含有'\\0'结束符的字符串复制到以dst(A的地址)开始的地址空间,这个空间遇到‘\\0’就会缓冲...

C语言指针问题
A:char *a说明*a是一个字符,而"china"是一个字符串,因此赋值错了。

c语言一个小小的问题 求解析···
赋值时不能将字符串赋给数组,a[14]="I love China!";是不行的,但是在定义时可以,char a[14]="I love China!";是可以的,第一个程序可以改成 include<stdio.h> void main(){ char *p;p="I love China!";puts(p);} 不懂再问吧。

C语言基础问题,求帮忙!
错误出在main()和printf()那一行,有以下几个错误:1、括号()必须使用英文的括号(),不能使用中文全角的括号();2、引号""必须使用英文的引号,不能使用中文引号;3、分号;必须使用英文的分号,不能使用中文的分号;编程时尤其要注意输入法的中英文切换问题。程序最后输出:hello china!

求助一个关于C语言的基础知识,指针的
你的说法有错误。看例子吧。char * a[]={"china", "usa", "russia"};C语言没有字符串类型。a是一个字符指针数组。把3个字符串放到常量区,返回它们的地址,放到数组中。数组名被编译成指向首元素的地址常量。a指向元素a[0]。而a[0]是char *型的,所以a是char **型的。相似地,命令行...

相似回答