🍉内容专栏:【C/C++要打好基础啊】
🍉本文内容:简单指针与数组练习题(复习之前写过的实验报告)
🍉本文作者:Melon西西
🍉发布时间 :2023.2.12
目录
1.vector编辑
2.编写一个函数实现数制的转换,不用递归,用数组实现。在主函数中输入一个十进制数,输出相应的十六进制数。
3. 编写字符串反转函数。该函数的功能是将指定字符串中的字符顺序颠倒存放,然后在主函数中进行测试。
4.编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,则返回子串在主串中的位置。要求不能使用系统函数。
5. 编写函数利用数组名作参数计算数组arr[3][4]所有元素的和。
6.定义一个整型指针,为其分配20个整数的空间,然后通过随机函数给这20个整数空间赋值,然后使用选择排序对这20个整数进行降序排列,并输出排序前后的结果。
1.vector
#include<iostream>
#include<vector>
using namespace std;
void input(vector<int>& array)//这里参数+&是引用不是地址传递!!!!!
{
int length = 0;
cout << "请输入数组元素个数:";
cout << endl;
cin >> length;//让用户输入数组元素的个数
cout << "请输入每个元素的值:" << endl;
int data;
for (int i = 0; i < length; i++)//用户挨个输入数组元素
{
cin >> data;
array.push_back(data);//把元素存入array数组
}
return;
}
void output(vector<int>& array)//这里参数+&是引用不是地址传递!!!!!
{
cout << "输出数组:" << endl;
for (int i = 0; i < array.size(); i++)//输出数组元素
{
cout << array[i] << " ";
}
}
void paixu(vector<int>& array)
{
for (double p = 0; p < array.size() - 1; p++)//总共排序轮数p= array.size()-1
{
//内层循环对比
for (double j = 0; j < array.size() - p - 1; j++)
{
if (array[j] > array[j + 1])
{
//如果第一个数字大于第二个数字,交换他们
double temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
cout << "排序后";
for (int i = 0; i < array.size(); i++)
{
cout << array[i] << " ";
}
cout << endl;
}
void average(vector<int>& array)
{
double sum = 0;
for (int i = 0; i < array.size(); i++)
{
sum += array[i];
}
double ave = sum / array.size();
cout << "输出数组的平均数:" << ave << endl;
}
void findmax(vector<int>& array)
{
int max = 0, pos = 0;//定义最大值和存储元素位置的变量
for (int i = 0; i < array.size(); i++)
{
if (array[i] > max)
{
max = array[i];
pos = i + 1;
}
size_t pos = array[i];
}
cout << "输出数组的最大值:" << max << endl;
cout << "输出最大值的位置:第" << pos << "个数字" << endl;
}
void search(vector<int>& array)
{
int x, posx = 0;
cout << "输入想要查找位置的数字:" << endl;
cin >> x;
for (int i = 0; i < array.size(); i++)
{
if (array[i] = x)
{
posx = i;
size_t posx = array[i];
}
}
cout << "输出" << x << "的位置:第" << posx << "个数字" << endl;
}
int main()
{
vector<int>array;//定义数组
input(array);//把数组传递给input函数
output(array);//把数组中的数输出
paixu(array);//对数组进行排序
average(array);//求数组数据的平均数
findmax(array);//寻找数组中的最大元素的值和位置
search(array);//查到指定的数字
vector<int>().swap(array);//清除内存
}
2.编写一个函数实现数制的转换,不用递归,用数组实现。在主函数中输入一个十进制数,输出相应的十六进制数。
#include<iostream>
using namespace std;
int zhuan(int num, int arr[])
{
int i;
for (i = 0; num > 0; i++)
{
arr[i] = num % 16;
num /= 16;
}
return i - 1;
}
int main()
{
char shu[] = "0123456789ABCDEF";
int arr[20] = { 0 }, num=0, i=0;
cout << "请输入一个十进制整数:";
cin >> num;
i = zhuan(num, arr);
for (; i >= 0; i--)
cout << shu[arr[i]];
cout << endl;
return 0;
}
3. 编写字符串反转函数。该函数的功能是将指定字符串中的字符顺序颠倒存放,然后在主函数中进行测试。
#include<iostream>
using namespace std;
int fanzhuan(char* aa,int len)
{
int temp = 0;
for (int i = 0;i<len/2;i++)
{
temp = aa[i];
aa[i] = aa[len - i - 1];
aa[len - i - 1] = temp;
}
for (int i = 0;i < len;i ++)
{
cout << aa[i] ;
}
return 0;
}
int main()
{
char a[] = "good morning";
int len = sizeof(a) / sizeof(a[0]);
for (int j = 0;j < len;j++)
{
cout << a[j];
}
cout << endl;
fanzhuan(a,len );//字符串反转函数
}
4.编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,则返回子串在主串中的位置。要求不能使用系统函数。
#include<iostream>
using namespace std;
int match(char a1[], char a2[])
{
int i, j, k;
for (i = 0; a1[i] != '\0'; i++)
{
for (j = i, k = 0; a1[j] != '\0' && a2[k] == a1[j]; j++, k++);
if (a2[k] == '\0')
return i;
}
return -1;
}
int main()
{
char a1[100], a2[100]; //创建一个字符数组
cout << "请输入字符串A: " << endl;
cin >> a1;
cout << "请输入子字符串B: " << endl;
cin >> a2;
int n = match(a1, a2);
if (n != -1)
cout << a2 << "是" << a1 << "的子字符串,位置在" << n + 1 << endl;
else
cout << a2 << "不是" << a1 << "的子字符串";
return 0;
}
5. 编写函数利用数组名作参数计算数组arr[3][4]所有元素的和。
#include<iostream>
using namespace std;
int he(int array[3][4])
{
int sum = 0;
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < 4;j++)
{
sum += array[i][j];
}
}
cout <<"所有元素的和是:" << sum;
return 0;
}
int main()
{
int arr[3][4] = { {4,6,4,6},{3,7,3,7},{2,8,2,8} };
cout << "打印数组:";
for (int i = 0;i < 3;i++)
{
for (int j = 0;j < 4;j++)
{
cout << arr[i][j]<<" ";
}
}
cout << endl;
he(arr);
}
6.定义一个整型指针,为其分配20个整数的空间,然后通过随机函数给这20个整数空间赋值,然后使用选择排序对这20个整数进行降序排列,并输出排序前后的结果。
#include<iostream>
#include<time.h>
using namespace std;
void sort(int* p, int n)
{
int i, j;
int max = 0;
for (i = 0; i < n - 1; i++)//排序次数记住是n-1!!
{
max = i;
for (j = i + 1; j < n; j++)
{
if (p[j] > p[max])
{
max = j;//这里记交换的元素下标值
}
}
if (i != max)
{
int temp = p[i];
p[i] = p[max];
p[max] = temp;
}
}
}
int main()
{
int arr[20] = { 0 };
int* p = arr;
srand((unsigned)time(NULL));
for (int i = 0; i < 20; i++)
{
int x = rand() % 100;//这个一定一定要放在循环里面!外面就都是一样的数
arr[i] = x;
}
cout << "排序前:";
for (int i = 0; i < 20; i++)
{
cout << " " << arr[i];
}
cout << endl;
sort(&*p, 20);
cout << "排序后:";
for (int i = 0; i < 20; i++)
{
cout << " " << *(p + i);
}
return 0;
}