-
三数论大小(指针)
输入三个整数,然后按照从大到小的顺序输出数值。
要求:用三个指针分别指向这三个整数,排序过程必须通过这三个指针来操作,不能直接访问这三个整数;输出时,必须使用这三个指针,不能使用存储三个整数的变量
#include <iostream>
using namespace std;
int main()
{
int t, i,j,* p1, * p2, * p3;
int a, b, c;
int temp=0;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> a >> b >> c;
p1 = &a; p2 = &b; p3 = &c;
//123 213 312 321
if (*p1 < *p2) {
temp = *p1;
*p1 = *p2;
*p2 = temp;
}
if (*p1 < *p3) {
temp = *p1;
*p1 = *p3;
*p3 =temp;
}
if (*p2 < *p3) {
temp = *p2;
*p2 = *p3;
*p3 = temp;
}
cout << *p1 << " " << *p2 << " " << *p3 << endl;
}
return 0;
}
-
货币兑换(指针与常量)
设定以下汇率常量
美元汇率为6.2619,表示1美元兑换6.2619元人民币
欧元汇率为6.6744,表示1欧元兑换6.6744元人民币
日元汇率为0.0516,表示1元日元兑换0.0516元人民币
港币汇率为0.8065,表示1元港币币兑换0.8065元人民币
定义一个常量指针,根据需求指针指向不同的汇率,然后计算出各种货币兑换为人民币的数量
要求:不能直接使用汇率常量进行计算,必须使用常量指针,只能使用一个指针
输入一个t表示有t个测试实例
每行先输入一个字母,表示货币类型,然后再输入一个数字(正浮点数),表示货币数量
D表示美元,E表示欧元,Y表示日圆,H表示港币
依次输入t行
#include <iostream>
#include <iomanip>
using namespace std;
int main() {
double const* p;
int t, i;
double x,sum=0;
char s;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> s >> x;
if (s == 'D')
{
double a = 6.2619;
p = &a;
sum =*p *x;
}
else if (s == 'Y')
{
double a = 0.0516;
p = &a;
sum = *p * x;
}
else if (s == 'E')
{
double a = 6.6744;
p = &a;
sum = *p * x;
}
else if (s == 'H')
{
double a = 0.8065;
p = &a;
sum = *p * x;
}
cout << fixed << setprecision(4) << sum << endl; //输出小数点后4位
}
return 0;
}
-
动态数组(指针与数组)
一开始未知数组长度,根据要求创建不同类型的指针,并且使用指针创建相应长度的数组,然后再完成不同的要求
若要求创建整数数组,计算数组内所有数据的平均值
若要求创建字符数组,找出数组内的最大字母
若要求创建浮点数数组,找出数组的最小值
要求程序整个过程不能使用数组下标,从数组创建、输入到搜索、比较、计算,到输出都必须使用指针
提示:使用new关键字
#include <iostream>
using namespace std;
int main()
{
int t, n, i, j;
double sum = 0;
char s;
cin >> t;
for (i = 0; i < t; i++)
{
cin >> s >> n;
if (s == 'I')
{
int* p = new int[50];
for (j = 0; j < n; j++)
{
cin >> *(p + j);
sum += *(p + j);
}
sum = sum / n;
cout << sum << endl;
delete p;
}
else if (s == 'C')
{
char* p = new char[50];
for (j = 0; j < n; j++)
{
cin >> *(p + j);
}
char max = *p;
for (j = 0; j < n; j++)
{
if(*(p+j)>max)
{
max = *(p + j);
}
}
cout << max << endl;
delete p;
}
else if (s == 'F')
{
float* p = new float[50];
for (j = 0; j < n; j++)
{
cin >> *(p + j);
}
float min = *p;
for (j = 0; j < n; j++)
{
if (*(p + j) < min) {
min = *(p + j);
}
}
cout << min << endl;
delete p;
}
}
return 0;
}
-
三串合一(指针与字符数组)
输入三个字符串,通过指针读取各个字符串的子串(子串是指字符串中连续的一小部分),把它们合并成一个新字符串
要求:
1. 三个字符串的创建和输入可以使用数组,也可以不用
2. 输入后,根据三个字符串的子串的长度,计算出新字符串的长度
3. 使用动态数组的方法创建新的字符串,并且使用指针读取三个字符串的不同部分,并且复制到新字符串中,要求整个过程都不能使用数组下标
4. 使用指针输出新的字符串
第一行输入t表示有t个测试实例
连续三行输入三个字符串,每个字符串都包含10个字符
连续三行,每行输入数字a和b,表示每个子串的开始和结束位置。注意字符串的位置是按照一般意义从1开始计算,和编程中的数组位置不同。例如字符串abcdefg,开始位置是3,结束位置是5,那么子串就是cde
依次输入t个实例
#include <iostream>
using namespace std;
int main()
{
int t, i, j, k, m,c=0,length=0,r=0;
int a[10], b[10];
char* p2 = new char[100100];
char* p1 = new char [50];
cin >> t;
for (k = 0; k < t; k++)
{
length = 0;
int z = 0;
for (i = 0; i < 30; i++)
{
cin >> *(p1 + i);
}
*(p1 + 30) = '\0';
for (i = 0; i < 3; i++)
{
cin >> a[i] >> b[i];
}
for (i = 0; i < 3; i++)
{
for (m = z+a[i]-1; m <= z+b[i]-1; m++)
{
*(p2+c) = *(p1 + m);
c++;
length++;
}
z += 10;
}
for (c = 0+r; c <length+r; c++)
{
cout << *(p2 + c);
}
r = length;
cout << endl;
}
delete[]p1;
delete[]p2;
return 0;
}
-
矩阵左转(指针与数组)
输入一个2*3的矩阵,将这个矩阵向左旋转90度后输出
4 5 6
向左旋转90度后的矩阵变为:
3 6
2 5
1 4
要求:除了矩阵创建和数据输入可以使用数组和数组下标的方法,其他过程对矩阵的任何访问都必须使用指针
提示:m行n列的二维矩阵,第i行第j列的元素与首元素的距离为i*n+j,序号从0开始计算
#include <iostream>
using namespace std;
int main()
{
int t, i, j, k, sum=0;
int* p1 = new int[50];
int* p2 = new int[50];
cin >> t;
for (i = 0; i < t; i++)
{
for (j = 0; j < 6; j++)
{
cin >> *(p1 + j);
}
// 0123456 2--0 5--1 1--2 4--3
*(p2 + 0) = *(p1 + 2);
*(p2 + 1) = *(p1 + 5);
*(p2 + 2) = *(p1 + 1);
*(p2 + 3) = *(p1 + 4);
*(p2 + 4) = *(p1 + 0);
*(p2 + 5) = *(p1 + 3);
for (j = 0; j < 6; j++)
{
cout<< *(p2 + j) <<' ';
sum++;
if (sum % 2 == 0)
{
cout << endl;
}
}
}
delete p1;
delete p2;
return 0;
}