一道C语言题目。麻烦各位给个解释。先谢谢

#include <stdio.h>
#include <string.h>
void fun(char *p ,char *q, char *c)
{
/************found************/
int k = 1;
/************found************/
while( *p != *q )
{ if( *p<*q ) c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++;
k++;
}
}
main()
{ char a[10]="aBCDeFgH", b[10]="ABcd", c[80]={'\0'};
fun(a,b,c);
printf("The string a: "); puts(a);
printf("The string b: "); puts(b);
printf("The result : "); puts(c);
}
#include <stdio.h>
#include <string.h>
void fun(char *p ,char *q, char *c)
{
/************found************/
int k = 0;
/************found************/
while( *p ||*q )
{ if( *p<*q ) c[k]=*q;
else c[k]=*p;
if(*p) p++;
if(*q) q++;
k++;
}
}
main()
{ char a[10]="aBCDeFgH", b[10]="ABcd", c[80]={'\0'};
fun(a,b,c);
printf("The string a: "); puts(a);
printf("The string b: "); puts(b);
printf("The result : "); puts(c);
}

while( *p ||*q )这一步不是太清楚,麻烦解释下。或关系。结合下面的函数

首先你需要知道c语言中0表示假非0(0以外)表示真
while(*p||*q)
表示指针p指向的当前值为真 或者(||)指针q指向的当前值为真
就进入while循环
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-07-19
||双竖线与&&具有类似的含义:
&&相当于单分支的if语句,意为:
如果&&左边为真,则判断右边是否也是为真值
||的含义则是:如果双竖线左边值为真,不管右边值如何,都立即执行判断条件后边的语句块;只有当左边值不成立(此题含义为*p值为空的情况),才顺序去判断右边值的 真假(*q是否为空),啰嗦了点,目的是为了提高程序的执行效率(只要*p存在,就不必要再判断*q了)
第2个回答  2011-07-19
|| 是 或 运算符
*p ||*q 这句 当*p 或者 *q 有一个为真或者两个都为真 则表达式*p ||*q 就为真 整个语句输出1
注意: 当*p 为真是 不对*q进行判断 表达式*p ||*q 就为真了 输出1
如你的 while语句循环到 q[4] 和p[4]的时候(要知道p[4]和a[4]是等价的,q[4]和b[4]是等价的)
q[4]的值是字符e对应的ASCII的值101(十进制),p[4]的值是\0对应的ASCII的值0,
那么q[4]为真,表达式*p ||*q 也为真了
第3个回答  2011-07-19
while( *p ||*q )就相当于while( (*p!=0) ||(*q!=0) )
第4个回答  2011-07-19
这里首先你要明白一个数组
如name[10] ,他的数组名其实是一个指针。而
指针==地址 数组名是该数组的第一个元素的地址,也可以说是指向第一个元素的指针。
放到结构体里面也一样。
这里s[0].name 是指向s[0]里,name数组第一个元素的指针,即s[0]里name[]数组第一个元素的地址。
第5个回答  2011-07-19
while( *p ||*q )
这句是说当*p或*q的值不为空,这是两个指针,也就是说指针有指向,不是个空的指针的时候。
相似回答