<source id="v77gz"></source>
    <u id="v77gz"><p id="v77gz"></p></u>

      <samp id="v77gz"></samp>

      <var id="v77gz"><td id="v77gz"><ins id="v77gz"></ins></td></var>

      <video id="v77gz"></video>
      <source id="v77gz"></source>
    1. 江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
      2009春江蘇計算機上機考試題型解析

      上機分析典型試題

      第一大類:數值類

      題型1:素數問題

      2009年三月考題:

      程序功能:找出7個默森尼數。法國數學家默森尼曾提出下列公式:Mp=2^p-1。當p是素數并且Mp也是素數時,Mp為默森尼數,例如,p=5, Mp=2^5-1=31,531都是素數,因此31是默森尼數;Mp=2^11-1=2047,11是素數,2047不是素數,因此2047不是默森尼數.

      [編程要求]

        1.編寫函數void Mersenne(long a[ ],int m),其功能是求出前m個默森尼數并以此將它們保存到a指向的數組中,

        2.編寫main函數,調用Mersenne函數并保存前7個默森尼數,將運行結果輸出到屏幕及結果文件myf2.out中,最后將考生的考號也保存到結果文件myf2.out

      【測試數據與運行結果】

      3   7   31  127  8191  131071  524287

      #include <stdio.h>

      #define N 7

      int prime(long n)                  /*本函數的功能是判定素數*/

      {long i;

       for(i=2;i<=n/2;i++)                /*素數只能被1與自己整除,所以從2開始逐次比較*/

         if(n%i==0)  return 0;

       return 1;

      }

      void Mersenne(long a[ ],int m)

      {long f,n,k;                

      int i=0;

      a[i++]=3;

      for(n=3;i<m;n+=2)

      {f=1;

       for(k=1;k<=n;k++)           /*這個for循環實現2^n*/

         f*=2;

       if(prime(n)&&prime(f-1))     /*兩個都是素數則成立*/

           a[i++]=f-1;

      }

      }

       

      void main()

      {long a[7];

       int i;FILE *fp;

       fp=fopen("myf2.out","w");    /*建立文件myf2.out*/

       if(fp==NULL)  exit(0);

       Mersenne(a,N);

       for(i=0;i<N;i++)

       {printf("%8ld",a[i]);fprintf(fp,"%8ld",a[i]);

      }

      fprintf(fp,"\mMy exam number is:0112400123");

      }

      題型二:整數拆分

      用一組整數驗證命題,任意一個百位數字與個位數字不同的三位正整數n1在經過以下操作后一定會變換到1089:n1的百位數與個位數字交換得到n2,n1n2差的絕對值得到n3,將n3的百位數字與個位數字交換得到n4;n3n4的和得到n5,n5一定是1089,n1、n3是一位數或兩位數,則在高位補0使其成為三位數

      例如:n1:123,n2:321,n3:198(321,-123),n4:891,n5:1089(198+891)

      【編程要求】

      1.編寫函數int fun(int a[ ],int b[ ], int n),其功能是用n指向數組的前n個整數驗證上述命題,將所有符合命題的整數所在數組元素的下標依次保存到b指向的數組中,函數返回b數組中數據的個數

      2.編寫main函數,聲明a數組并用測試數據初始化,a數組作為實參調用fun函數,a數組中所有符合命題的整數輸出到屏幕及結果文件myf2.out,最后將考生本人的準考證號字符串也保存到結果文件myf2.out

      【測試數據與運行結果】

      測試數據:123  765   1  45   121   1345  131  67  696  3589

      運行結果:123  765   1  45   67

      #include <stdio.h>

      #define N 100

      int fun(int a[ ],int b[ ], int n)

      {int i,x,y,z,s,t,m,k=0;

       for(i=0;i<n;i++)

        if(a[i]/1000<1)    /*判斷是三位正整數*/

        {x=a[i]/100;y=a[i]/10%10;z=a[i]%10;   /*各位數分離*/  

         if(x!=z)        /*百位數字與個位數字不同*/

         {s=z*100+y*10+x;

           t=s>a[i]?(s-a[i]): (a[i]-s);     /*兩者的差*/

           x=t/100;y=t/10%10;z=t%10;

           m=z*100+y*10+x;

           if(t+m==1089)

            b[k++]=i;

         }

        }

        return k;

      }

       

      void main()

      {int a[N]={123,765,1,45,121,1345,131,67,696,3589},b[N],n,i;

       n=fun(a,b,10);

       for(i=0;i<n;i++)

          printf("%5d",a[b[i]]);

      }

       

       

      第二大類:字符串類

      題型:出現次數問題

      函數merge的功能是:合并兩個字符串集合為一個新集合,每個字符串在新集合中僅出現一次,函數返回新集合中字符串的個數

      【測試數據與運行結果】

        測試數據:

      s1集合:{“while”,”for”,”switch”,”if”,”break”,”continue”}

      s2集合:{“for”,”case”,”do”,”else”,”char”,”switch”}

      運行結果:

        while  for  switch  if  break   continue  case  do  else  char

      #include <stdio.h>

      #include <string.h>

      int merge(char s1[ ][10],char s2[ ][10],char s3[ ][10],int m,int n)

      {int i,j,k=0;

       for(i=0;i<m;i++)           /*這個for循環實現將s1數組值傳遞給s3*/

                strcpy(s3[k++],s1[i]);

       for(i=0;i<n;i++)           /*通過遍歷將s1s2進行比較兩者是否相同*/

       {for(j=0;j<m;j++)

          if(strcmp(s2[i],s1[j])==0)   

                         break;

        if(j==m)                 /*如果不相同將s2[i]元素拷貝至s3數組中*/

                 strcpy(s3[k++],s2[i]);

      }

       return k;

      }

       

      void main()

      {int i,j;

      char s1[6][10]={"while","for","switch","if","break","continue"},

      s2[6][10]={"for","case","do","else","char","switch"},s3[20][10];

      j=merge(s1,s2,s3,6,6);

      for(i=0;i<j;i++)

         printf("%s ",s3[i]);

      }

      第三大類:二維數組類

      題型:行列變化問題

      已知x數組中存儲的n階矩陣有一個鞍點(鞍點是指該位置上的數是所在行的最大數。同時也是所在列的最小數),程序實現將矩陣中鞍點所在列移動到最右側。

      【測試數據與運行結果】

      測試數據;

          1    3    2    0

          4    6    5   -1

          7    9    8    0

          -1  l0    3    2

      運行結果;

        An dian;a[0][1]

        1    2    0    3

        4    5    -1   6

        7    8    0    9

        -1   3    2   10

        #include<stdio.h>

        #define   N    4               /* 定義常量*/

        void exchange(int a[][N])

        {int i,j,k,f,t,m,mj;

          for(i=0;i<N;i++)

          {m=a[i][0];  mj=0;f=1;

           for(j=0;j<N;j++)             /*這個for循環實現尋找一行的最大數*/

             if(a[i][j]>m)

              {m=a[i][j];  mj=j;}

             for(k=0;k<N&&f;k++)      /*這個for循環實現查找列中是否是最大數*/

               if(a[k][mj]<m)

                  f=0;

             if(k>=N)break;           /*尋找到鞍點*/

          }

          if(f)

          {printf("An dian;a[%d][%d]\n",i,mj);

           for(i=0;i<N;i++)                /*這個for循環實現轉換*/

           {  t=a[i][mj];

              for(j=mj;j<N-1;j++)          /*交換元素中的數值,實現數組元素向前移動*/

                a[i][j]=a[i][j+1];

              a[i][N-1]=t;

           }

          }

         }

      void main()

      {int x[N][N]={{1,3,2,0},{4,6,5,-1},{7,9,8,0},{-1,10,3,2}},i,j;

        for(i=0;i<N;i++)

        {for(j=0;j<N;j++)

          printf("%3d",x[i][j]);

         printf("\n");

        }

        printf("\n");

        exchange(x);

        for(i=0;i<N;i++)

        {for(j=0;j<N;j++)

          printf("%3d",x[i][j]);

         printf("\n");

         }

      }

       

      題型2:矩陣運算

      先判斷一個M×N矩陣是否是一個Monge矩陣,再對該矩陣作轉換,判斷變換后的M×N矩陣是否仍是Monge矩陣

        如果一個M×N矩陣為Monge矩陣,當且僅當i=1,2,…,m-1j=1,2,…,n-1

      A[i,j]+A[i+1,j+1]<=A[i,j+1]+A[i+1,j]成立

      【編程要求】

      1.編寫函數int Monge(int a[ ][5],int n),其功能是判斷a指向的a5列數組中存儲的矩陣是否是Monge矩陣,若是則函數返回1,否則返回0

      2.編寫函數void change(int a[ ][5],int n),其功能是對a指向的n5列數組中的矩陣作如下轉換,第一行與最后一行交換,第二行與倒數第二行交換,….直到每一行都交換過一次為止

       

      中文在线字幕第一页_中文字幕高跟丝袜作品番号_亚洲中文无无码第_日本亚洲欧美国产日韩a??y_在线观看亚洲av无码专区