指针习题回顾(C语言)

news2024/11/27 15:51:54

目录

数组指针和指针数组

编程题:

字符串逆序

字符串左旋

题目1概述:

代码实现:

题目2概述:

 代码实现:

调整奇偶顺序

题目概述:

代码实现:

冒泡排序

 二级指针

代码解读:

杨氏矩阵

题目概述:

代码实现:

猜凶手

题目概述:

代码实现:

杨辉三角

题目概述:

代码实现:

判断题1:

判断题2:

判断题3:

判断题4:

指针返回值:


数组指针和指针数组

int *p[10]定义了一个指针数组,数组中10个元素,每个元素都是int*类型的指针

int (*p)[10]定义了一个数组指针,该指针只能指向存储10个整形元素的数组

编程题:

字符串逆序

法一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void Reserve(char* str)//指针数组
{
	char* left = str;
	char* right = str + strlen(str) - 1;
	while (left < right)//左右交换-逆序
	{
		char temp = *left;
		*left = *right;
		*right = temp;
		left++;//
		right--;
	}
}
int main()
{
	char str[10000] = { 0 };
	//while(scanf("%s",str)!=EOF)
	//遇到空格就不读了
	while (gets(str))
	{
		Reserve(str);//
		printf("%s", str);
	}
	return 0;
}

法二:

#include <stdio.h>

#include <string.h>

int main() {

    char str1[10000];

    char str2[10000];

    gets(str1);

    int i = 0;

    int len = strlen(str1);

    for (i = 0; i < len; i++) {

        str2[i] = str1[len - i - 1];

        printf("%c", str2[i]);

    }

    return 0;

}
字符串左旋
题目1概述:
实现一个函数,可以左旋字符串中的k个字符。

例如:

ABCD左旋一个字符得到BCDA

ABCD左旋两个字符得到CDAB
代码实现:

法一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
void leftRound(char* str, int k)//左旋
{
	int len = strlen(str);
	int time = k % len;
	for (int i = 0; i < time; i++)
	{
		char tmp = str[0];
		int j = 0;
		for (j = 0; j < len - 1; j++)
		{
			str[j] = str[j + 1];//左移
		}
		str[j] = tmp;
	}
}
int main()
{
	char str[] = "ABCD";
	leftRound(str, 5);
	printf("%s\n", str);
	return 0;
}

法二(使用库函数):

strcpy();//字符串拷贝
strncat();//字符串拼接


int main()
{
	char str1[10] = { 0 };
	char* str2 = "abcd";
	strcpy(str1, str2);//将str2拷贝到str1中
	printf("%s\n", str1);
	printf("%s\n", str2);
	char str3[100] = "abc";
	char* str4 = "hello";
	//strcat(str3, str4);//将str4中的所有内容拼接到str3中
	strncat(str3, str4, 2);//只拷贝str4中的2个字符
	printf("str3=%s\n", str3);
	return 0;
}
void leftRound(char* str, int k)
{
	int len = strlen(str);
	int time = k % len;//2
	char tmp[256] = { 0 };
	strcpy(tmp, str + time);//cd
	strncat(tmp, str, time);//cdab  tmp中存储的就是cdab
	strcpy(str, tmp);
}
int main()
{
	char str[] = "abcd";
	leftRound(str, 2);
	printf("%s\n", str);
}

法三(局部逆序):

void ReverseRange(char* str, int start, int end)//局部逆序
{
	int left = start;
	int right = end;
	while (left < right)
	{
		char tmp = str[left];
		str[left] = str[right];
		str[right] = tmp;
		left++;
		right--;
	}
}
void leftRound(char* str, int k)
{
	int len = strlen(str);
	int time = k % len;//2
	ReverseRange(str, 0, time - 1);//bacd
	ReverseRange(str, time, len - 1);//badc
	ReverseRange(str, 0, len - 1);//cdab

}

int main()
{
	char str[] = "abcd";
	leftRound(str, 2);
	printf("%s", str);
	return 0;
}

法四:

int main()

{

	char str1[] = "ABCD";

	int i = 0, k, j = 0;

	int len = strlen(str1);

	scanf("%d", &k);

	for (i = 0; i < k; i++)

	{

		char temp = str1[0];//取出最左边的字符

		for (j = 0; j < len - 1; j++)

		{

			str1[j] = str1[j + 1];//将剩下的字符左移			

		}

		str1[len - 1] = temp;//将取出的字符放至末尾

	}

	printf("%s", str1);

	return 0;

}
题目2概述:
写一个函数,判断一个字符串是否为另外一个字符串旋转之后的字符串。

