鸭子tv国产极品在线观看_成人69视频在线播放_91精品免费在线观看_亚洲AT永久偷窥无码精品_国产精品自产拍在线观看涩浪潮久

江蘇省高校計算機等級考試命題研究院 江蘇省高校計算機等級考試輔導
2009春江蘇計算機上機考試題型解析

上機分析典型試題

第一大類:數(shù)值類

題型1:素數(shù)問題

2009年三月考題:

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

[編程要求]

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

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

【測試數(shù)據(jù)與運行結(jié)果】

3   7   31  127  8191  131071  524287

#include <stdio.h>

#define N 7

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

{long i;

 for(i=2;i<=n/2;i++)                /*素數(shù)只能被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循環(huán)實現(xiàn)2^n*/

   f*=2;

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

     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");

}

題型二:整數(shù)拆分

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

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

【編程要求】

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

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

【測試數(shù)據(jù)與運行結(jié)果】

測試數(shù)據(jù):123  765   1  45   121   1345  131  67  696  3589

運行結(jié)果: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)    /*判斷是三位正整數(shù)*/

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

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

   {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]]);

}

 

 

第二大類:字符串類

題型:出現(xiàn)次數(shù)問題

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

【測試數(shù)據(jù)與運行結(jié)果】

  測試數(shù)據(jù):

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

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

運行結(jié)果:

  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循環(huán)實現(xiàn)將s1數(shù)組值傳遞給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數(shù)組中*/

           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]);

}

第三大類:二維數(shù)組類

題型:行列變化問題

已知x數(shù)組中存儲的n階矩陣有一個鞍點(鞍點是指該位置上的數(shù)是所在行的最大數(shù)。同時也是所在列的最小數(shù)),程序?qū)崿F(xiàn)將矩陣中鞍點所在列移動到最右側(cè)。

【測試數(shù)據(jù)與運行結(jié)果】

測試數(shù)據(jù);

    1    3    2    0

    4    6    5   -1

    7    9    8    0

    -1  l0    3    2

運行結(jié)果;

  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循環(huán)實現(xiàn)尋找一行的最大數(shù)*/

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

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

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

         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循環(huán)實現(xiàn)轉(zhuǎn)換*/

     {  t=a[i][mj];

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

          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矩陣,再對該矩陣作轉(zhuǎn)換,判斷變換后的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.編寫函數(shù)int Monge(int a[ ][5],int n),其功能是判斷a指向的a5列數(shù)組中存儲的矩陣是否是Monge矩陣,若是則函數(shù)返回1,否則返回0

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