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

news2024/9/22 13:44:43

🍉内容专栏:【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] != '\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;
}

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/341659.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

async thunk 解决 API 调用的依赖问题

async thunk 解决 API 调用的依赖问题 一句话节省看下面一堆内容的时间就是&#xff1a; async thunk 中可以使用 async/await 锁住其他的 action 操作 一般 API 之间存在三种情况&#xff1a; A 和 B 之间没有依赖关系 这样的情况下&#xff0c;A 和 B 可以各调用各的&#x…

最近大热的 chatGPT 会取代你的工作吗?

ChatGPT 由于其高效的自然语言处理能力&#xff0c;它最容易取代的领域可能是&#xff1a; 文本分类&#xff1a;ChatGPT 可以用作文本分类系统&#xff0c;对文本进行分类 聊天机器人&#xff1a;ChatGPT 可以制作聊天机器人&#xff0c;提供人性化的交互体验 文本生成&…

策略游戏与实践反馈

早上看到time&#xff08;李培楠&#xff09;居然击败maru得了IEM的冠军&#xff0c;加上即时战略游戏的没落&#xff0c;星际2的研发停止&#xff0c;以及最近曾经被大家膜拜的暴雪闹出的各种事情&#xff0c;各种百感交集吧&#xff0c;从2000年上手星际争霸1开始&#xff0c…

【SPSS】数据预处理基础教程(附案例实战)

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

2.10、时间片轮转、优先级调度算法、多级反馈队列调度算法

Tips&#xff1a;各种调度算法的学习思路 算法思想 算法规则 这种调度算法是用于作业调度还是进程调度? 抢占式? 非抢占式? 优点和缺点 是否会导致饥饿\color{red}饥饿饥饿 某 进程/作业 长期得不到服务 1、时间片轮转&#xff08;RR, Round-Robin&#xff09; 1.1、例…

别具一格,原创唯美浪漫情人节表白专辑,(复制就可用)(html5,css3,svg)表白爱心代码(2)

别具一格&#xff0c;原创唯美浪漫情人节表白专辑&#xff0c;(复制就可用)&#xff08;html5,css3,svg)表白爱心代码(2) 目录 ​​​​​​​款式二&#xff1a;心形实时显示认识多长时间桃花飞舞&#xff08;爱心&#xff09;款 1、拷贝完整源代码 2、拷贝完整js代码 3、…

漏洞修复 Zookeeper、MySQL、Elasticsearch

漏洞修复 一、HTTP漏洞修复 1.1 漏洞说明 1.2 漏洞修复 1.2.1 升级HTTPD到最新版本&#xff08;2.4.53&#xff09; 1.2.1.1 服务器有网的情况下执行以下操作&#xff1a; 安装CodeIT库 cd /etc/yum.repos.d wget https://repo.codeit.guru/codeit.el7.repo 更新httpd y…

解决需求变更难题的8大方案

需求变更8大原因为什么会出现需求变更&#xff0c;这是由于需求约束、规则有了新的变化、由于政策发生变化&#xff0c;客户、沟通方式、流程化、标准化的问题等导致。这里在在过去的项目经验中&#xff0c;提出了常见的8大需求变更的原因。政策发生变化&#xff1a;指由于国家…

牛客网Python篇数据分析习题(三)

1.现有一个Nowcoder.csv文件&#xff0c;它记录了牛客网的部分用户数据&#xff0c;包含如下字段&#xff08;字段与字段之间以逗号间隔&#xff09;&#xff1a; Nowcoder_ID&#xff1a;用户ID Level&#xff1a;等级 Achievement_value&#xff1a;成就值 Num_of_exercise&a…

华为OD机试 - 去除多余空格(Python)| 真题+思路+代码

去除多余空格 题目 去除文本多余空格,但不去除配对单引号之间的多余空格。给出关键词的起始和结束下标,去除多余空格后刷新关键词的起始和结束下标。 条件约束: 不考虑关键词起始和结束位置为空格的场景;单词的的开始和结束下标保证涵盖一个完整的单词,即一个坐标对开…

flurry+atos crash代码定位

