1.设有数组\(A[i,j]\),数组的每个元素长度为三个字节,i的值为18,j的值为110,数组从内存首地址BA开始顺序存放,当用以列为主存放时,元素\(A[5,8]\)的存储的首地址是多少?
解答:依据公式:\(LOC(i,j)=LOC(0,0)+(n∗i+j)∗L\)(行序为主序存储结构的公式,列序同理)
且数组\(A[i,j]\)=\(A[1..8,1...10]\) 则以列序为存储结构的计算\(LOC(5,8)=BA+[(8*(8-1)+(5-1)]∗3\) ==BA+180

2. 设有一个10阶的对称矩阵A,采用压缩存储方式,以行序为主存储,\(a_{11}\)为第一元素其存储地址为1,每一个元素占一个地址空间 则\(a_{85}\)的地址是多少

解答

依据对称矩阵的公式,当\(i>=j\)\(K=i∗(i−1)/2+j−1\),则以行序存储时思路即是前n项行和加上列
\((8-1)*(8-1+1)/2+5==33\)

算法设计题
(1) 设任意N个整数存放于数组\(A[1...n]\)中,试编写算法,将所有正数排在所有负数前面(要求:算法时间复杂度为O(n))

    `void Arrange(int A[],int n)
        //n个整数存在于数组A中,本算法将数组中所有正数排在所有负数前面
    {   int i=0,j=n-1,x;   //数组下标从0开始
        while(i<j)                 
       { while(i<j&&A[j]>0)  i++;
         while(i<j&&A[j]<0)  j--;
        if(i<j)
           {  x=A[i]; A[i++]=A[j];  A[j--]=x;  }  //交换A[i]与A[j]
          }

         }` ///结束

(2)写一个算法统计在输入字符串中各个不同字符出现的频度并将结果存入文件(字符串中的合法字符为AZ这26个字母和09这10个数字)

      ```
      void Count()  //统计输入字符串中数字字符和字母字符的个数
       { int i,num[36];
         char ch;
         for (i=0;i<36;i++) num[i]=0; //初始化
         while((ch=getchar())!='#')   //'#'表示输入字符串结束
           if('0'<=ch<='9')
             {i=ch-48;num[i]++;} //数字字符
           else if('A'<=ch<='Z')
            {i=ch-65+10;num[i]++;}  //字母字符
           for(i=0;i<10;i++)  //输出数字字符的个数
             cout<<"数字"<<i<<"的个数="<<num[i]<<endl;
           for(i=10;i<36;i++)   //求出字母字符的个数
             count<<"字母字符"<<i+55<<"的个数="<<num[i]<<endl;

       }
        

        ```