宁夏大学考研计算机专业课编程题

2018年

26题
#include <stdio.h>
//本题就是找规律,后一个分数的分子是前一个分数的分子分母之和,后一个分数的分母是前一个分数的分子
int main()
{
    float sum=0.0,term=0.0,den=1,n=2,t;
    int i;
    for(i=0;i<20;i++)
    {
        term = n/den; //term代表单个分数
        sum += term;
        t = n; //t用来记录前一个分数分子的值,最后赋给下一个分数的分子
        n = den+n; //后一个分数的分子为前一个分数分子与分母之和
        den = t; //更新下一个分母数
    }
    printf("%f ",sum);
    return 0;
}
27题
//选择排序的思想
#include <stdio.h>
int main()
{
    int a[10]={22,15,26,89,77,12,33,0,55,6},i,j,pos1,pos2,min,max,t;
    min = 0;//假定最小元素下标为0
    for(i=1;i<10;i++)
    {
        if(a[i]<a[min])
        {
            min = i; //在后面元素中找到最小元素下标,更换下标
        }
    }
    if(min!=0) //如果最小元素的下标位置不是0,则交换位置,即把最小元素a[0]交换位置
    {
        t = a[min];
        a[min] = a[0];
        a[0] = t;
    }
    max = 9; //方法同上
    for(j=0;j<9;j++)
    {
        if(a[max]<a[j])
            max = j;
    }
    if(max!=9)
    {
        t = a[9];
        a[9] = a[max];
        a[max] = t;
    }
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;

}

2017年

17题
#include <stdio.h>

int main()
{
    int a[3][3]={1,2,3,1,1,1,2,2,2},i,j,sum=0;
    for(i=0;i<3;i++)
    {
        for(j=0;j<3;j++)
        {
            if(i==j)
                sum += a[i][i];
        }
    }
    printf("%d ",sum);
    return 0;
}
18题
//统计a,b两个数组中对应位置元素相等的个数和不相等的个数
#include<stdio.h>
int main()
{
    int a[30]={1,3,5,9},b[30]={2,3,8,6},i=0,j=0,s1=0,s2=0;
    while(i<30&&j<30)
    {
        if(a[i]==b[j])
            s1++;
        else
            s2++;
        i++;
        j++;
    }
    printf("s1= %d ,s2= %d",s1,s2);
    return 0;
}
19题
//将两个递增的有序表合并成一个表存入c中
//算法思想:首先,按顺序不断取下两个顺序表表头较小的结点存入新的顺序表中,然后哪个表有剩余,将剩下的部分嫁到新的顺序表后面
#include <stdio.h>
#define MaxSize 50
typedef struct
{
    Elemtype data[MaxSize];
    int length;
}SqList;
bool Merge(SqList &La,SqList &Lb,SqList &Lc)
{
    if(La.length+Lb.length>c.MaxSize)
        return false;
    int i=0,j=0,k=0;
    while(i<La.length&&j<Lb.length) //循环,两两比较,小者存入Lc表中
    {
        if(La.data[i]<Lb.data[j])
            Lc.data[k++] = La.data[i++];
        else
            Lc.data[k++] = Lb.data[j++];
    }
    //下面的while语句只会执行一个
    while(i<La.length)
        Lc.data[k++] = La.data[i++];
    while(j<Lb.length)
        Lc.data[k++] = Lb.data[j++];
    Lc.length = k+1;
    return true;
}

 2016年

26题
//计算π的近似值
#include <stdio.h>
#include <math.h>