例如:给定s1 =AABCD和s2 = BCDAA,返回1

给定s1=abcd和s2=ACBD,返回0.


AABCD左旋一个字符得到ABCDA

AABCD左旋两个字符得到BCDAA

AABCD右旋一个字符得到DAABC
 代码实现:

法一:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int leftRound(char* str, char* str2, int k)//左旋
{
	int len = strlen(str);
	int time = k % len;
	for (int i = 0; i < time; i++)
	{
		char tmp = str[0];
		int j = 0;
		for (j = 0; j < len - 1; j++)
		{
			str[j] = str[j + 1];//左移
		}
		str[j] = tmp;
	}
	if (strcmp(str, str2) == 0)
		//str和str2进行比较  str>str2返回正数;str=str2返回0;str<str2返回负数  根据ASCII码值比较
	{
		return 1;//str=str2
	}
	else
		return 0;
}
int main()
{
	char str[] = "ABCD";
	char str2[] = "CDAB";
	printf("%d", leftRound(str, str2, 2));
	//printf("%s\n", str);
	return 0;
}

法二(使用库方法):

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
	char str1[] = "abcde";//主串
	char* str2 = "bcd";//子串
	char* p = strstr(str1, str2);//字符串查找
	printf("%s", p);
	return 0;
}

int findRound(char* str1, char* str2)
{
	char tmp[256] = { 0 };
	strcpy(tmp, str1);//拷贝 
	strcat(tmp, str1);//拼接
	return strstr(tmp, str2) != NULL;//字符串查找
}
int main()
{
	char str1[] = "abcde";//主串
	char* str2 = "bcd";//子串
	int ret = findRound(str1, str2);
	if (ret == 1)
	{
		printf("是旋转后的结果");
	}
	else
	{
		printf("不是旋转后的结果");
	}
}
调整奇偶顺序
题目概述:
输入一个整数数组,实现一个函数, 

来调整该数组中数字的顺序使得数组中所有的奇数位于数组的前半部分,

所有偶数位于数组的后半部分。
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Function(int* p, int len)
{
	int* left = p;
	int* right = p + len - 1;
	while (left < right)
	{
		while ((left < right) && (*left % 2 != 0))//奇数
		{
			left++;
		}
		while ((left < right) && (*right % 2 == 0))//偶数
		{
			right--;
		}
		int tmp = *left;
		*left = *right;
		*right = tmp;//交换
	}
}
int main()
{
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	int len = sizeof(arr) / sizeof(arr[0]);
	Function(arr, len);
	for (int i = 0; i < len ; i++)
	{
		printf("%d ", arr[i]);//arr[i]=*(arr+i)      arr[i][j]=*(*(arr+i)+j)
	}
	return 0;
}
冒泡排序
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
	int data[] = { 1,2,3,4,5,6 };
	int sz = sizeof(data) / sizeof(data[0]);
	int i = 0, j = 0;
	for (i = 0; i < sz; i++)
	{
		for (j = 0; j < sz - i - 1; j++)
		{
			if (data[j] < data[j + 1])
			{
				int temp = data[j];
				data[j] = data[j + 1];
				data[j + 1] = temp;
			}
		}
	}
	for (i = 0; i < sz; i++)
	{
		printf("%d ", data[i]);
	}
	return 0;
}
 二级指针
int main()
{
	int a = 10;
	int* p = &a;
	int** p2 = &p;
	printf("%d", **p2);//10
	return 0;
}
代码解读:

解引用2次, 第一次得到的是p的值,第二次得到的是a的值;p2——>p——>a=10;

杨氏矩阵
题目概述:

有一个数字矩阵,矩阵的每行从左到右是递增的,矩阵从上到下是递增的,请编写程序在这样的矩阵中查找某个数字是否存在。

代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int FindNum(int arr[][3], int x, int y, int key)
{
	int i = 0;
	int j = y - 1;
	//判断i和j是合法的
	while (i < x && j >= 0)
	{
		if (arr[i][j] < key)
		{
			i++;
		}
		else if (arr[i][j] > key)
		{
			j--;
		}
		else
			return 1;//找到了
	}
	return 0;//没有找到
}
int main()
{
	int arr[][3] = { {1,2,3},{4,5,6},{7,8,9} };
	int ret = FindNum(arr, 3, 3, 5);
	//printf("%d", ret);
	if (ret == 1)
		printf("找到了");
	else
		printf("没找到");
	return 0;
}
猜凶手
题目概述:
日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。

以下为4个嫌疑犯的供词:

