zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

【C/C++基础练习题】简单指针与数组使用练习题

2023-04-18 16:16:11 时间

🍉内容专栏:【C/C++要打好基础啊】

🍉本文内容:简单指针与数组练习题(复习之前写过的实验报告)

🍉本文作者:Melon西西

🍉发布时间 :2023.2.12


目录

 1.vector​编辑

2.编写一个函数实现数制的转换,不用递归,用数组实现。在主函数中输入一个十进制数,输出相应的十六进制数。

3. 编写字符串反转函数。该函数的功能是将指定字符串中的字符顺序颠倒存放,然后在主函数中进行测试。

4.编写一个程序,判定一个字符串是否是另一个字符串的子串,若是,则返回子串在主串中的位置。要求不能使用系统函数。

5. 编写函数利用数组名作参数计算数组arr[3][4]所有元素的和。

6.定义一个整型指针,为其分配20个整数的空间,然后通过随机函数给这20个整数空间赋值,然后使用选择排序对这20个整数进行降序排列,并输出排序前后的结果。


 1.vector8e40b48d91f242319c539e9ce425c7ab.png

 

#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] != ''; i++)
	{
		for (j = i, k = 0; a1[j] != '' && a2[k] == a1[j]; j++, k++);
		if (a2[k] == '')
			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;
}