C++练习场

1.实现方阵的转置

因为还未复习到数组作为参数传递,所以这里代码较为繁琐。

#include <iostream>
#include <iomanip>
using namespace std;

void swap(int &a, int &b){
    int temp = a;
    a = b;
    b =temp;
}

int main(){
    int s = 4;
    int mat[s][s];
    cout<<"输入"<<s*s<<"个整数:";
    for(int i=0;i<s;i++){
        for(int j=0;j<s;j++){
            cin>>mat[i][j];
        }
    }
    cout<<"初始矩阵:"<<endl;
    for(int i=0;i<s;i++){
        for(int j=0;j<s;j++){
            cout<<mat[i][j]<<' ';
        }
        cout<<endl;
    }

    cout<<"矩阵转置:"<<endl;
    for(int i=0;i<s;i++){
        for(int j=i;j<s;j++){
            swap(mat[i][j],mat[j][i]);
        }
    }
    for(int i=0;i<s;i++){
        for(int j=0;j<s;j++){
            cout<<mat[i][j]<<' ';
        }
        cout<<endl;
    }
    return 0;
}

结果:

输入16个整数:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
初始矩阵:
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
矩阵转置:
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

2.将自己写的.h文件导入main函数中

这里只给出我用的方法,有错误希望斧正。

用的IDE是code::block

1.新建了一个C++的project是这样的界面:

2.再同一目录下,自己创建空的.h和.cpp文件

这是我的目录下

3.project --> Add files,将两个文件添加进project

可以开始写.h和.cpp文件里的内容了

具体可以参照另一个博主的博客,写的很详细https://blog.csdn.net/u011555996/article/details/51169202

PS:一般#include "xxx.h"是自己写的头文件,而<xxx.h>是编译器的;上例中,记得在.cpp中也要include "employee.h"

代码如下:

employee.h文件代码

#ifndef EMPLOYEE_H_
#define EMPLOYEE_H_

class Employee{
    char* name;
    char* city;
    char* code;
public:
    Employee(char* n="", char* ct="", char* cd="");
    void display();
    void chageName(char* nm);
};

#endif // EMPLOYEE_H_

employee.cpp文件代码

#include<iostream>
#include"employee.h"
using namespace std;

Employee::Employee(char* n, char* ct, char* cd):
        name(n), city(ct), code(cd){}

void Employee::display(){
    cout<<"name:"<<name<<endl;
    cout<<"city:"<<city<<endl;
    cout<<"code:"<<code<<endl;
}
void Employee::chageName(char* nm){
    name = nm;
}

main.cpp文件代码

#include<iostream>
#include"employee.h"
using namespace std;

Employee::Employee(char* n, char* ct, char* cd):
        name(n), city(ct), code(cd){}

void Employee::display(){
    cout<<"name:"<<name<<endl;
    cout<<"city:"<<city<<endl;
    cout<<"code:"<<code<<endl;
}
void Employee::chageName(char* nm){
    name = nm;
}

结果:

name:Lisa
city:shanghai
code:001
name:Geekin
city:shanghai
code:001

3.找出美素数

给定两个范围在0~1000000的整数left和rigeht,找出left-right中的所有完美素数。

美素数定义自行百度。

#include <iostream>
#include <fstream>
using namespace std;
//a表示素数的表示,为素数标0,否则标1,从下表1开始
//c表示从1到下标有多少个美素数
int c[1111111]={1,1},a[1111111]={0};
int main(){
    int i,j,l,s;
    int left, right;
    cout<<"left right:";
    cin>>left>>right;
    if(left>right){
        cout<<"input error,left should less than right";
        exit(1);
    }
	//判断最大的数值为1000000,百万以下的数打表都是可以的,即去掉不是素数
    for(i=2;i<=1000010;++i){
        if(c[i]==1){
            //当是合数时,说明它是前面某个素数的倍数,而后面它的倍数肯定也是前面那个素数的倍数,已被标记,故不需要进入二层循环
            continue;
        }
        //先从i的2倍开始,再遍历i的3、4...倍,并且令c数组下标为1,标识不是素数。是某个数倍数一定不是素数。
        for(j=2*i;j<=1000010;j+=i){
            c[j]=1;
        }
    }
    for(i=2;i<=1000010;++i){
        s=0;
        if(c[i]==0){
            l=i;
            while(l!=0){
                s+=l%10;
                l/=10;
            }
            if(c[s]==0){
                a[i]=1;
            }
        }
        a[i]=a[i-1]+a[i];
    }
    cout << a[right]-a[left-1];
    return 0;
}

猜你喜欢

转载自blog.csdn.net/Wzz_Liu/article/details/82315853