13年电大数据结构1到9章过程性测试习题答案

习题解答

1.请将算法4-1改为用while循环来实现。 答:改写的算法4-1可以是如下所示。

Concat_St(St1, St2) {

char St3[maxsize]; St3_len=0;

if (St1_len+St2_len>maxsize+1) {

printf(“两串长度之和超长!”); return(NULL); } else { i=1;

while (i<=St1_len) {

St3[i]=St1[i]; i++;

} j=1;

while (j<= St2_len) {

St3[j+St1_len]=St2[j]; j++;

}

St3_Len=St1_len+St2_len; St3[St3_len+1]= “\\0”; return(St3); } }

/* 新串放不下两个串 */

/* 创建一个新的顺序串为空 */

2.算法4-2也可以这样来描述,直接核对相应位置上的字符是否相同,然后再分别情况做出判断:一是有不相同的字符出现,一是有一个字符串比另一个字符串长,最后则是两个串完全相等。按照这样的设计,改写算法4-2。 答:按照这样的设计,算法4-2的描述如下。

Equal_St(St1, St2) { i=1;

while (St1[i] != “\\0”) {

if (St1[i] == St2[i]) /* 相等,继续比较 */ i++; else black; }

/* 不等,强制退出 */

/* 两串进行比较 */

- 17 -

习题解答

if (St1[i] != St2[i]) return (0); else {

if (St1[i] != “\\0” || St2[i] != “\\0”) /* 比较是由于长度不同而结束 */ }

return (0); else return (1);

/* 比较是由于相应位置上的字符不同而结束 */

}

3.算法:

Trans_St(St,ch1,ch2) { i=1;

While(St[i]!=\ {

if(St[i]==ch1) St[i]==ch2; i++; } }

是通过while循环来实现将顺序串St中所有的字符ch1改为字符ch2的。请改写成用for循环来实现相同的功能。 答:用for 循环改写的算法如下。

Trans_St(St, ch1, ch2) {

for (i=1; i<=St_len; i++) if (St[i] == ch1) St[i] = ch2; }

4.编写一个算法,将顺序串St中所有的大写字母全部换成小写字母。(提示:大写英文字母A~Z对应的ASCII码为65~90,小写英文字母a~z对应的ASCII码为97~122,在大写字母的ASCII码上加32,就是对应小写字母的ASCII码) 答:算法编写如下。

Catosm_St(St) {

for (i=1; i<=St_len; i++) if ((A<=St[i])&&(St[i]<=Z)) St[i]=St[i]+32

>>展开全文<<
12@gma联系客服:779662525#qq.com(#替换为@)