第8周中级练习
本周作业应使用指针和函数实现,也可动态申请空间。
依照学术诚信条款,我保证此作业是本人独立完成的。
温馨提示:
1.本次作业属于Online Judge题目,提交后由系统即时判分。
2.学生可以在作业截止时间之前不限次数提交答案,系统将取其中的最高分作为最终成绩。
1IP地址转换1(10分)
题目内容:
编写程序,将十进制IP地址转换为二进制IP地址。
例如输入:202.117.0.20,输出:11001010011101010000000000010100
输入格式:
字符串形式的十进制点分IP地址。
输出格式:
字符串表示的32位二进制IP地址
输入样例:
202.117.0.20
输出样例:
11001010011101010000000000010100
时间限制:500ms内存限制:32000kb
C++
#include<iostream>
using namespace std;
void intput(int *a) {
for (int i = 0;i < 4;++i) {
cin >> a[i];
cin.get();// != '.') || ((i == 3 && a[i] < 1) || a[i] < 0 || a[i]>255))
// return 1;
}
// return 0;
}
void coutip32(int *a) {
for (int i = 0;i < 4;++i)
for (int j = 7;j >= 0;--j)
cout << (a[i] >> j & 1);
}
int main(){
int a[4];
intput(a);
coutip32(a);
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 3ms 360kb
2
用例3通过 3ms 360kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 360kb
2
提交答案本次得分/总分:10.00/10.00分
2IP地址转换2(10分)
题目内容:
编写程序,将32位二进制IP地址转换为十进制点分IP地址。
例如输入:11001010011101010000000000010100,输出202.117.0.20
输入格式:
字符串表示的32位二进制IP地址
输出格式:
字符串形式的十进制点分IP地址。
输入样例:
11001010011101010000000000010100
输出样例:
202.117.0.20
时间限制:500ms内存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
void coutip32(char *a) {
int n=0,k=0;
for (int i = 0;i <4;++i) {
for (int j = 7;j >=0;--j,++k) {
if(a[k]=='1') n+=pow(2,j);
}
cout<<n;
if(i<3) cout <<".";
n=0;
}
}
int main(){
char a[33]={"11001010011101010000000000010100"};
cin>>a;
coutip32(a);
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 360kb
2
用例2通过 2ms 372kb
2
用例3通过 2ms 376kb
2
用例4通过 3ms 360kb
2
用例5通过 3ms 360kb
2
提交答案本次得分/总分:10.00/10.00分
3找数据(10分)
题目内容:
编写程序,找出一个字符串中的所有数据然后加9输出(实数或整数)。
例如,China Daily | Updated: 2020-04-10 08:5.9,
输出:
2029
5
-1
17
14.9
单个正号或负号不算数据,但+0,-0都是数据。字符串总长度不超过200.
输入格式:
一个带空格的字符串。
输出格式:
若干行数据。
输入样例:
China Daily | Updated: 2020-04-10 08:5.9
输出样例:
2029
5
-1
17
14.9
时间限制:500ms内存限制:32000kb
C++
#include<iostream>
#include<cmath>
using namespace std;
int main() {
char a[110] = { "China Daily | Updated: 2020-04-10 08:5.9," };
cin.getline(a, 100);
int bl = 0, fh = 1, i = 0, j = 1;
double suz = 0;
for (;;) {
if (a[i] == '-' ) {
fh = -1;++i;
}
while (a[i] >= '0'&&a[i] <= '9') {
bl = 1;
suz = 10 * suz + a[i] - '0';
i++;
}
if (a[i] == '.') {
int t = 1;
i++;bl = 1;
while (a[i] >= '0'&&a[i] <= '9') {
suz += (a[i] - '0') / pow(10, t++);
i++;
}
}
if (bl)cout<<suz*fh+9<< endl;
fh = 1;bl = 0;suz = 0;
if (a[i] == '.' || a[i] == '-')continue;
if (a[i++] == '\0')break;
}
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 25ms 372kb
2
用例2通过 3ms 368kb
2
用例3通过 18ms 368kb
2
用例4通过 3ms 368kb
2
用例5通过 19ms 368kb
2
提交答案本次得分/总分:10.00/10.00分
4指针实现矩阵相加(10分)
题目内容:
编写函数,使用指针传递和指针运算,实现两个矩阵的和。
编写主程序,输入两个矩阵,调用函数求和,在主函数中输出计算结果。每个矩阵的元素总个数不超过100,但行数、列数不定。矩阵元素为整数。
输入格式:
先输入两个整数,表示矩阵的行数和列数,然后分别依次按行输入两个矩阵的元素。
输出格式:
两个矩阵的和,按行、列显示,用一个空格隔开,每行末尾无空格。
输入样例:
2 4
1 2 3 4
5 6 7 8
1 2 3 4
5 6 7 8
输出样例:
2 4 6 8
10 12 14 16
时间限制:500ms内存限制:32000kb
C++
#include<iostream>
using namespace std;
int main(){
int n,m;
cin>>n>>m;
int *a=new int[n*m],*b=new int[n*m],*ap=a,*bp=b;
for(;ap<a+m*n;ap++) cin>>*ap;
int i=1;
for(;bp<b+m*n;bp++,a++,i++){
cin>>*bp;
cout<<*bp+*a;
if(i%m)cout<<" ";
else cout<<endl;
}
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 3ms 356kb
2
用例2通过 3ms 360kb
2
用例3通过 3ms 364kb
2
用例4通过 3ms 360kb
2
用例5通过 3ms 364kb
2
提交答案本次得分/总分:10.00/10.00分
5指针实现矩阵相乘(10分)
题目内容:
编写函数,使用指针传递和指针运算,实现两个矩阵的乘积。
编写主程序,输入两个矩阵,调用函数计算它们的乘积,在主函数中输出计算结果。每个矩阵的元素总个数不超过100,但行数、列数不定。矩阵元素为整数。
输入格式:
先输入两个整数,表示矩阵的行数和列数,然后按行输入第一个矩阵的元素。
再输入两个整数,表示第二个矩阵的行数和列数,然后按行输入第二个矩阵的元素。
输入保证第一个矩阵的列数和第二个矩阵的行数相等。
输出格式:
两个矩阵的乘积,按行、列显示,每行末尾无空格。
输入样例:
2 3
1 1 0
2 1 1
3 2
1 2
2 1
1 0
输出样例:
3 3
5 5
时间限制:500ms内存限制:32000kb
C++
#include <iostream>
using namespace std;
int main(){
int m,n,p,q;
cin >> m >> n;
int *a=new int[m*n],*ap=a;
for(;ap<a+m*n; ++ap)
cin >> *ap;
cin >> p >> q;
int *b=new int[p*q],*bp=b;
for(;bp<b+p*q; ++bp)
cin >> *bp;
int *c=new int(m*q);
for(int i = 0; i < m; ++i) {
for(int j = 0; j < q; ++j) {
*(c+j+i*q) = 0;
for(int k = 0; k < n; ++k)
*(c+j+i*q) += *(a+i*n+k) *(*(b+j+q*k));
}
}
for(int i = 0;i<m;++i){
for(int j = 0; j < q; ++j) {
cout << *(c+j+i*q);
if(j<q-1)cout<< " ";
}
cout << endl;
}
return 0;
}
用例测试结果 运行时间 占用内存 提示 得分
用例1通过 2ms 256kb
2
用例2通过 2ms 372kb
2
用例3通过 3ms 256kb
2
用例4通过 2ms 256kb
2
用例5通过 2ms 480kb
2
提交答案本次得分/总分:10.00/10.00分