HWH

Concentrate on computer science,academic research

2018年内蒙古大学计算机复试笔试题目及解析

    今年跟去年题目形式有点不一样,去年是6道程序设计题,今年是4道程序设计,4道算法题,时间为一个半小时。

程序题:

1. 输入俩个整数,求两个数之间所有偶数的和(含这两个数)。

#include<iostream>
using namespace std;
int main()
{
    int m,n,t;
    int s=0;
    cin>>m>>n;
    if(m>n)        //判断大小
    {
        t=m;
        m=n;
        n=t;
    }
    for(int i=m;i<=n;i++)  //循环求和
    {
        if(i%2==0)
            s+=i;
    }
    cout<<s<<endl;
    return 0;
 
}

测试输入:

2   6
11  3
0   0

测试输出:

12
28
0

2、1+2+2+3+3+3+…+n+n+……+n求和

#include<iostream>
using namespace std;
int calc(int n)         //计算n个n的和
{
    int s = 0;
    for(int i = 0; i<n; i++)
        s+=n;
    return s;
 
}
int main()
{
    int n;
    int s=0;
    cin>>n;
    for(int i = 1; i<=n; i++)   //循环求和
        s+=calc(i);
    cout<<s<<endl;
    return 0;
 
}

测试输入:

3
5
10

测试输出:

14
55
385

3. 迭代法求平方根,求平方根的迭代公式为: a[n+1]=1/2(a[n]+X/a[n]) 要求前后两次求出的得差的绝对值少于0.00001。

#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    float x1,x2,a;
    cin>>a;
    x1=1;         //赋个初值
    x2=a;
    while(fabs(x1-x2)>=0.000001)   //迭代过程
    {
        x1=x2;
        x2=(x1+a/x1)/2;
    }
    cout<<x1<<endl;
    return 0;
}

测试输入:

9
100
2

测试输出:

3
10
1.41421

4. 读取文件的内容,文件内80个字符一行,统计行数、小写字母、大写字母、数字的个数。

#include <fstream>
#include <string>
#include <iostream>
using namespace std;
int main()
{
    ifstream in("/home/1.txt");
    string line;
    int lineNum=0;
    int bWord=0,sWord=0,num=0;
    if(in) // 有该文件
    {
        while (getline (in, line)) // line中不包括每行的换行符
        {
            lineNum++;
            for(int i=0;i<line.length();i++)  //判断字符属于哪一类
            {
                if(line[i]>='A'&&line[i]<='Z')
                    bWord++;
                if(line[i]>='a'&&line[i]<='z')
                    sWord++;
                if(line[i]>='0'&&line[i]<='9')
                    num++;
            }
        }
    }
    else // 没有该文件
    {
        cout <<"no such file" << endl;
    }
    cout<<"行数:"<<lineNum<<endl;
    cout<<"大写字母个数:"<<bWord<<endl;
    cout<<"小写字母个数:"<<sWord<<endl;
    cout<<"数字个数:"<<num<<endl;
    return 0;
}

文件内容:

asd123
ASD
123

测试输出:

行数:3
大写字母个数:3
小写字母个数:3
数字个数:6

算法题(只要求写出部分函数,我这里为了方便运行,把代码补全了)

5. 输入一个整数,用递归获取每一位上的数字,并且输出。比如:输入123,输出3  2  1

#include <iostream>
using namespace std;
void num(int n)
{
    if(n==0)        //递归出口
        return;
    else
    {
        cout<<n%10<<" ";   //获取个位上的数字
        num(n/10);      //每次除以10去掉一位
    }
}
int main()
{
    int n;
    cin>>n;
    num(n);
    return 0;
}

测试输入:

123
5678
11112

测试输出:

3 2 1
8 7 6 5
2 1 1 1 1

6. 选择排序,这个大家应该都了解,我就不多说了直接贴代码。

#include <iostream>
using namespace std;
void selectSort(int r[], int n){
    int i,index,j,temp;
    for(i=1; i<n; i++)//执行第i遍扫描操作
    {
        index = i;
        for(j=i+1; j<n; j++)//比较无序序列中的记录
        {
            if(r[index] > r[j])//记录序列中最小值的位置
            {
                index = j;
            }
        }
        if(index != i)//如果无序序列中第一个记录不是最小值,则进行交换
        {
            temp = r[index];
            r[index] = r[i];
            r[i] = temp;
        }
    }
}
 
int main()
{
    int r[20];
    int n;
    cin>>n;
    for(int i = 0;i < n;i++)
        cin>>r[i];
    selectSort(r, n);
    for(int j=0; j<n; j++)
    {
        cout<<r[j]<<"  ";
    }
    return 0;
}

测试输入:

11 
0 5 6 8 4 9 6 74 65 123 94

测试输出:

0  4  5  6  6  8  9  65  74  94  123

7.求(a+b)n次方展开后的各项系数。写几项会发现规律,其实就是杨辉三角


1 1 
1 2 1 
1 3 3 1 
1 4 6 4 1 
1 5 10 10 5 1 

·····

#include <iostream>
using namespace std;
int main()
{
    int a[30][30],n;
    cin>>n;
    int i,j;
    for(i=0; i<n; i++)   //第一列和每一行的最后一个数都是1
    {
        a[i][i]=1;
        a[i][0]=1;
    }
    for(i=2; i<n; i++)   //中间的值的规律
        for(j=1; j<i; j++)
            a[i][j]=a[i-1][j-1]+a[i-1][j];
    for(i=0; i<n; i++)
    {
        for(j=0; j<=i; j++)
            cout<<a[i][j]<<" ";
        cout<<endl;
    }
    return 0;
}

测试输入:

1
3
5

测试输出:

1
 
1
1 1
1 2 1
 
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1

8. 链表节点的删除。大体意思是给一个定义好的链表,每个节点对应一位老人的名字和年龄信息,删除60岁以上的。由于完整代码比较多,这里我只贴出删除节点对应函数的代码。

void DeleteList(struct Stu* h)    //根据指定年龄,删除某个节点   
{  
    struct Stu* p1=h;  
    struct Stu* p2=NULL;  
    if(p1==NULL)  
    {  
        cout<<"此链表为空"<<endl;  
        return h;  
    }  
    while(p1->next!=NULL && p1->age<60)  
    {  
        p2=p1;  
        p1=p1->next;  
      
    }  
    if(p1->age>=60)  
    {  
        if(h==p1)  
        {  
            h=p1->next;  
        }  
        else  
        {  
            p2->next=p1->next;  
            free(p1);  
        }  
    }  
    else  
    {  
        cout<<"要删除的节点不存储在!"<<endl;  
    }  
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注