int main()
{

   float term = 1.0,pi =1.0,den = 2.0;
   while(fabs(term)>=1e-3)
   {
       term =1.0/(den*den);
       pi += term;
       den++;
   }
   pi = sqrt(6*pi);
   printf("%4.3f
",pi);
   return 0;
}
27题
//数组大小为10,编程实现:在主函数从键盘输入数组值,在子函数中求出数组最大元素及该元素的下标值
#include <stdio.h>
#include <math.h>

void Max(int A[],int n)
{
    int i,max,pos=0;
    max = A[0];
    for(i=1;i<n;i++)
    {
        if(max<A[i])
        {
            max = A[i];
            pos = i;
        }
    }
    printf("%d %d",max,pos);
}
int main()
{
    int a[10],i;
    for(i=0;i<10;i++)
        scanf("%d",&a[i]);
    Max(a,10);
   return 0;
}
28题
/*设有两个顺序表A和B,编写一个算法将属于A,但不属于B的数据元素放到另一顺序表c中
算法思想:用A中的每一个元素去给B中的元素比较,如果没有则放入C中
#include <stdio.h>
#define MaxSize 100  //假设一个顺序表最大存储100个数据
typedef struct
{
    int data[MaxSize]; //用于存储数据
    int length;   //用于表示顺序表中实际存储数据的个数
}SeqList;

void M(SeqList &A,SeqList &B,SeqList &C)
{
    int i,j,k=0;
    for(i=0;i<A.length;i++)
    {
        for(j=0;j<B.length;j+)
        {
            if(A.data[i]==B.data[j]) //如果相等则跳过
                break; //如果在A中的数B中也有,则A中的数没必要继续比较下去,直接跳出当前循环,用A中的下一个元素进行比较
        }
        //上一个循环能够结束,有两个原因,一个原因是A的某个数和B中某个数相等,执行了break语句
        //另外一个原因是,用A的某个数与所有的B的数据都比较过,没发现相等的数据,那么此时j==B.lenth
        if(j==B.length)
            C.data[k++]=A.data[i];
    }
    C.length = k+1;
}*/
#include <stdio.h>
int main()
{
    int i,j,k=0;
    int a[5]={2,6,3,9,11},b[5]={8,5,3,4,2},c[10];
    for(i=0;i<5;i++)
    {
        for(j=0;j<5;j++)
        {
            if(a[i]==b[j])
            break;
        }
        if(j==5)
        {
            c[k++]=a[i];
        }
    }
    for(i=0;i<k;i++)
        printf("%d ",c[i]);
    return 0;
}

2015年

36题
//已有一个已排好的9个元素的数组,今输入一个数要求按原来排序的规律将它插入数组中。
/*算法思想: 如果插入的数n比a数组的最后一个数大,则将插入的数放在a数组的末尾
如果插入的数n不比最后一个数大,则将它依次和a[0]-a[n-1]比较,直到出现a[i]>n为止,这时表示a[0]-a[i-1]的值都比n的大。
n则插入到a[i]的位置上
*/
#include <stdio.h>
int main()
{
    int a[100],i,j,n;
    for(i=0;i<9;i++)
        scanf("%d",&a[i]);
    scanf("%d",&n);
    if(n>a[8]) //如果输入的n比最后一个元素大,则放在最后面
        a[9] = n;
    else  //输入的n小于最后一个元素
    {
        for(i=0;i<9;i++) //从前往后找n的插入位置
        {
            if(a[i]>n) //当出现第一个大于n的元素,则该元素所在的位置就是n要插入的位置
            {
                for(j=9;j>i;j--) //元素从后开始往后移一个位置
                    a[j]=a[j-1];
               break; //一定要加break.当移好位置后,直接让n放在a[i]的位置上,所以必须要加break跳出for循环。如果不加break会出错
            }

        }
        a[i] = n;// n插入到适当的位置
    }
    for(i=0;i<10;i++)
        printf("%d ",a[i]);
    return 0;
}
37题
//采用顺序存储结构存储。
//思想:用i变量所以的结点,当i大于等于MaxSize时,返回0。当t[i]是空结点的时候返回0;
//当t[i]为非空结点时,若它为叶子节点,num增1.否则递归调用num1求出左子树叶子节点个数,
//再调用num2求出右子树的叶子节点个数,最后返回num
#define InitSize 50
typedef struct BiTNode{
    ElemType *data;
    int MaxSize,length;
}*SqBTree;

int LeafNums(BiTree bt,int i)
{
  int num1,num2,num=0;
  if(i<MaxSize)
  {
      if(t[i]!='#') //‘#’表示结束
      {
          if(t[2*i]=='#'&&t[2*i+1]=='#')
            num++;
          else
          {
              num1 = LeafNums(t,2*i);
              num2 = LeafNums(t,2*i+1);
              num += num1+num2;
          }
          return num;
      }
      else
        return 0;
  }
  else return 0;
}
原文地址:https://www.cnblogs.com/spore/p/11760676.html