A说:不是我。

B说:是C。

C说:是D。

D说:C在胡说

已知3个人说了真话,1个人说的是假话。

现在请根据这些信息,写一个程序来确定到底谁是凶手。
代码实现:
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Find()
{
	for (char killer = 'a'; killer <= 'd'; killer++)//穷举法-假设法
	{
		if ((killer != 'a') + (killer == 'c') + (killer == 'd') + (killer != 'd') == 3)
		{
			printf("%c是凶手", killer);
		}
	}
}
int main()
{
	Find();
	return 0;
}

杨辉三角

题目概述:
在屏幕上打印杨辉三角。


1
1 1
1 2 1
1 3 3 1
……
代码实现:

 

判断题1:

判断题2:

解析:release版本,宏不起作用(A错误);在Linux情况下,release版本也会起作用(B错误);

判断题3:

解析:D选项左边是 int ,右边是 int ()[10],类型不一样;

判断题4:

指针返回值:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
void Func(int* p1, int* p2)//输出型参数
{
	int a = 10;
	int b = 20;
	*p1 = a;
	*p2 = b;
}
int main()
{
	int k1 = 0;
	int k2 = 0;
	Func(&k1, &k2);
	printf("%d,%d", k1, k2);//10,20
	return 0;
}

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

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

相关文章

力扣---通配符匹配

题目描述&#xff1a; 给你一个输入字符串 (s) 和一个字符模式 (p) &#xff0c;请你实现一个支持 ? 和 * 匹配规则的通配符匹配&#xff1a; ? 可以匹配任何单个字符。 * 可以匹配任意字符序列&#xff08;包括空字符序列&#xff09;。 判定匹配成功的充要条件是&#xff…

lazarus:LCL 嵌入 fpwebview 组件,做一个简单浏览器

从 https://github.com/PierceNg/fpwebview 下载 fpwebview-master.zip 简单易用。 先请看 \fpwebview-master\README.md cd \lazarus\projects\fpwebview-master\demo\lclembed 修改 lclembed.lpr 如下&#xff0c;将 fphttpapp. 注释掉&#xff0c;因为我用不上。 progr…

【STM32 CubeMX】I2C层次结构、I2C协议

文章目录 前言一、I2C的结构层次1.1 怎样在两个设备之间传输数据1.2 I2C如何传输数据1.3 硬件框图1.4 软件层次 二、IIC协议2.1 硬件连接2.2 I2C 总线的概念2.3 传输数据类比2.3 I2C信号2.4 I2C数据的含义 总结 前言 在STM32 CubeMX环境中&#xff0c;I2C&#xff08;Inter-In…

相机图像质量研究(24)常见问题总结:CMOS期间对成像的影响--摩尔纹

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…

红队学习笔记Day5 --->总结

今天先不讲新知识&#xff0c;来小小的复习一下 1.8888&#xff1f;隧道端口你怎么回事 在做隧道和端口转发的时候&#xff0c;我们常见的是通过一台跳板机&#xff0c;让外网的机器去远程连接到内网的一些机器&#xff0c;这时候就常见一些这样的命令 以防忘了&#xff0c;先…

面试突击1

1.当线程没有拿到资源时&#xff0c;用户态和内核态的一个切换 在操作系统中&#xff0c;进程和线程是执行程序的基本单位。为了管理这些单位&#xff0c;操作系统使用了一种称为“进程状态”的机制&#xff0c;其中包括用户态和内核态两种状态。这两种状态代表了进程或线程在…

ubuntu屏幕小的解决办法

1. 安装vmware tools , 再点自适应客户机 执行里面的vmware-install.pl这个文件 &#xff1a;sudo ./vmware-install.pl 执行不了可以放到家目录&#xff0c;我放在了/home/book 里面 最后点这个自适应客户机 然后我这里点不了是因为我点了控制台视图和拉伸客户机&#xff0c…

[word] word怎么取消隐藏文字 #职场发展#微信

word怎么取消隐藏文字 Word有很多实用的技巧&#xff0c;学会了可以节省大量的时间在编辑上。今天就给大家分享下word怎么取消隐藏文字这个小技能。 1.选中内容设置 首先先显示段落符号标记(快捷鍵Ctrl Shift8)&#xff0c;之后选中文本内容。 2.设置取消隐藏的文字 点击开始…

unreal engine5.1中设置convex decomposition凸包分解

