1IP地址转换1(10分)
题目内容:
编写程序,将十进制IP地址转换为二进制IP地址。
例如输入:202.117.0.20,输出:11001010011101010000000000010100
输入格式:
字符串形式的十进制点分IP地址。
输出格式:
字符串表示的32位二进制IP地址
输入样例:
202.117.0.20
输出样例:
//IP地址转换十进制转换为二进制
#include<iostream>
#define N 2
using namespace std;
void getnum(char s[], int a[])//s字符串中的数字存入数组a
{
char* p = s;
int* q = a;
while (*p)//遍历字符串的字符
{
if (*p == '.')
{
p++;
q++;
continue;//遇到'.'则储存下一个数,且将'.'跳过
}
*q = (*p - '0') + *q * 10;
p++;
}
}
void output(int num)//十进制数字转换为二进制输出
{
int a[8] = {0};//都要输出8位,不够也要输出0
int i = 0;
while (num)
{
a[i]=(num % N);
num /= N;
i++;
}
for (int j = 7; j >= 0; j--)//输出八位
cout << a[j];
}
int main()
{
char s[30];
cin >> s;
int a[5] = { 0 };//储存十进制数
getnum(s, a);
for (int i = 0; i < 4; i++)
output(a[i]);
return 0;
}
2IP地址转换2(10分)
题目内容:
编写程序,将32位二进制IP地址转换为十进制点分IP地址。
例如输入:11001010011101010000000000010100,输出202.117.0.20
输入格式:
字符串表示的32位二进制IP地址
输出格式:
字符串形式的十进制点分IP地址。
输入样例:
11001010011101010000000000010100
输出样例:
202.117.0.20
//将32位二进制IP地址转换为十进制点分IP地址
#include<iostream>
using namespace std;
void getnum(char s[], int *p);//s中的八位二进制数转换为十进制存储到*p指向的内存空间中
int main()
{
char s[50];
cin >> s;
int a[4];
for (int i = 0; i < 4; i++)
getnum(s+8*i, a+i);
cout << a[0];
for (int i = 1; i < 4; i++)
cout << "." << a[i];
return 0;
}
void getnum(char s[], int* p)
{
int sum=0;
char* q = s;
for (int i = 0; i < 8; i++)
{
sum *= 2;
sum += (*q - '0');
++q;
}
*p = sum;
}
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
//找出一个字符串中的所有数据然后加9输出
#include<iostream>
using namespace std;
void findnum(char* s);
int main()
{
char s[201];
cin.getline(s, 200);
findnum(s);
return 0;
}
void findnum(char* s)
{
char* p = s;
while (*p)
{
if (*p >= '0' && *p <= '9')
{
double temp = 0;
char* q = p;
while (*q >= '0' && *q <= '9')
{
temp = temp * 10 + (*q - '0');
q++;//q指向连续数字的最后一位的下一位
}
if (*q == '.')//出现了小数点
{
char* r = q + 1;//r指向小数点后第一位
double m = 10;//换为小数要除多少个10
while (*r >= '0' && *r <= '9')
{
temp += (double)(*r-'0')/ m;
m *= 10;
r++;
}
q = r-1;//q指针就指向小数点后的最后一位连续数字
}
if (*(p - 1) == '-')
temp = -temp;
cout << (9 + temp) << endl;//加9输出
p = q;
}
p++;
}
}
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
//指针实现矩阵相加
#include<iostream>
using namespace std;
int M, N;
void plus_output(int a[][100],int b[][100]);
int main()
{
cin >> M >> N;
int a[100][100], b[100][100];
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
cin >> a[i][j];
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
cin >> b[i][j];
plus_output(a, b);
return 0;
}
void plus_output(int a[][100], int b[][100])
{
int c[100][100];
for (int i = 0; i < M; i++)
for (int j = 0; j < N; j++)
c[i][j] = a[i][j] + b[i][j];
for (int i = 0; i < M; i++)
{
cout << c[i][0];
for (int j = 1; j < N; j++)
cout << " " << c[i][j];
cout << endl;
}
}
5指针实现矩阵相乘(10分)
题目内容:
编写函数,使用指针传递和指针运算,实现两个矩阵的乘积。
编写主程序,输入两个矩阵,调用函数计算它们的乘积,在主函数中输出计算结果。每个矩阵的元素总个数不超过100,但行数、列数不定。矩阵元素为整数。
输入格式:
先输入两个整数,表示矩阵的行数和列数,然后按行输入第一个矩阵的元素。
再输入两个整数,表示第二个矩阵的行数和列数,然后按行输入第二个矩阵的元素。
输入保证第一个矩阵的列数和第二个矩阵的行数相等。
输出格式:
两个矩阵的乘积,按行、列显示,每行末尾无空格。
输入样例:
2 3
1 1 0
2 1 1
3 2
1 2
2 1
1 0
输出样例:
3 3
5 5
//使用指针传递和指针运算,实现两个矩阵的乘积
#include<iostream>
using namespace std;
void product(int**, int**, int**, int, int, int, int);
int main()
{
int** a;//二阶指针,即指向指针的指针
int m, n;
cin >> m >> n;//第一个矩阵行列数
a = new int* [m];//a存放m个指针
for (int i = 0; i < m; i++)
a[i] = new int[n];//a[i]存放一行数
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
cin >> a[i][j];
int x, y;
cin >> x >> y;//第二个矩阵行列数
int** b;
b = new int* [x];
for (int i = 0; i < x; i++)
b[i] = new int[y];
for (int i = 0; i < x; i++)
for (int j = 0; j < y; j++)
cin >> b[i][j];
/
int** c;
c = new int* [m];
for (int i = 0; i < m; i++)
c[i] = new int[y];//但c数组要置零
for (int i = 0; i < m; i++)
for (int j = 0; j < y; j++)
c[i][j] = 0;
/
product(a, b, c, m, n, x, y);//调用函数,c储存结果
for (int i = 0; i < m; i++)
{
cout << c[i][0];
for (int j = 1; j < y; j++)
{
cout << " " << c[i][j];
}
cout << endl;
}
/
//释放内存
for (int i = 0; i < m; i++)
delete[] a[i];
for (int i = 0; i < x; i++)
delete[] b[i];
for (int i = 0; i < m; i++)
delete[] c[i];
delete[] a;
delete[] b;
delete[]c;
/
return 0;
}
void product(int** a, int** b, int** c, int m, int n, int x, int y)
{
for (int i = 0; i < m; i++)
{
for (int j = 0; j < y; j++)
{
for (int k = 0; k < n; k++)
c[i][j] += a[i][k] * b[k][j];
}
}
}