flurry 崩溃日志代码定位 用symbolicatecrash工具分析iOS Crash文件通过atos符号化崩溃报告 1.写测试crash代码&#xff08;方便检测最后crash是否定位正确 **MineViewController-xima方法-485行&#xff09; 2.代码中flurry sdk打开crash追踪&#xff08;默认为NO&#xff0…

Prometheus 告警规则

Prometheus 告警规则 Prometheus官方内置的第三方报警通知包括&#xff1a;邮件、 即时通讯软件&#xff08;如Slack、Hipchat&#xff09;、移动应用消息推送(如Pushover)和自动化运维工具&#xff08;例如&#xff1a;Pagerduty、Opsgenie、Victorops&#xff09; Promethe…

Allegro如何批量快速修改复用好的模块操作指导

Allegro如何批量快速修改复用好的模块操作指导 在做PCB设计的时候,相同模块可以用reuse复用的功能,可以大大提升效率,但是模块需要修改的时候,其它模块也要跟着修改,逐个再去复用一遍比较费时间,Allegro支持批量快速修改复用好的模块 前提是相同模块必须是相同的mdd文件…

Ray和极客们的创新之作,2月18日来发现

所在论坛&#xff1a;数据库技术创新&云原生论坛分享时段&#xff1a;2.18 10:30-11:00分享主题&#xff1a;云原生数据库PieCloudDB &#xff1a;Unbreakable安全特性剖析分享嘉宾&#xff1a;王淏舟&#xff0c;拓数派资深研发工程师 由中国开源软件推进联盟PostgreSQL分…

Ansible的部署和命令模块

Ansible的部署和命令模块目录一、ansible 的概述1.1ansible简介1.2官方网站1.3ansible 的特点1.4ansible的工作机制1.5ansible的组成模块二、ansible部署2.1环境准备2.2Asible的安装三、ansible 命令行模块3.1command 模块3.2shell 模块3.3cron 模块3.4user 模块3.5group 模块3…

【java】40 个 SpringBoot 常用注解(建议收藏)

本文目录一、Spring Web MVC 注解Spring Web MVC 注解RequestMappingRequestBodyGetMappingPostMappingPutMappingDeleteMappingPatchMappingControllerAdviceResponseBodyExceptionHandlerResponseStatusPathVariableRequestParamControllerRestControllerModelAttributeCross…

王道操作系统笔记(七)——— 内存管理的基本要求和连续分配管理方式

文章目录一、内存的概念和作用二、内存管理的概念三、进程运行的基本原理和要求3.1 程序执行过程3.2 逻辑地址和物理地址3.3 程序的链接3.4 程序的装入3.5 内存保护四、覆盖与交换4.1 覆盖技术4.2 交换技术五、连续分配管理方式5.1 单一连续分配5.2 固定分区分配5.3 动态分区分…

解决ArcSWAT 2012.10_8.25安装 Error 1001 无法获得SWAT_HRU.dll程序集中安装程序类型。->无法加载一个或多个请求熟悉

问题描述 Error1001.无法获得G:SWATArcSWATSWAT_HRUsdll 程序集中的安装程序类型。->无法加载一个或多个请求的类型。有关更多信息&#xff0c;请检索LoaderExceptions 属性。 这是由于找不到对应的dll文件。 参考ArcSWAT的帮助文档后&#xff0c;发现该版本 对应的ArcGI…

revit中如何创建有坡度的排水沟及基坑?

一、revit中如何创建有坡度的排水沟? 先分享一张有坡度排水沟的族的照片给大家加深一下印象&#xff0c;有了一个粗略的直观认识&#xff0c;小编就来说说做这个族的前期思路吧。 一、前期思路&#xff1a; 1、 用拼接的方式把这个族形状拼出来&#xff0c;先用放样&#xff0…

焕新启航,「龙蜥大讲堂」2023 年度招募来了!13 场技术分享先睹为快

龙蜥大讲堂是龙蜥推出的系列技术直播活动&#xff0c;邀请龙蜥社区的开发者们分享围绕龙蜥技术展开&#xff0c;包括但不限于内核、编译器、机密计算、容器、储存等相关技术领域。欢迎社区开发者们积极参与&#xff0c;共享技术盛宴。往期回顾龙蜥社区技术系列直播截至目前已举…