UE5系列文章目录 文章目录 UE5系列文章目录前言一、convex decomposition是什么&#xff1f;二、convex decomposition属性设置 前言 今天使用ue5根据网上教程制作可操控直升机&#xff0c;找属性convex decomposition凸包分解&#xff0c;默认的碰撞如下图 如果想使用精细化…

回溯题中借助哈希法来巧妙去重的操作

今天总结一下回溯法以来做过的这些题&#xff0c;我又发现一个困扰了我的问题&#xff0c;就是在491. 非递减子序列、46. 全排列、47. 全排列 II中都有涉及到用哈希法&#xff0c;去记录曾经用过的元素&#xff0c;下面来总结一下吧。 首先得知道&#xff0c;为什么会用到哈希法…

OpenAI 最新发布的从文本生成视频模型 Sora 炸裂登场,它能根据文字指令创造逼真且富有想象力的场景

文章目录 一、前言二、主要内容三、总结 &#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ 一、前言 此页面上的所有视频均由 Sora 直接生成&#xff0c;未经修改。 OpenAI - Sora is an AI model that can create realistic and imaginative scenes f…

poetry,一个好用的Python项目依赖管理库

🏷️个人主页:鼠鼠我捏,要死了捏的主页 🏷️付费专栏:Python专栏 🏷️个人学习笔记,若有缺误,欢迎评论区指正 前言 在 Python 开发领域,项目依赖管理是一个至关重要的问题。Python Poetry 是一个现代化的项目依赖管理工具,旨在简化 Python 项目的依赖管理和打包…

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化

图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 卷积神经网络的一些基本概念&#xff1a;图像卷积、步长、填充、特征图、多通道卷积、权重共享、感受野、池化 1.图像卷积、步长、填充 图像卷积&#xff1a;卷积核矩阵在一个原始图像矩阵上 “从上往下、…

C++ STL: list使用及源码剖析

list使用 list常用函数及使用&#xff08;1&#xff09; #include <iostream> #include <list> #include <algorithm>int main() {// 创建liststd::list<int> myList {5, 2, 9, 1, 5, 6};// 打印liststd::cout << "Original list: &quo…

记录一次涩涩情侣飞行棋密码破解

注本公众号&#xff0c;长期推送技术文章 知攻善防实验室 红蓝对抗&#xff0c;Web渗透测试&#xff0c;红队攻击&#xff0c;蓝队防守&#xff0c;内网渗透&#xff0c;漏洞分析&#xff0c;漏洞原理&#xff0c;开源 工具&#xff0c;社工钓鱼&#xff0c;网络安全。 81篇原…

算法-----高精度2(高精度乘法,高精度除法,高精度斐波那锲数列)

高精度乘法 对于高精度乘法来说似乎不像高精度加减法那样简单了&#xff0c;我们似乎得一个一个加了&#xff0c;因为我们都知道 abaaaaa…a(b个a)。如果真要这要的话那1e9*1e9不得超时啊&#xff0c;所以不能这样&#xff0c;我们还是得从乘法竖式入手 这样看似乎看不出来什…

代码随想录算法训练营DAY18 | 二叉树 (5)

一、LeetCode 513 找树左下角的值 题目链接&#xff1a;513.找树左下角的值https://leetcode.cn/problems/find-bottom-left-tree-value/ 思路一&#xff1a;递归回溯全局变量比深度。 class Solution {int Max_depth 0;int result 0;public int findBottomLeftValue(TreeNo…

CAN通讯协议学习

介绍 它是一种异步通讯&#xff0c;can_high和can_low两条线利用的是电位差传输信号&#xff0c;抗干扰能力强&#xff0c;但是必须要有can控制器如TJA1050&#xff08;我的开发板&#xff09; 当 CAN 节点需要发送数据时&#xff0c;控制器把要发送的二进制编码通过 CAN_Tx 线…

数学建模:BP神经网络(含python实现)

原理 BP 神经网络&#xff0c;也称为多层感知机&#xff08;Multilayer Perceptron&#xff0c;MLP&#xff09;&#xff0c;是一种常见的神经网络模型&#xff0c;用于解决各种机器学习问题&#xff0c;包括分类和回归。BP 代表“反向传播”&#xff08;Backpropagation&#…

磁盘database数据恢复: ddrescue,dd和Android 设备的数据拷贝

ddrescue和dd 区别&#xff1a; GNU ddrescue 不是 dd 的衍生物&#xff0c;也与 dd 没有任何关系 除了两者都可用于将数据从一台设备复制到另一台设备。 关键的区别在于 ddrescue 使用复杂的算法来复制 来自故障驱动器的数据&#xff0c;尽可能少地造成额外的损坏。ddrescue…