1.使用指针法编程找出二维数组中最大的数/ 2.使用指针法编程找出其中最小的数,并输出对应的行号和列号/ 3.利用指针将输入的两个字符串s1和s2连接起来,要求短的在前

文章介绍了使用C语言指针处理二维数组以找到最大和最小值,并给出对应的行号和列号。同时,讲解了如何通过指针连接两个字符串以及在指定字符前插入标记字符。文章讨论了函数参数传递和指针的使用方法,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:学校cg作业——行指针和列指针。第一题第二题个人认为有误。第3题在我上篇博客中点这里

1.使用指针法编程找出二维数组中最大的数

【问题描述】

现有如下的二维数组,请找出其中最大的数。

要求:

1、不在子函数中输出。

2、使用指定子函数,不得修改。

int GetMax(int *p,int m,int n)

【输入形式】

主函数中循环输入2行3列元素:

【输出形式】

输出最大值

【样例输入】

1 2 9

4 9 8
【样例输出】

max=9

【样例说明】
注意:主函数中函数调用要考虑传实参是行地址。

题目本身很简单,但是题目要求使用行指针,这就需要对行指针有一定的了解
但是我个人认为,题目给的传参接收函数int* p并不能实现题目要求,二维指针的传参应该用函数指针来接收,下面展示的代码仅是为了完成题目要求而写

#include<stdio.h>
int GetMax(int* p, int m, int n)//p是行指针
{
	int i = 0,j = 0;
	int max = 0;
	for (i = 0; i < m; i++)
	{
		p = p + i * n;
		for (j = 0; j < n; j++)
		{
			if (*(p+j) > max)
				max = *(p + j);
		}
	}
	return max;
}
int main()
{
	int i = 0, j = 0;
	int arr[2][3] = { 0 };
	for (i = 0; i < 2; i++)
	{
		for (j = 0; j < 3; j++)
		{
			scanf("%d", &arr[i][j]);
		}
	}
	int* p = &arr[0][0];
	printf("max=%d", GetMax(p, 2, 3));
	return 0;
}

2.使用指针法编程找出其中最小的数,并输出对应的行号和列号(如果最小值有多个,输出最后一次出现最小值的行数和列数)

【问题描述】

现有两行三列的二维数组,数据是从键盘输入。请使用指针法找出其中最小的数,并输出对应的行号和列号(如果最小值有多个,输出最后一次出现最小值的行数和列数)。

要求:

1、不在子函数中输出。

2、使用指定子函数,不得修改。

void GetMin(int *p,int m,int n,int *b)//p是行地址,m是行,n是列,b存储最小值、行和列的结果

【输入形式】

主函数中循环输入2行3列数组元素。

【输出形式】

输出最后一次最小值及所在行号和列号

【样例输入】

7 6 4

4 3 3

【样例输出】

min=3,2,3

与上题一样,我认为题目给的接收参数并不严谨,展示代码仅为完成题目而写。

#include<stdio.h>
void GetMin(int* p, int m, int n, int* b)
{
	int i = 0,j = 0;
	int min = 100;
	for (i = 0; i < 2; i++)
	{
		p += i * n;
		for (j = 0; j < 3; j++)
			if ( p[j] <= min)
			{
				min = p[j];
				b[0] = p[j];
				b[1] = i + 1;
				b[2] = j + 1;
			}
	}
}
int main()
{
	int i = 0, j = 0;
	int b[3] = { 0 };
	int arr[2][3] = { 0 };
	for (i = 0; i < 2; i++)
		for (j = 0; j < 3; j++)
			scanf("%d", &arr[i][j]);
	int* p = &arr[0][0];
	GetMin(p, 2, 3, b);
	printf("min=%d,%d,%d", b[0], b[1], b[2]);
	return 0;
}

3.编写一个函数,利用指针将输入的两个字符串s1和s2连接起来,要求短的在前。

这题实际上就是让你模拟实现字符串函数strcat,不过稍有不同的是,短的字符串放在前面,做的时候可要看清题目。

编写一个函数,利用指针将输入的两个字符串s1和s2连接起来,要求短的在前。

要求:

1、使用子函数 char *StrCat(char *s,char *t)

2、不能使用字符串函数strcat

【输入形式】

从键盘输入两字符串,输入一个字符串后回车,再输入 另外一个。

【输出形式】

输出连接后的字符串

【样例输入】

示例1:

abcde

kobe

示例2:

123

456

【样例输出】

示例1:

kobeabcde

示例2:

123456

#include<stdio.h>
#include<string.h>
#define  N  100  
char* StrCat(char* s, char* t)
{
	if (strlen(s) > strlen(t))
	{
		char* p = t;  //存储t的首元素地址,作为函数的返回值,下同
		while (*t != '\0')  //走完t字符串
			t++;
		while (*t++ = *s++)  //将s赋给t,当赋值完'\0'后,循环结束
			;
		return p;
	}
	else
	{
		char* p = s;
		while (*s != '\0')
			s++;
		while (*s++ = *t++)
			;
		return p;
	}
}
int  main()
{
	char st1[N] = { 0 };
	char st2[N] = { 0 };
	gets(st1);
	gets(st2);
	puts(StrCat(st1, st2));
	return  0;
}

4.编写一个函数,利用指针在字符串s中的指定字符前插入标记字符。指定字符和标记字符均从键盘输入

数组的增删查改是很麻烦的,这里有两种思路,一是在原函数上作修改,很麻烦;二是创建一个新的数组用来存值,非常简便。下面展示的代码就是第二种。

编写一个函数,利用指针在字符串s中的指定字符前插入标记字符。指定字符和标记字符均从键盘输入。

要求:子函数 char *InsertStr(char *s,char t,char c)

【输入形式】

输入主串s,输入指定字符t,输入标记字符c。

【输出形式】

输出插入后字符串

【样例输入】

abcabcde

b

【样例输出】

a#bca#bcde

#include<stdio.h>
#include<string.h>
#define  N  100  
char* InsertStr(char* s, char  t, char  c)
{
	int i = 0;
	char arr[N] = { 0 };
	char* tmp = s;
	while (*tmp != '\0')
	{
		if (*tmp != t)
		{
			arr[i++] = *tmp;
		}
		else
		{
			arr[i++] = c;
			arr[i++] = *tmp;
		}
		tmp++;
	}
	strcpy(s, arr); //不返回arr是因为arr是个局部变量,且不将arr设为全局变量是
	//因为此题是程序片段编程题,题目要求只能在函数中修改。
	return s;
}
int main()
{
	char st[N] = { 0 };
	char t = 0, c = 0;
	gets(st);
	scanf(" %c", &t);
	scanf(" %c", &c);
	puts(InsertStr(st, t, c));
	return 0;
}

文末BB:对哪里有问题的朋友,可以在评论区留言,若哪里写的有问题,也欢迎朋友们在评论区指出,博主看到后会第一时间确定修改。最后,制作不易,如果对朋友们有帮助的话,希望能给点点赞和关注. 本篇文章个人感觉写的不太好。
在这里插入图片描述

评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溪读卖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值