考研程序设计30题系列(21-30题)

这是一篇关于考研程序设计的练习题目集,涵盖了矩阵周边元素平均值计算、特殊数的筛选、素数存储、字符处理等多个算法问题。文章旨在帮助考生提升编程能力,解决实际问题。
摘要由CSDN通过智能技术生成

注: 数据来源网学天地,如有侵权,告知删除。 练习程序用!

21. 求矩阵周边元素的平均值

问题
在这里插入图片描述
思想

本质上其实就是计算矩阵四周元素的元素和
需要注意的几个点是:

  1. 考虑只有一行与一列的情况
  2. 注意每个元素相加的时候计算参与计算元素的总个数
  3. 最后

答案

#include <iostream>
#include <string>

using namespace std;



// 处理函数声明
float chuLi(int data[][5], int hang, int lie) {
    int len;
    lie=5;

    len=0;
    float sum=0;
    if(hang==1) {
        // 只有一行的情况
        for(int i=0; i<lie; i++) {
            sum+=data[0][i];
            len++;
        }
    }else if(lie==1) {
        // 只有一列的情况
        for(int i=0; i<hang; i++) {
            sum+=data[i][0];
            len++;
        }
    }else {
        // 多行多列的情况
        // 加两行的元素
        for(int i=0; i<lie; i++) {
            sum= sum + data[0][i] + data[hang-1][i];
            len+=2;
        }

        // 中间的两列相加
        for(int i=1; i<hang-1; i++) {
            sum= sum + data[i][0] + data[i][lie-1];
            len+=2;
        }
    }

    cout<<sum<<"--"<<len<<endl;
    return sum/len ;


}

int main() {
    int a[5][5] = {
        {0,1,2,7,9},
        {1,9,7,4,5},
        {2,3,8,3,1},
        {4,5,6,8,2},
        {5,9,1,4,1}
    };

    // 调用处理函数
    cout<<chuLi(a, sizeof(a)/sizeof(a[0]), 5);


    return 0;

}

运行结果:
在这里插入图片描述

22. 按规则合并数

问题

在这里插入图片描述

答案

#include <iostream>
using namespace std;
int main() {
    int a,b,c;
    cout<<"请输入a,b的值:";
    cin>>a>>b;

    c = (b%10)*1000 + (a%10) *100 + (b/10)*10 +(a/10);

    cout<<c;

}

运行结果:
在这里插入图片描述

23. 用数组存储指定范围一下的素数

问题
在这里插入图片描述

答案

#include <iostream>
#include <math.h>
using namespace std;
// 处理素数函数声明
int suShu(int data[], int lim);
int main() {
    int lim,k;
    cout<<"请输入lim:";
    cin>>lim;
    int data[lim/2];
    // 记录素数
    k = suShu(data, lim);
    cout<<"个数:"<<k<<endl;
    for(int i=0; i<k; i++) {
        cout<<data[i]<<ends;
    }
}


// 计算素数
int suShu(int data[], int lim) {
    int k=0;
    for(int i=2; i<=lim; i++) {
        // 判断i是不是素数
        // 默认是
        bool flag = true;
        for(int j=2; j<sqrt(i); j++) {
            if(i%j==0) {
                flag = false;
                break;
            }
        }
        if(flag)
            data[k++] = i;
    }
    return k;

}

运行结果:

在这里插入图片描述

24. 统计分数最低的学生记录

问题
在这里插入图片描述

答案

#include <iostream>

using namespace std;

typedef struct stu {
    string sno;
    int score;
} stu;


// 处理函数声明
int chuLi(stu data[], stu b[]);


int main() {
    stu data[5] = {
        {"asd",55},
        {"dsc",59},
        {"cvf",95},
        {"fza",55},
        {"gfv",55}
    };

    stu b[5];

    // 调用处理函数
    int len = chuLi(data,b);

    // 输出查看
    for(int i=0; i<len; i++) {
        cout<<b[i].sno<<":"<<b[i].score<<endl;
    }

}


// 处理函数实现
int chuLi(stu data[], stu b[]) {
    int num=0, min_score;
    min_score = data[0].score;

    // 先找出最小的
    for(int i=1; i<5; i++) {
        if(data[i].score<min_score) {
            min_score = data[i].score;
        }
    }

    // 在判断与最小的相等的放入b数组
    for(int i=0; i<5; i++) {
        if(data[i].score==min_score) {
            b[num++] = data[i];
        }
    }

    return num;

}

运行结果:

在这里插入图片描述

25. 处理将非偶数ascll的字符放到指定数组

问题
在这里插入图片描述

答案

#include <iostream>
using namespace std;
// 处理函数声明
void chuLi(string str, char t[]);
int main() {
    string str;
    cout<<"请输入一个字符串:";
    cin>>str;
    char t[str.length()];
    // 调用处理函数
    chuLi(str, t);
    // 输出展示
    for(int i=0; t[i]; i++) {
        cout<<t[i];
    }

}


