<samp id="uu9tx"></samp>
        <samp id="uu9tx"><tr id="uu9tx"><nav id="uu9tx"></nav></tr></samp>
        <delect id="uu9tx"><legend id="uu9tx"><meter id="uu9tx"></meter></legend></delect>
                <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp><nav id="uu9tx"></nav>
                <samp id="uu9tx"></samp>
                  <samp id="uu9tx"><tr id="uu9tx"><meter id="uu9tx"></meter></tr></samp>
                  江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
                  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列數組中的矩陣作如下轉換,第一行與最后一行交換,第二行與倒數第二行交換,….直到每一行都交換過一次為止

                   

                  亚洲欧美日韩国产一区二区三区_全亚洲免费一级黄片_国产一区二区三区不卡视频手机版_国产污三级网站在线观看