646 455 122 111 2112 249 (1)313 328 444 356 536 437 6116 解:(1)为6×4矩阵,非零元素有6个。(2)为4×5矩阵,非零元素有5个 0200 10000 12000 00090 3000 08006 0004 00700 0060 16000 五、算法设计题(每题10分,共30分) 【严题集4.2③】编写一个实现串的置换操作 Replace(&S,T,V)的算法。 解 int Replace( Stringtype&s, Stringtype T, Stringtype V;/将串S中所有子串T替换为 V并返回置换次数 for(n=0,F=1;i<= Strlen(S) Strlen(T+1;i+)∥注意i的取值范围 if( StrCompare( Substring(s, i, Strlen(D),T)∥找到了与T匹配的子串 ∥分别把T的前面和后面部分保存为head和tail StrAssign(head, SubString(S, 1, i-1)) StrAssign(tail, SubString(s, i+Strlen(t), Strlen(S)-I-Strlen(T)+D)); Str Assign(S, Concat(head, V)) Strassign(S, Concat(S,tail);∥把head,,ail连接为新串 H= Strlen(V),∥当前指针跳到插入串以后 n++ n++ return n 分析+= Strlen(V,这一句是必需的也是容易忽略的如省掉这一句,则在某些情况下,会引起不希望的后果, 虽然在大多数情况下没有影响请思考:设S= place,T=ace,v=face,则省掉i+= Strlen(V,运行时会出现什么 结果? 2.【严题集518⑤】试设计一个算法,将数组An中的元素A0至A|n-1循环右移k位,并要求只用4 6 116 5 3 6 4 4 4 3 1 3 2 1 12 1 2 2 6 4 6 (1) 4 3 7 3 5 6 3 2 8 2 4 9 111 4 5 5 (2) 解:(1)为 6×4 矩阵,非零元素有 6 个。 (2)为 4×5 矩阵,非零元素有 5 个 五、算法设计题(每题 10 分,共 30 分) 1. 【严题集 4.12③】 编写一个实现串的置换操作 Replace(&S, T, V)的算法。 解: int Replace(Stringtype &S,Stringtype T,Stringtype V);//将串 S 中所有子串 T 替换为 V,并返回置换次数 { for(n=0,i=1;i<=Strlen(S)-Strlen(T)+1;i++) //注意 i 的取值范围 if(!StrCompare(SubString(S,i,Strlen(T)),T)) //找到了与 T 匹配的子串 { //分别把 T 的前面和后面部分保存为 head 和 tail StrAssign(head,SubString(S,1,i-1)); StrAssign(tail,SubString(S,i+Strlen(T),Strlen(S)-i-Strlen(T)+1)); StrAssign(S,Concat(head,V)); StrAssign(S,Concat(S,tail)); //把 head,V,tail 连接为新串 i+=Strlen(V); //当前指针跳到插入串以后 n++; n++; }//if return n; }//Replace 分析:i+=Strlen(V);这一句是必需的,也是容易忽略的.如省掉这一句,则在某些情况下, 会引起不希望的后果, 虽然在大多数情况下没有影响.请思考:设 S='place', T='ace', V='face',则省掉 i+=Strlen(V);运行时会出现什么 结果? 2. 【严题集 5.18⑤】试设计一个算法,将数组 An 中的元素 A[0]至 A[n-1]循环右移 k 位,并要求只用一 0 2 0 0 12 0 0 0 3 0 0 0 0 0 0 4 0 0 6 0 16 0 0 0 1 0 0 0 0 0 0 0 9 0 0 8 0 0 6 0 0 7 0 0