//处理函数实现
void chuLi(string str, char t[]) {
    int k=0;
    for(int i=0; i<str.length(); i++) {
        if(str[i] % 2!=0) {
            t[k++] = str[i];
        }
    }
}

运行结果:
在这里插入图片描述

26. 按规则处理数据

问题
在这里插入图片描述

答案

#include <iostream>


using namespace std;


// 处理函数声明
int fun(int m, int data[]);


int main() {
    int m, n;
    cout<<"请输入m:";
    cin>>m;
    int data[m];

    // 调用处理函数
    n = fun(m,data);

    // 输出查看
    for(int i=0; i<n; i++) {
        cout<<data[i]<<ends;
    }
}

// 处理函数实现
int fun(int m, int data[]){
    int n=0;
    for(int i=1; i<m; i++) {
        if(i%7 == 0|| i%11 == 0) {
            data[n++] = i;
        }
    }

    return n;
}

运行结果:

在这里插入图片描述

27. 公式求pai

问题
在这里插入图片描述

在这里插入图片描述

答案

#include <iostream>

using namespace std;


// 求pai函数声明
double getPi(double jd);

int main() {
    double pi, jd;

    cout<<"请输入精度:";
    cin>>jd;

    //获取pi
    pi = getPi(jd);

    cout<<"pi:"<<pi;
}


// 求pi函数实现
double getPi(double jd){
    // t用于累加
    double pi=0, t=1, tsum=0;

    int zf = 1;

    while(1.0/t>jd) {
        tsum += 1.0/t * zf;
        t+=2;
        zf*=-1;
    }
    pi = 4 * tsum;
    return pi;
}


运行结果:
在这里插入图片描述

28. 筛选规则数

问题
在这里插入图片描述

答案

#include <iostream>

using namespace std;


// 处理函数声明
int chuLi(int data[], int low, int high);

int main() {
    int low,high,len;
    cout<<"请输入low,high:";
    cin>>low>>high;

    int data[(high-low)/2];
    // 调用处理函数
    len = chuLi(data, low, high);
    // 输出查看

    for(int i=0; i<len; i++) {
        cout<<data[i]<<ends;
    }
}

// 处理函数实现
int chuLi(int data[], int low, int high) {
    int len=0;

    for(int i=low; i<=high; i++) {
        if((i%7==0 || i%11==0) && !(i%7==0 && i%11==0)) {
            data[len++] = i;
        }
    }

    return len;

}

运行结果:

在这里插入图片描述

29. 处理高于平均数的学生

问题
在这里插入图片描述

答案

#include <iostream>

using namespace std;

typedef struct stu{
    string sno;
    int score;
} stu;

// 处理函数声明
int chuli(stu data[],int n, stu data_t[]);

int main() {
    stu data[5] = {
        {"dsada",25},
        {"dfddf",56},
        {"bgbx",85},
        {"dbgssa",46},
        {"dvsd",77}
    };

    stu data_t[5];

    int sum;

    // 调用处理函数
    sum = chuli(data,sizeof(data)/sizeof(data[0]), data_t);

    // 输出查看
    for(int i=0; i<sum; i++) {
        cout<<data_t[i].sno<<":"<<data_t[i].score<<endl;
    }
}

// 处理函数实现
int chuli(stu data[],int n, stu data_t[]) {

    // 获取到平均数
    float avg=0;

    int len=0;// 统计

    for(int i;i<n; i++){
        avg+=data[i].score;
    }

    avg/=n;


    // 统计大于平均分的
    for(int i=0; i<n; i++) {
        if(data[i].score>avg){
            data_t[len++] = data[i];
        }
    }

    return len;


}

运行结果:

在这里插入图片描述

30. 将前导*移到尾部

问题
在这里插入图片描述

答案

#include <iostream>
#include <cstring>

using namespace std;

// 我们采用反转的思想
void fanzhuan(char c[], int low, int high);

int main() {
    char c[15];
    cout<<"请输入一组字符";
    cin>>c;

    int num=0;

    // 统计前面星星数量
    while(c[num++]=='*');
    num--;

    // 调用反转函数
    // 1.整体反转(传下标)
    fanzhuan(c,0,strlen(c));
    // 前部分反转
    fanzhuan(c,0,strlen(c)-num);
    // 后部分反转
    fanzhuan(c, strlen(c)-num, strlen(c));

    // 输出查看
    cout<<c;
}


// 反转函数实现
void fanzhuan(char c[], int low, int high) {
    int mid = (high-low)/2;

    for(int i=0; i<mid; i++) {
        char t = c[low+i];
        c[low+i] = c[high-i-1];
        c[high-i-1] = t;
    }
}

运行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值