循环能做的事即重复操作,但要注意循环结束的条件是否符合你所期望的

【问题】:

下列给定程序中函数fun的功能是:逐个比较p、q所指两个字符串对应位置上的字符,并把ASCII值大或相等的字符依次存放到c所指的数组中,形成一个新的字符串。
例如,若主函数中a字符串为"aBCDeFgH",b字符串为"Abcd",则c中的字符串应为"aBcdeFgH"。
请改正程序中的错误,使它能得出正确的结果。
注意:部分源程序在文件MODI1.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);
}

-------------------------------------------------

【参考答案】
(1) int k=0;
(2)while (*p||*q)

【解析】:

我们首先运行这个程序,发现

【程序修改题】循环_数组

似乎并没有提示有错误的地方,但是细细一看发现,他没有输出我们想要的结果。细读程序,我们发现k是代表的是指针c的下标值,指针(数组)下标都是从0开始的,所以要改成k=0;有由题知,p、q长度不相等,故不可用 *p != *q(题中a比b长,当a有字符时,b可能为空,就不满足题中要求), while循环语句的循环条件是判断两个字符串是否到达结尾,故只要满足p、q不为空,在判断p、q的ASCII码大小即可


【程序修改题】循环_字符串_02


本题考查:变量初始化,需根据题意确定变量含义,然后对其进行初始化操作;while循环语句。